2013-11-21 12 views
5

大きなシートがあります。私はそのシートの複数のフィルターを動的な位置の列ヘッダーに設定する必要があります。フィルタが設定されたら、シートの特定の列を「11月」の列見出しを見つけて、その列の値の合計を取得し、その特定の合計値を別のワークシートにインポートする必要があります。 フィルターを複数の列に設定できる部分までコードを書いていますが、列ヘッダーを見つけてその列を追加するのが難しいと感じています。以下はこれまでに書いたコードです。VBA - 特定のヘッダーを持つ列を検索し、その列のすべての行の合計を見つけます。

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)" 

列ヘッダーは常に8行目から開始します。上記の行にはいくつかの憂慮すべき情報があります。だから私が欲しいのは、列「11月」がH列にあるとします。合計は、H9から最後の行の最後まで計算する必要があります。列が 'H'列のときにこの式を使用しました。

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

しかし、列「11月には、」常に「H」の行に存在しませんので、私は動的に列を選択するために私のコードを変更する方法を見つけ出すことはできませんよ。

答えて

7

オブジェクトを完全修飾することを確認し、.Findが何かを返すかどうかをチェックしてください。ここに例があります。

今、あなたの助けSiddhため

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 

出力

enter image description here

+0

おかげで多くのことを、このコードを試すのは、ワークシートは、この

enter image description here

のように見えるとしましょうarth。私はそれを使って自分の仕事の大部分を取り除くことができました。しかし実際の問題は、行の合計を追加することです。私は今このコードを使用しています。 'SumV = SV& "9:"' 'SumW = SV&lRow' '細胞(lRow + 1、SV).Formula = "= SUBTOTAL(9、SumV:SumW)"' しかしこれはExcelで次の値を返す "= SUBTOTAL(9、SumV:SumW)" そして、#NAMEを取得していますか?エラー。 –

+0

Umm、 'SV'とは何ですか? –

+0

申し訳ありませんが、私は明確ではありませんでした。あなたがコード内でcolNameとして言及していたものは、すでに他の場所でcolName変数を使用していたので、SVに名前を変更しました。だから基本的に、私がやろうとしているのは、ある値(例えば、W9)を得るために列と行を連結することです。 SumVにはW9、SumWにはW2128の値が得られました。しかし、小計関数を使用すると、実際の値の代わりに同じものが挿入されます。私もこのように使ってみました。 '= SUBTOTAL(9、"&SumV& ":"&SumW& ")'となります。しかし、それでも例外がスローされています。 –

関連する問題