2016-03-29 25 views
0

arasında nasıl sıralanır, farklı projelere ve tarihlere farklı görevlerin atanmış olduğu bir proje yönetim dosyanız vardır.VBA Excel - Excel'de iki kalın hücre

Her proje için ilk görev kalın harfli, aynı proje için her giriş normaldir. Daha sonra, farklı bir görev eklendiğinde, yine ilk giriş kalın, geri kalan düzenlidir.

Sorun şu ana kadar, görevlerin tarihi tamamen göz ardı edildi. Onlar neredeyse sadece proje ve veritabanına eklendikleri sıraya göre sıralanıyorlar.

Şimdi sadece tarihe göre sıralayabilirim, ama sonra da projeyle sıralamalarını kaybederim ki bu da çok önemli. Proje tarafından sıralanan görevleri tutmanın bir yolunu bulmalıyım ve buna ek olarak, bunları tarihe göre sıralayın. excel olarak

, girdileri şuna benzer:

enter image description here

(size bariz nedenlerle kalanını gösterilemiyor Bu örnekte, satırlar sipariş ARE, ancak çalışanın ekler tek nedeni budur. Diğer çalışanlar çoğunlukla belirli bir işi yaptıkları tarihleri ​​görmezden gelirler ve nasıl hatırladıklarını eklerler.

Ne yapmak istediğim, her çalışma sayfasından geçerek satırları içeriğin içeriğine göre sıralamaktır. "Başlat" sütunu. İlk olarak, her şeyi kalın harf içeren iki hücre arasında sıralamak istiyorum. Ve bundan sonra, tarihe göre sıralanacak satırların "gruplarını" yeniden düzenlemek istiyorum. Böylece bir bütün olarak projeler tarihe göre sıralanır.

Tüm önceki girişimlerim her şeyi sıralar ve proje sırasını kaybeder ya da hiç bir şey yapmadılar. Toplam programlamaya başladım.

Herhangi bir ipucu veya yardım isterim. peşin

Teşekkür

DÜZENLEME:

İşte büyük bir örnek. Ne yazık ki herhangi bir dosya gönderemiyorum. Sütunlar düzeltildi, satır sayısı çalışandan çalışanlara değişiyor. Bazıları iki satır kısa, bazıları satır 50'ye kadar devam eder.

Sorun, örneğin STACKOVERFLOW111 projesi altındaki görevleri sıralamak, ardından STACKOVERFLOW222 projesi altındaki görevleri sıralamak ve sonra da büyükleri sıralamaktır. Onları karıştırmadan tekrar "gruplar". [enter image description here

cevap

0

bunu İsimler koleksiyonu kullanır

  • aşağıdaki uyarılar ile

    Option Explicit 
    
    Sub main() 
    Dim dataRng As Range 
    Dim sortCol As Long, helperCol As Long 
    
    Set dataRng = ActiveSheet.Range("B4:H11") '.SpecialCells(xlCellTypeConstants) 
    sortCol = 6 '<<== "Start" dates column is column "F" -> column index 6 
    With dataRng 
        helperCol = .Columns(.Columns.Count).Column + 1 
        Names.Add name:="bolds", refersTo:="=GET.CELL(20,OFFSET(INDIRECT(""RC"",FALSE),0,-" & helperCol - sortCol & "))" 
        With .Offset(, helperCol - .Columns(1).Column).Resize(, 1) 
         .FormulaR1C1 = "=if(bolds,RC" & sortCol & ","""")" 
         .Offset(, 1).FormulaR1C1 = "=if(RC[-1]<>"""", RC[-1] + countif(R1C[-1]:R[-1]C[-1],RC[-1])*0.01,R[-1]C+0.0001)" 
        End With 
        .Resize(, .Columns.Count + 2).Sort key1:=.Columns(.Columns.Count + 2), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlNo 
        .Columns(.Columns.Count + 1).Resize(, 2).Clear 
    End With 
    
    End Sub 
    

    deneyebilirsiniz son ekran görüntüsü örnek

    sonra düzenlenebilir. Bu yüzden ilk kez çalıştırıldığında, tüm çalışma kitabında kullanılabilir form olan "bolds" adlı bir "isim" bulunur.

  • "eski" Excel 4.0 makro languag'dan bir makro işlevi olan "GET.CELL" işlevini kullanır. Excel 2013'te çalışıyor!

  • Daha az 100 eşit "başlangıç" tarihiniz olduğunu ve her "başlangıç" tarihinin 100 "alt" tarihlerden daha az olduğunu varsaydım. Eğer yürütülürken kodu atlama gördüğünüz gibi kolayca hattı .Offset(, 1).FormulaR1C1 =...

  • son bölümünde bu 0.01 ve 0.0001 düzenleyerek "kapasitesine" büyütebilirsiniz, böyle olmamalı, iki "yardımcı" kullanır Sonunda silinen sıralama dizinleri oluşturmak için sütunlar.

+0

Tamam, teşekkürler, denedim, ancak 1004 uygulama tanımlı veya nesne tanımlı bir hata alıyorum. Aşağıdaki satırda hata ayıklamamı söyler >>> .Offset (, helperCol - .Columns (1) .Column) .Resize (, 1) Söyler misiniz, bu satırda ne olur, bu bana hata verir? "- .Columns (1) .Column) ifadesiyle" –

+0

"ifadesi, yorumcunun" .Offset (, helperCol - .Columns (1) .Column) "ifadesini almasını söyler. Sonraki (daha) olanlar için örtük nitelik olarak 'ile bitene kadar. Aynısı tüm 'With…' ifadeleri için de geçerlidir. Yani, '' .Offset..' ifadesi ile '' dataRng' içinde kendi sırasına geldiğinden, o zaman .FormulaR1C1 = "= (eğer bol, RC" & sortCol & "," "" ")" 'dir aslında yorumlayıcı tarafından "dataRng.Offset" (helperCol - dataRng.Columns (1) .Column) olarak okunur. Yeniden göster (, 1) .FormulaR1C1 = "= eğer (bolds, RC" & sortCol & "," "" ") "'. Kod parçalarını tekrar etmekten ve okunabilirliği arttırmaktan kaçınmak için bir kodlama stili. – user3598756

+0

içinden geçtiniz mi? Hayır ise, "yanlış" bir excel dosyası ile başa çıkmak için önemli bir veri parçası gönderebilirsiniz: Yani, sadece veri "yapı" (hangi satırlar/sütunlar aslında veri tarafından işgal edilir, boş hücrelerin, hücrelerin biçimi) - ben Bu ikincisinin önemli olması beklenmezdi) gerçek verileri rahatsız eder (hücreler her zaman dizge verilerinin beklendiği bir "a" veya nümerik olan "1" (sayısal) içerebilir. Ve tabii ki, " yanlış "excel dosyası alt hata bir hata var ... – user3598756