2013-11-21 16 views
5

Ho un foglio di grandi dimensioni. Devo impostare più filtri in quel foglio per intestazioni di colonne in posizioni dinamiche. Una volta impostati i filtri, devo trovare la particolare colonna nel foglio con l'intestazione di colonna "Nov" e quindi ottenere la somma di valori in quella colonna e importare quel particolare valore di somma in un foglio di lavoro differente. Ho scritto il codice fino alla parte in cui posso impostare i filtri su più colonne, ma trovo difficile trovare l'intestazione della colonna e aggiungere quella colonna. Di seguito è riportato il codice che ho scritto finora.VBA: trova una colonna con un'intestazione specifica e trova la somma di tutte le righe in quella colonna

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

Le intestazioni delle colonne iniziano sempre dal 8 ° fila. Alcune informazioni inesatte sono presenti nelle righe sopra. Quindi, quello che voglio è, supponiamo che la colonna "Nov" sia nella riga H. La somma dovrebbe essere calcolata da H9 alla fine dell'ultima riga. Avevo usato questa formula quando la colonna era nella colonna 'H'.

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

ma la colonna 'Novembre' non sarà sempre presente nella riga 'H', quindi non sono in grado di capire come cambiare il mio codice di scegliere la colonna in modo dinamico.

risposta

7

Assicurarsi di qualificare completamente gli oggetti e anche di verificare se .Find restituisce qualcosa o no. Ecco un esempio.

Diciamo che il tuo foglio di lavoro simile a questa

enter image description here

Ora provare questo codice

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 

uscita

enter image description here

+0

Grazie mille per il vostro aiuto Siddh arth. Sono riuscito a tirare fuori gran parte del mio lavoro con quello. Ma il problema attuale sta riuscendo ad aggiungere la somma delle righe. Sto usando questo codice adesso. 'SumV = SV e "9:"' ' SumW = SV & lRow' ' Cellule (lRow + 1, SV) .Formula = "= SUBTOTALE (9, SumV: SumW)" ' Ma questo sta restituendo il seguente valore in Excel "= SUBTOTAL (9, SumV: SumW)" E sto ricevendo #NOME? errore. –

+0

Umm, Cos'è 'SV'? –

+0

Mi dispiace non essere stato chiaro. Qualunque cosa tu abbia menzionato come colName nel tuo codice, l'ho rinominato in SV, poiché stavo già usando la variabile colName altrove. Quindi, in sostanza, quello che sto cercando di fare è concatenare la colonna e la riga per ottenere un certo valore (ad esempio W9). Quindi ho ottenuto il valore di W9 per SumV e W2128 per SumW. Ma quando uso la funzione Subtotale, la stessa viene inserita al posto del valore effettivo. Ho provato a usarli così. '= SUBTOTAL (9," & SumV & ":" & SumW & ")'. Ma anche questo è un'eccezione. –

Problemi correlati