VBA - Worksheet (Spalte) durchsuchen und Werte auslesen
Hello
ich habe wieder mal ein kleines VBA Problem,
ich sitzt schon seit ein paar Tagen dran und bin
schon auf ein paar Wege draufgekommen
aber jetzt hänge ich total und hoffe es hat jemand einen Einfall
Ich habe 2 Sheets
das 1. ist das "Data"-Sheet
hier sind die Daten wie folgt eingetragen:
Spalte A Spalte B Spalte C
1.8.10 LKW1 450
1.8.10 LKW1 500
1.8.10 LKW2 370
1.8.10 LKW2 270
1.8.10 LKW3 ....
im 2. Sheet "Ergebnis"Sheet sollen diese Daten zusammengefasst werden
das sollte dann in etwa so aussehen
Spalte A Spalte B Spalte C
1.8.10 LKW1 950
1.8.10 LKW2 640
1.8.10 LKW3 ....
Zur Info:
Im 2. Sheet stehen die Daten (wie Datum und LKWs) schon drinnen
ich muss hier nur das Gewicht eintragen (Summe)
Ich hole mir hier die Daten Datum und LKW, von Sheet2,
(MEIN PROBLEM) muss dann ins "Data"Sheet die geholten Werte
mit den dort vorhandenen vergleichen und wenn beide ident sind dann
das Gewicht holen und ins "Ergebnis" eintragen
funktioniert soweit gut
aber nur beim 1. d. Monats, ab dem zweiten hab ich ein Problem
vielleicht kennt wer eine leichtere Lösung dieses Problem zu händeln
ich weiß es gibt einen Formel (SVerweis...glaub ich) damit kann
man sagen wenn in SpalteA das steht und in SpalteB das, dann hol
Wert aus SpalteC und speicher in zb. in Variable dann mach summe
oder so in etwa
lg
ava
ich habe wieder mal ein kleines VBA Problem,
ich sitzt schon seit ein paar Tagen dran und bin
schon auf ein paar Wege draufgekommen
aber jetzt hänge ich total und hoffe es hat jemand einen Einfall
Ich habe 2 Sheets
das 1. ist das "Data"-Sheet
hier sind die Daten wie folgt eingetragen:
Spalte A Spalte B Spalte C
1.8.10 LKW1 450
1.8.10 LKW1 500
1.8.10 LKW2 370
1.8.10 LKW2 270
1.8.10 LKW3 ....
im 2. Sheet "Ergebnis"Sheet sollen diese Daten zusammengefasst werden
das sollte dann in etwa so aussehen
Spalte A Spalte B Spalte C
1.8.10 LKW1 950
1.8.10 LKW2 640
1.8.10 LKW3 ....
Zur Info:
Im 2. Sheet stehen die Daten (wie Datum und LKWs) schon drinnen
ich muss hier nur das Gewicht eintragen (Summe)
Private Sub DatenSammeln()
Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("A1") = "Datum"
Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("B1") = "LKW"
Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("C1") = "Gewicht"
Dim Datum As Date
Dim TempDatum As Date
Dim LKW As String
Dim TempLKW As String
Dim Gewicht As Long
Dim TempGewicht As Long
Dim Zaehler As Long
Zaehler = 2
Dim Zaehler2 As Long
Zaehler2 = 2
While Not IsEmpty(Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("A" + Trim(Str(Zaehler))))
Datum = Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("A" + Trim(Str(Zaehler)))
LKW = Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("B" + Trim(Str(Zaehler)))
' DAS IST DIE SCHLEIFE DIE ICH BIS DATO HABE
' While Datum = Workbooks("Auswertung.xls").Worksheets("Data").Range("A" + Trim(Str(Zaehler2)))
' TempLKW = Workbooks("Auswertung.xls").Worksheets("Data").Range("B" + Trim(Str(Zaehler2)))
' If LKW = TempLKW Then
' TempGewicht = Workbooks("Auswertung.xls").Worksheets("Data").Range("C" + Trim(Str(Zaehler2)))
' Gewicht = Gewicht + TempGewicht
' End If
' Zaehler2 = Zaehler2 + 1
' Wend
'
' Workbooks("Auswertung.xls").Worksheets("Ergebnis").Range("C" + Trim(Str(Zaehler))) = Gewicht
' Gewicht = 0
Zaehler2 = 2
Zaehler = Zaehler + 1
Wend
End Sub
Ich hole mir hier die Daten Datum und LKW, von Sheet2,
(MEIN PROBLEM) muss dann ins "Data"Sheet die geholten Werte
mit den dort vorhandenen vergleichen und wenn beide ident sind dann
das Gewicht holen und ins "Ergebnis" eintragen
funktioniert soweit gut
aber nur beim 1. d. Monats, ab dem zweiten hab ich ein Problem
vielleicht kennt wer eine leichtere Lösung dieses Problem zu händeln
ich weiß es gibt einen Formel (SVerweis...glaub ich) damit kann
man sagen wenn in SpalteA das steht und in SpalteB das, dann hol
Wert aus SpalteC und speicher in zb. in Variable dann mach summe
oder so in etwa
lg
ava
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 151668
Url: https://administrator.de/forum/vba-worksheet-spalte-durchsuchen-und-werte-auslesen-151668.html
Ausgedruckt am: 23.12.2024 um 17:12 Uhr
13 Kommentare
Neuester Kommentar
Hallo Avalon1!
Sollte sich als "Array"-Formel (am Beispiel der Zeile 2) so lösen lassen:
Wichtig: Bei der Ersteingabe und nach jeder Bearbeitung ist die Formel mit Strg + Umsch + Enter zu bestätigen (und wird danach in der Bearbeitungsleiste in geschwungenen Klammern dargestellt)!
Grüße
bastla
Sollte sich als "Array"-Formel (am Beispiel der Zeile 2) so lösen lassen:
=SUMME((Data!$A:$A=Ergebnis!A2)*(Data!$B:$B=Ergebnis!B2)*Data!$C:$C)
Grüße
bastla
Hallo bastla!
Hast Du die Array-Formel mal getestet und funktioniert's bei Dir?
Gruß Dieter
Hast Du die Array-Formel mal getestet und funktioniert's bei Dir?
Gruß Dieter
Hallo bastla!
Aaaaah danke, jetzt funktionierts bei mir auch Bei der anderen Formel kam bei mir immer #Zahl und muss wohl an der Überschrift gelegen haben?
Gruß Dieter
PS. Schon ne tolle Sache mit den Array-Formeln
Aaaaah danke, jetzt funktionierts bei mir auch Bei der anderen Formel kam bei mir immer #Zahl und muss wohl an der Überschrift gelegen haben?
Gruß Dieter
PS. Schon ne tolle Sache mit den Array-Formeln
Hallo Dieter!
Abfangen ließe sich das zwar so:
aber angesichts der ohnehin schon suboptimalen Performance ...
Grüße
bastla
muss wohl an der Überschrift gelegen haben?
Konkret: der Spalte C (die hatte ich tatsächlich beim Testen nicht eingegeben ) ...Abfangen ließe sich das zwar so:
=SUMME((Data!$A:$A=Ergebn!A2)*(Data!$B:$B=Ergebn!B2)*WAHL(ISTZAHL(Data!$C:$C)+1;0;Data!$C:$C))
Grüße
bastla
Hallo ava!
Wenn Du das Ganze per VBA-Code machst, dann ließe sich das doch optimieren
Gruß Dieter
Wenn Du das Ganze per VBA-Code machst, dann ließe sich das doch optimieren
Const FormelText = "=SUM((Data!$A$2:$A$%1=A%2)*(Data!$B$2:$B$%1=B%2)*Data!$C$2:$C$%1)"
'........
With Sheets("Data")
EndZeile = .Cells(.Rows.Count, "A").End(xlUp).Row
SumFormel = Replace(FormelText, "%1", EndZeile)
'........
Sheets("Ziel").Cells(Zeile, "C").FormulaArray = Replace(SumFormel, "%2", Zeile)
End With
'........
Gruß Dieter
Hallo bastla!
Ja, ich war eigentlich der Meinung, dass die Zusammenfassungs-Tabelle per VBA generiert wird?
Das Ganze könnte dann in etwa so aussehen:
Gruß Dieter
Ja, ich war eigentlich der Meinung, dass die Zusammenfassungs-Tabelle per VBA generiert wird?
Das Ganze könnte dann in etwa so aussehen:
Const StartZeile = 2
Const FormelText = "=SUM((Data!$A$2:$A$%1=A%2)*(Data!$B$2:$B$%1=B%2)*Data!$C$2:$C$%1)"
Sub DatenSammeln()
Dim Wks As Worksheet, Zeile As Long, EndZeile As Long, c As Range, i As Long, SumFormel As String
Set Wks = ThisWorkbook.Worksheets("Ergebnis")
Wks.Cells.Clear
With ThisWorkbook.Worksheets("Data")
.Range("A1:C1").Copy Wks.Range("A1")
Zeile = StartZeile: EndZeile = .Cells(.Rows.Count, "A").End(xlUp).Row
SumFormel = Replace(FormelText, "%1", EndZeile)
For Each c In .Range("A:A")
If IsEmpty(c) Then Exit For
If c.Row >= StartZeile Then
For i = StartZeile To Zeile - 1
If c = Wks.Cells(i, "A") And c.Offset(0, 1) = Wks.Cells(i, "B") Then Exit For
Next
If i = Zeile Then
Range(c, c.Offset(0, 1)).Copy Wks.Cells(Zeile, "A")
Wks.Cells(Zeile, "C").FormulaArray = Replace(SumFormel, "%2", Zeile)
Zeile = Zeile + 1
End If
End If
Next
End With
End Sub
Gruß Dieter
Hallo Dieter!
Meine Überlegung wäre: Wozu eine Formel eintragen, wenn sich auch gleich das Ergebnis ermitteln lässt (die Daten sollten lt Beispiel sogar schon sortiert sein) - die Formel ist, eben wegen der Optimierung des Bereichs, ja nicht dynamisch (genug), sodass jedenfalls bei einer Änderung der Datenmenge das VBA-Programm ohnehin neuerlich ausgeführt werden müsste ...
... daher zB ein Dictionary mit der Kombination Datum + LKW als Key und der Gewichtssumme als Wert befüllen und daraus die Ergebnistabelle erstellen oder, wenn die Daten tatsächlich sortiert sind/werden dürfen, einfach eine Gruppenverarrbeitung vornehmen ...
Grüße
bastla
Meine Überlegung wäre: Wozu eine Formel eintragen, wenn sich auch gleich das Ergebnis ermitteln lässt (die Daten sollten lt Beispiel sogar schon sortiert sein) - die Formel ist, eben wegen der Optimierung des Bereichs, ja nicht dynamisch (genug), sodass jedenfalls bei einer Änderung der Datenmenge das VBA-Programm ohnehin neuerlich ausgeführt werden müsste ...
... daher zB ein Dictionary mit der Kombination Datum + LKW als Key und der Gewichtssumme als Wert befüllen und daraus die Ergebnistabelle erstellen oder, wenn die Daten tatsächlich sortiert sind/werden dürfen, einfach eine Gruppenverarrbeitung vornehmen ...
Grüße
bastla
Hallo bastla!
Was soll ich sagen Bei der Summen-Formel, hatte ich eigentlich schon an Deinen Einwand gedacht, dass bei Änderung einer Gewichtsangaben das Makro erneut ausgeführt werden muss. Jezt ist Dein Einwand entgegen meiner Vorstellung genau andersherum Die Betrachtungsweisen sind ja recht vielseitig. Von daher keine Ahnung welches jetzt der beste Lösungsansatz ist.
Zudem gefällt mir Deine Array-Formel so gut, dass ich die garnicht missen möchte
Gruß Dieter
Was soll ich sagen Bei der Summen-Formel, hatte ich eigentlich schon an Deinen Einwand gedacht, dass bei Änderung einer Gewichtsangaben das Makro erneut ausgeführt werden muss. Jezt ist Dein Einwand entgegen meiner Vorstellung genau andersherum Die Betrachtungsweisen sind ja recht vielseitig. Von daher keine Ahnung welches jetzt der beste Lösungsansatz ist.
Zudem gefällt mir Deine Array-Formel so gut, dass ich die garnicht missen möchte
Gruß Dieter
Hallo Dieter!
Grüße
bastla
Von daher keine Ahnung welches jetzt der beste Lösungsansatz ist.
Geht mir ja auch so - ich bin einfach von der Annahme (bestärkt durch den Kommentar von Avalon1: "muss man halt ein paar Minütchen warten ") ausgegangen, dass es sich um ein Reporting handelt, das eher größere Zeiträume abdeckt (und entsprechend seltener durchgeführt wird) - dann wird sich wohl an den Daten vermutlich nicht mehr viel ändern ...Zudem gefällt mir Deine Array-Formel so gut, dass ich die garnicht missen möchte
Na dann ... Grüße
bastla