2016-04-11 38 views
0

Haftanın tarihine ve verilerin türüne bağlı olarak satır sayısını saymam gerekiyor. Mükemmel formülüm var ama bunu bir VB kodu olarak yapmak istiyorum ama o kadar çok fikrim yok ve çalışmıyor.Parametre Bazında Satır Sayısı Sayısı. (Excel VBA)

=IF(AND($N$4="All",$N$5="All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)),IF(AND($N$4="All",$N$5<>"All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD'!$B$2:$B$99538='Source'!$N$5)),IF(AND($N$4<>"All",$N$5="All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD'!$K$2:$K$99538='Source'!$N$4)),IF(AND($N$4<>"All",$N$5<>"All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD Raised'!$B$2:$B$99538='Source'!$N$5)*('SD'!$K$2:$K$1048576='Source'!$N$4)))))) 

tüm veriler yakalanır bir sayfa (SD) ve ben aşağıdaki gibi parametresi temelinde mevcut satır sayısını saymak gerekir levha (Kaynak) olacaktır ikincisini var; Verilerin ait olduğu hafta ve verilerin kategorisi.

Düzeltme: Bu formül * saymak için gereken verileri saymaz. Ve eğer mümkünse bunu bir VBA kodu olarak yapmak istiyorum.

Sayılan verilerin nereye gitmesi gerektiği yer burasıdır. "Haftalar açılan iput bağlı değişiyor (seçilen haftaya 4 hafta aşağıda Max)"

Report

Bu görüntü i yakalamak ve haftalar dayalı kategori sayısını saymak için gereken verileri gösterir ve kategori. (Yalnızca örnek)

source

+0

Şimdi sorunuz nedir? Ne denedin, tam olarak ne yapmalı? Bunun için lütfen –

+0

@DoktorOSwaldo Üzgünüz sorunuzu belirtin, ancak bu kod çalışmıyor. – Erkyy

+0

Sadece benim web sayfam mı? Hiçbir kod göremiyorum ... sadece bir Excel formülü. – Ambie

cevap

0

yüzden istediğini biraz tahmin zorunda, ama Excel vba belirli satırları Kont istiyorsanız böyle bir şey kullanabilirsiniz: To

Dim allRows As Variant 
Dim i As Long 

Dim count as Long 
count = 0 

allRows = Tabelle5.Range("A" & start_row, end_column & last_row) 

For i = 1 To UBound(allRows) 
    If allRows(i, 1) = *category* and allRows(i,2) = *week* Then 
     count = count + 1 
    End If 
Next 

Doğru aralığı bulmak, mümkün olan çok sayıda çözüm var. .

Private Function last_row() As Integer 
Dim rangeObj As Range 
Set rangeObj = Tabelle5.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
If rangeObj Is Nothing Then 
    last_row = start_row 
Else 
    last_row = rangeObj.row 
End If 
End Function 

Public Function start_row() As Integer 
    start_row = 2 
End Function 
+0

Daha fazla referans için resimler ekledim. – Erkyy

+0

Evet, mümkün olan, gönderdiklerim ile, sadece bir işlev yapmak, kategori ve hafta parametre –

+0

olarak, bunun işe yaradığına inanıyorum ama aralığını ayarlamam gerektiğinden birkaç soru daha var, ama veri Hafta ve kategori gibi ihtiyaç duyulan A2 ve I2 değerleri, her hafta veriler eklendiğinden beri aralık en üst düzeye çıkarılmalıdır. – Erkyy

0

daha iyi yerine Aralığı() Rows.Count özelliğini kullanın, bu DoktorOSwaldo vuruyorlar doğru nokta ise, tahmin: Bu belki de iyi değil, ama benim için gayet iyi çalışıyor, bunu kullan allRows ile ilerlemek yerine. Bu yardımcı olur umarım.

Hadi

+0

Doğrudan yanıtlamayan (veya yanıtlamaya çalışmayan) Mesajlar OP'nin sorusu, yanıtladığınız gönderiye yorum olarak gönderilmelidir. – Vegard

+0

o zaman aralığı filtrelemek zorunda kalacak ve sürekli olmayan hücreler ile bir dizi, sadece satır ile Problemler verir. Ama ben senin Noktanı görüyorum, her neyse, bir Dizi'den bahsetmişken, olduğu gibi, oldukça hızlıdır. –