2013-11-21 14 views
5

Geniş bir sayfam var. Bu sayfada birden fazla filtre ayarlamalıyım. Filtreler belirlendikten sonra, "Nov" sütun başlığına sahip olan ve bu sütundaki değerlerin toplamını elde eden ve bu belirli toplam değeri farklı bir çalışma sayfasına içe aktaran belirli bir sütunu bulmak zorundayım. Filtreleri, çok sayıda sütuna filtreleyebileceğim yere kadar yazdım, ancak sütun başlığını bulup bu sütunu eklemeyi zor buluyorum. Şimdiye kadar yazdığım kod aşağıdadır.VBA - Belirli bir üstbilgiye sahip bir sütun bulun ve bu sütundaki tüm satırların toplamını bul

Sub Button2_Click() 
Dim colName As Long 
Dim colName1 As Long 
Dim colName2 As Long 
Dim r As Long 

SearchV = Range("A8:DD8").Find(What:="Nov", LookIn:=xlValues, LookAt:=xlWhole, _ 
MatchCase:=False, SearchFormat:=False).Column 

lastrow = Cells(Rows.Count, SearchV).End(xlUp).Row 

colName = Range("A8:DD8").Find(What:="Teams", LookIn:=xlValues, LookAt:=xlWhole, _ 
MatchCase:=False, SearchFormat:=False).Column 

colName1 = Range("A8:DD8").Find(What:="Items", LookIn:=xlValues, LookAt:=xlWhole, _ 
MatchCase:=False, SearchFormat:=False).Column 

colName2 = Range("A8:DD8").Find(What:="Domain", LookIn:=xlValues, LookAt:=xlWhole, _ 
MatchCase:=False, SearchFormat:=False).Column 

ActiveSheet.Range("$A$8:$DD$9999").AutoFilter Field:=colName, Criteria1:="ST Test",  Operator:=xlOr, Criteria2:="" 
ActiveSheet.Range("$A$8:$DD$9999").AutoFilter Field:=colName1, Criteria1:="Variance", Operator:=xlOr, Criteria2:="(Blanks)" 
ActiveSheet.Range("$A$8:$DD$9999").AutoFilter Field:=colName2, Criteria1:="9S", Operator:=xlOr, Criteria2:="(Blanks)" 

Sütun başlıkları her zaman 8. satıra başlar. Yukarıdaki satırlarda bazı utangaç bilgiler mevcut. Yani istediğim, 'Nov' sütununun H satırında olduğunu varsayalım. Toplam, H9'dan son satırın sonuna kadar hesaplanmalıdır. Sütun 'H' sütununda olduğunda bu formülü kullandım.

Cells(lastrow + 1, colName3).Formula = "=SUBTOTAL(9,H9:H" & lastrow & ")" 

Ama sütun 'Kasım' daima 'H' satırında mevcut olmayacaktır, bu yüzden dinamik sütun almaya kodumu nasıl değiştirileceğini anlamaya muktedir değilim.

cevap

7

Nesnelerinizi tam olarak nitelendirdiğinizden ve ayrıca .Find'un bir şey döndürüp döndürmediğini kontrol ettiğinizden emin olun. İşte bir örnek.

en bu

enter image description here

Şimdi Yardımlarınız Siddh için bu kodu

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim aCell As Range, Rng As Range 
    Dim col As Long, lRow As Long 
    Dim colName As String 

    '~~> Change this to the relevant sheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     Set aCell = .Range("A8:DD8").Find(What:="Nov", LookIn:=xlValues, LookAt:=xlWhole, _ 
        MatchCase:=False, SearchFormat:=False) 

     '~~> If Found 
     If Not aCell Is Nothing Then 
      col = aCell.Column 
      colName = Split(.Cells(, col).Address, "$")(1) 

      lRow = .Range(colName & .Rows.Count).End(xlUp).Row 

      '~~> This is your range 
      Set Rng = .Range(colName & "8:" & colName & lRow) 

      Debug.Print Rng.Address 
     '~~> If not found 
     Else 
      MsgBox "Nov Not Found" 
     End If 
    End With 
End Sub 

Çıktı

enter image description here

+0

Çok teşekkürler denemek gibi çalışma göründüğünü varsayalım Dünya. Çalışmamın çoğunu bununla çekmeyi başardım. Ancak asıl sorun, satırların toplamını eklemektir. Şu anda bu kodu kullanıyorum. 'SumV = SV ve "9" ' ' SumW = SV ve lRow' 'Hücreler (lRow + 1, SV) .Formula = "= SUBTOTAL (9, SumV: SumW)"' Ancak bu, aşağıdaki değeri Excel'de döndürüyor "= SUBTOTAL (9, SumV: SumW)" Ve #NAME alıyorum? hata. –

+0

Umm, SV nedir? –

+0

Üzgünüm Açık olmadım. Kodunuzda colName olarak belirttiğiniz her şeyden önce, onu başka bir yerde colName değişkenini kullandığım için SV olarak değiştirdim. Temel olarak, yapmaya çalıştığım şey, belirli bir değer elde etmek için sütunu ve satırı birleştirmektir (Örn. W9). Bu yüzden SumW için W9 ve SumW için W2128 değerini aldım. Ancak, Subtotal işlevini kullandığımda, aynı gerçek değer yerine eklenir. Onları da böyle kullanmayı denedim. '= SUBTOTAL (9," & SumV & ":" & SumW & ")'. Ama bu bile bir istisna atıyor. –

İlgili konular