2016-10-14 6 views
0

Ich muss ein Makro in meinem CountResults.xlsm (Master-Arbeitsmappe) erstellen, das das folgende Problem behebt. Ich habe eine Datenspalte in einem anderen Arbeitsblatt mit entweder JA oder NEIN. Ich muss ein Makro erstellen, das die Anzahl der "JA" in der Spalte zählt. Die Spalte befindet sich in Sheet2 der Arbeitsmappe Test01.xlsx. Dann nimm diese Zahl und lege sie in eine Zelle in meiner CountResults.xlsm-Datei. Wie so:Excel VBA: Daten in Spalte von einer anderen Arbeitsmappe zählen und Zähler in Master-Arbeitsmappe eingeben

YESorNO

habe ich einen Code, der eine Zählung für eine Spalte in dem gleichen Blatt zeigt. Aber dieser Code zählt nicht, wenn es "Brüche" in der Spalte (Leerstellen) gibt, wie ich es in meinem Bild habe. Dies ist der Code:

Private Sub CommandButton1_Click() 

MsgBox Range("A1").End(xlDown).Row 
Range("A1").End(xlDown).Offset(1, 0).Select 

End Sub 

Ich habe einen anderen Code, der mit dem Zugriff auf eine andere Arbeitsmappe und Definieren von Werten für jede Arbeitsmappe und Arbeitsblatt hilft:

Dim wbSource As Workbook 
Dim wbTarget As Workbook 
Dim shSource As Worksheet 
Dim shTarget As Worksheet 

Set wbSource = Workbooks.Open(Filename:="C:\Users\khanr1\Desktop\Test_Excel\Test03.xlsm", ReadOnly:=True) 
Set wbTarget = ThisWorkbook 
Set shSource = wbSource.Worksheets("Sheet2") 
Set shTarget = wbTarget.Worksheets("Sheet1") 

Antwort

1

Verwendung COUNTIF. Es wird Ihnen die Summe geben, auch wenn der Bereich in einer anderen Arbeitsmappe ist. d.h. =COUNTIF([Book2.xlsx]Sheet2!$D$2:$D$9, "Yes"). Problem mit COUNTIF in Ihrem Blatt als eine Formel ist, dass Sie die andere Arbeitsmappe öffnen müssen, wenn Sie möchten, dass die Anzahl aktualisiert wird. Unterhalb von VBA-Code wird ein Update für Sie durchführen. Ordnen Sie die Unter auf eine Schaltfläche in Ihrem CountResults.xlsm Arbeitsmappe

EDIT: hinzugefügt Zeilenanzahl je nach Anforderung des OP

Sub UpdateResults() 

    Dim oWBWithColumn As Workbook: Set oWBWithColumn = Application.Workbooks.Open("<your Test01.xlsx address here>") 
    Dim oWS As Worksheet: Set oWS = oWBWithColumn.Worksheets("Sheet2") 
    Dim intLastRow as Integer: intLastRow = oWS.Cells(Rows.Count, "B").End(xlUp).Row 

    ThisWorkbook.Worksheets("<name of the sheet in your CountResults.xlsm workbook>").Range("<cell address>").Value = Application.WorksheetFunction.CountIf(oWS.Range("B2:B" & intLastRow), "yes") 

    oWBWithColumn.Close False 

    Set oWS = Nothing 
    Set oWBWithColumn = Nothing 

End Sub 
+0

gerade realisiert, dass 'COUNTIF' würde nur funktionieren, wenn Sie die Arbeitsmappe mit den erwarteten Spalte geöffnet haben . Meine Antwort wurde aktualisiert, um Ihnen auch die VBA-Option zu geben – Zac

+0

Funktioniert perfekt! Ich kann dir nicht genug Zac danken. Ich hatte noch eine Frage. Wenn ich von B2 zum Ende der Spalte B gehen wollte. Wie würde das aussehen? (B2: B)? – Ridwan

+0

@Ridwan - wenn das funktioniert (wie ich glaube), bitte "accept" Zac's Antwort, indem Sie auf den Scheck klicken. Dies wird sicherstellen, dass zukünftige Menschen mit ähnlichen Problemen eine Lösung sehen. Darüber hinaus geben Sie den richtigen Kredit – Hambone

Verwandte Themen