Werte zählen in mehreren Arbeitsblättern
#1
Hallo zusammen

Ich möchte folgendes tun:
Im zweiten Arbeitsblatt möchte ich eine Tabelle, in welcher in der ersten Spalte fortlaufende Nummern stehen. Diese Nummern kommen auf den Arbeitsblättern
3-?? in unterschiedlicher Anzahl vor. Nun soll sobald in der ersten Spalte eine Nummer eingegeben wird (also eine neue fortlaufende Nummer hinzugefügt wird) gezählt werden, wie oft genau diese Nummer (also 001 ungleich 0012) in den Arbeitsblättern 3-?? insgesamt vorkommt und in Spalte zwei ausgegeben werden.
Es können in einem Feld auch mehrere Nummern stehen, also z.B. "001, 002". Dann sollte es bei 001 und 002 eins anzeigen.

Gibts da eine einfache Lösung?
Top
#2
Hallo,

als erster Ansatz könntest du dir mal diese benutzerdefinierte Funktion von Thomas Ramel anschauen. Die Funktion musst du in ein allgemeines Modul deiner Tabelle kopieren.

Code:
Public Function ZählenWennTabellen(Tab1 As String, _
Tab2 As String, _
Bereich As Range, _
Suchkriterium As String) As Double

'© t.ramel@mvps.org / 09.01.2005
'Funktion zur Anwendung von ZÄHLENWENN() über mehrere Tabellenblätter
'Mit angegeben werden die Tabellenblattnamen von...bis,
'sowie die üblichen Parameter für ZÄHLENWENN()
'Zur automatischen Aktualisierung im Tabellenblatt den folgenden Term
'anhängen: +(0*JETZT()) und F9 drücken
'Also z.B. wie folgt: =ZählenWennTabellen("Tabelle1";"Tabelle3";A1:A10;"Suchbegriff")+(0*JETZT())

Dim intI As Integer
Dim intJ As Integer
Dim intTab As Integer
Dim Wert As Double

If Suchkriterium = "" Then
ZählenWennTabellen = 0
Exit Function
End If

intI = Worksheets(Tab1).Index
intJ = Worksheets(Tab2).Index

For intTab = intI To intJ
Set Bereich = ActiveWorkbook.Worksheets(intTab) _
.Range(Bereich.Address)
Wert = Wert + Application.WorksheetFunction.CountIf _
(Bereich, Suchkriterium)
Next intTab
ZählenWennTabellen = Wert
End Function

Der Aufruf erfolgt mit (vgl. auch die Erläuterung direkt im Code):

=ZählenWennTabellen("Tabelle1";"Tabelle3";A1:A10;"x")+(0*JETZT())

Zitat:Es können in einem Feld auch mehrere Nummern stehen, also z.B. "001, 002". Dann sollte es bei 001 und 002 eins anzeigen.

Wenn ich diese Aussage richtig verstehe, dann ist das mit dem obigen Code nicht machbar.

Evtl. wäre auch eine Pivottabelle mit entsprechender Konsolidierung eine Alternative, aber um das zu entscheiden verrätst du zuwenig über deinen genauen Tabellenaufbau.
Gruß
Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Peter für diesen Beitrag:
  • Hawkeye
Top
#3
Hallo

Versuch es mal mit folgender Formel

Code:
=ZÄHLENWENNS(Tabelle3!A1:C30;"*"&A1&"*")+ZÄHLENWENNS(Tabelle3!A1:C7;A1)

A1 = Nummer von Arbeitsblatt 2

A1 : C7 = Bereich auf Arbeitsblatt 3, wo die Nummern stehen.

Gruß
[-] Folgende(r) 1 Nutzer sagt Danke an merkurus für diesen Beitrag:
  • Hawkeye
Top
#4
Hallo zusammen

Habe die Liste jetzt nochmals etwas umgestellt und an diesen Beitrag angehängt, so ist es wohl einfacher Wink

Auf dem Blatt Component List sollen die Einheiten aufgelistet werden. Unter Part Number steht der zu suchende Wert und bei Parts needed sollte das Total der Tabellenblätter 3-"zum letzten" stehen.

Die Werte stehen auf den Tabellenblättern immer in Spalte H und I (H die "Part Number" und I die Anzahl). Es kommen noch ca. 30 Blätter wie das 006_KY 58 dazu.

Wäre sehr dankbar über Hilfe Smile


Angehängte Dateien
.xlsx   Panels.xlsx (Größe: 165,9 KB / Downloads: 1)
Top
#5
Hallo,

wir sind nicht im Bereich Zählenwenns() sondern bei Summewenns() - das habe ich so aus dem ersten Posting nicht herausgelesen.

Folgende VBA-Code kannst du dafür verwenden:

Code:
Public Function SummeWennTabellen(Tab1 As String, _
                                  Tab2 As String, _
                                  Bereich As Range, _
                                  Suchkriterium As String, _
                                  Optional Summe_Bereich As Range) As Double
'http://www.office-loesung.de/fpost664743.php#664743
'© Thomas Ramel / 30.05.2003, ergänzt: 11.12.2004
'Funktion zur Anwendung von SUMMEWENN() über mehrere Tabellenblätter
'Mit angegeben werden die Tabellenblattnamen von...bis,
'sowie die üblichen Parameter für SUMMEWENN()
'Zur automatischen Aktualisierung im Tabellenblatt den folgenden Term
'anhängen: +(0*JETZT()) und F9 drücken um zu aktualisieren
'Also z.B. wie folgt: SummeWennTabellen("Tab1";"Tab8";A1:A10;A1;B1:B10)+(0*JETZT())

Dim intI            As Integer
Dim intJ            As Integer
Dim intTab          As Integer
Dim Summe           As Double

   If Suchkriterium = "" Then
      SummeWennTabellen = 0
      Exit Function
   End If

   If Summe_Bereich Is Nothing Then Set Summe_Bereich = Bereich

   intI = Worksheets(Tab1).Index
   intJ = Worksheets(Tab2).Index

   For intTab = intI To intJ
      Set Bereich = ActiveWorkbook.Worksheets(intTab) _
                    .Range(Bereich.Address)
      Set Summe_Bereich = ActiveWorkbook.Worksheets(intTab). _
                          Range(Summe_Bereich.Address)

      Summe = Summe + Application.WorksheetFunction.SumIf _
              (Bereich, Suchkriterium, Summe_Bereich)

   Next intTab

   SummeWennTabellen = Summe
End Function

Folgende Formel in B5 von Component List:

=SummeWennTabellen("R_006_KY 58";"R_006_KY 58";H$6:H$32;A5;I$6:I$32)+(0*JETZT())

Den Tabellenblattnamen für das letzte Tabellenblatt muss du in der obigen Formel noch anpassen.


Angehängte Dateien
.xlsm   Panels_1.xlsm (Größe: 175,25 KB / Downloads: 2)
Gruß
Peter
[-] Folgende(r) 1 Nutzer sagt Danke an Peter für diesen Beitrag:
  • Hawkeye
Top
#6
Hallo Peter

Vielen, vielen Dank!! Funktioniert perfekt, spart mir sehr viel herumprobieren und eventuelle Falschbestellungen der Komponenten.

@merkurus

Auch Dir vielen Dank für Deinen Lösungsansatz.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste