2013-11-21 5 views
5

में सभी पंक्तियों का योग ढूंढें मेरे पास एक बड़ी शीट है। मुझे डायनामिक पोजिशन में कॉलम हेडर को उस शीट में कई फ़िल्टर सेट करना होगा। फ़िल्टर सेट होने के बाद, मुझे कॉलम हेडर "नवंबर" वाले शीट में विशेष कॉलम ढूंढना होगा और फिर उस कॉलम में मानों का योग प्राप्त करना होगा और उस विशेष योग मान को एक अलग वर्कशीट में आयात करना होगा। मैंने उस भाग तक कोड लिखा है जहां मैं फ़िल्टर को एकाधिक कॉलम पर सेट कर सकता हूं, लेकिन मुझे कॉलम हेडर ढूंढना और उस कॉलम को जोड़ना मुश्किल लगता है। नीचे कोड मैंने अभी तक लिखा है।वीबीए - एक विशिष्ट शीर्षलेख वाला कॉलम ढूंढें और उस कॉलम

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 वीं पंक्ति से शुरू होते हैं। उपरोक्त पंक्तियों में कुछ बेकार जानकारी मौजूद है। तो मैं क्या चाहता हूं, मान लीजिए कि कॉलम 'नोव' एच पंक्ति में है। योग की गणना अंतिम पंक्ति के अंत तक H9 से की जानी चाहिए। जब कॉलम 'एच' कॉलम में था तो मैंने इस सूत्र का उपयोग किया था।

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

लेकिन स्तंभ 'नवम्बर हमेशा पंक्ति "एच" में मौजूद नहीं होगा, तो मैं यह पता लगाने की कैसे मेरे कोड स्तंभ गतिशील रूप लेने के लिए बदलने में सक्षम नहीं हूँ।

उत्तर

7

सुनिश्चित करें कि आप अपनी वस्तुओं को पूरी तरह अर्हता प्राप्त करते हैं और यह भी जांचते हैं कि .Find कुछ देता है या नहीं। यहाँ एक उदाहरण है।

मान लीजिए कि आपकी कार्यपुस्तिका लगता है कि यह

enter image description here

अब आपकी मदद की सिध्द के लिए इस कोड की कोशिश

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

धन्यवाद एक बहुत करते हैं अर्थ। मैं इसके साथ अपने अधिकांश काम खींचने में कामयाब रहा। लेकिन वास्तविक समस्या पंक्तियों के योग को जोड़ने के लिए प्रबंधन कर रही है। मैं अभी इस कोड का उपयोग कर रहा हूँ। 'SumV = एसवी और" 9: "' ' SumW = एसवी और lRow' ' कोशिकाओं (lRow + 1, एसवी) .Formula = "= SUBTOTAL (9, SumV: SumW)" ' लेकिन यह एक्सेल में निम्न मान लौटा रहा है "= सबबोटल (9, SumV: SumW)" और मुझे #NAME मिल रहा है? त्रुटि। –

+0

उम्म, 'एसवी' क्या है? –

+0

मुझे खेद है कि मैं स्पष्ट नहीं था। जो भी आपने अपने कोड में colName के रूप में उल्लेख किया था, मैंने इसे एसवी में बदल दिया, क्योंकि मैं पहले से ही colName चर का उपयोग कर रहा था। तो मूल रूप से, जो मैं करने की कोशिश कर रहा हूं वह निश्चित मूल्य प्राप्त करने के लिए कॉलम और पंक्ति को जोड़ता है (उदा। W9)। तो मुझे SumW के लिए WV और W2128 के लिए W9 का मान मिला। लेकिन जब मैं सबटोटल फ़ंक्शन का उपयोग करता हूं, वही वास्तविक मान के बजाय डाला जाता है। मैंने उन्हें इस तरह इस्तेमाल करने की कोशिश की। '= उप-योग (9," और SumV & ":" और SumW & ")'। लेकिन यहां तक ​​कि एक अपवाद फेंक रहा है। –

संबंधित मुद्दे