Vba: zellinhalte vergleichen

Guten Morgen alle zusammen,

habe folgendes problem, hoffe ihr könnt mir wieder helfen:

in einem tabellenblatt1 sollen die Zellinhalte der Spalte „D“ mit den Zellinhalten vom anderen tabellenblatt2 Spalte „B“ verglichen werden, wenn die zellinhalte gleich sind dann sollen zellinhalte tabellenblatt1 spalte „J“ mit den Zellinhalten tabellenblatt2 spalte „E“ multipliziert werden. und die ausgabe erfolgt dann im tabellenblatt3 Range(„B20“)

zellinhalte im tabellenblatt1 beginnen ab der zeile 5 und im tabellenblatt2 ab der zeile 2.

wenn ihr fragen zu meiner aufgabe habt, beantworte ich die gerne.

habe schon ein code geschrieben, aber mit dem klappt irgendwie nicht…

Sub programm()

Dim Zeile As Long
Dim Zeile1 As Long
Dim Zeile2 As Long
Dim Zeile3 As Long

Zeile = 2
Zeile1 = 2
Zeile2 = 5

Do Until (Sheets(„tabellenblatt2“).Cells(Zeile + 1, 1) = „“)
If (Sheets(„tabellenblatt2“).Cells(Zeile1 + 1, 2).Value = Sheets(„tabellenblatt1“).Cells(Zeile2 + 1, 4).Value) Then
Sheets(„tabellenblatt3“).Cells(20, 2) = Sheets(„tabellenblatt2“).Cells(Zeile2 + 1, 5).Value * Sheets(„tabellenblatt1“).Cells(Zeile3 + 1, 10).Value
End If

Zeile = Zeile + 1
Loop

End Sub

Hallo
ersetze mal folgendes fürs erste bei der Berechnung.

Sheets(„tabellenblatt3“).Cells(20, 2) = cdbl(Sheets(„tabellenblatt2“).Cells(Zeile2 + 1, 5).Value) * cdbl(Sheets(„tabellenblatt1“).Cells(Zeile3 + 1, 10).Value)

weiter hast Du natürlich ein Theater bei der Row und der Columnenangabe mit den Parametern Zeile1-3, denn nur die zeile selbst wird mit Zeile=Zeile aufadiert, der rest bleibt ja statisch und Konstant. Versuche dochden Parameter Zeile1.3 zu ersetzen mit Zeile+XX

Grüse Sebastian

Ich sehe so auf den ersten Blick nur dass Du nur Deine Zählervariable Zeile inkrementierst. Die anderen (Zeile1 und Zeile2) beilen aber immer auf dem selben Stand!

Könnte das schon die Lösung sein?
Habs nur kurz überflogen?

Hallo fwerner,

habe lange getüftelt aber dennoch einen Lösungsvorschlag.

Sub vergleich()
Dim i As Integer
i = 2
Do Until (Sheets(2).Cells(i, 2) = „“)
If ((Sheets(1).Cells(i + 3, 4).Value) = (Sheets(2).Cells(i, 2).Value)) Then
Sheets(3).Cells(20, 2) = Sheets(2).Cells(i, 5).Value * Sheets(1).Cells(i + 3, 10).Value
End If
i = i + 1
Loop
End Sub

(ich hoffe die Zeilen bleiben in der Internetansich erhalten und werden nicht wie in diesem Fenster willkürlich umgebrochen)

Gruß Hugo

Sorry, bin krank, hoffe du komst anderweitig an Info. Viel Erfolg

Hallo,

ich verstehe die Aufgabe nicht ganz. In deinem Programm wird nur Zeile hochgezählt, nicht aber zeile1 und zeile2. Ist das so richtig? Und das Ergebnis soll nur in der Zelle b20 stehen? Welches Ergebnis? Multiplikation nur einer Zeile oder die Summe aus der Multiplikation aller Zeilen?

Gruß
Natator

Hallo Natator,

das ergebnis soll in B20 als summe aller werte in der spalte angezeigt werden.

und kleine ergenzung statt der * soll man
Sheets(„tabellenblatt3“).Cells(20, 2) = Sheets(„tabellenblatt2“).Cells(Zeile2 + 1, 5).Value / Sheets(„tabellenblatt1“).Cells(Zeile3 + 1, 10).Value nehmen. danke im Voraus für deine Hilfe!

Ich versuche es dann mal mit dieser Umsetzung:

Dim zeile, zeile1, zeile2 As Integer
Dim ergebnis As Double
Dim Blatt1, Blatt2, Blatt3 As Object

Sub Programm()
zeile = 3
zeile1 = 3
zeile2 = 6

Set Blatt1 = Sheets(„Tabellenblatt1“)
Set Blatt2 = Sheets(„Tabellenblatt2“)
Set Blatt3 = Sheets(„Tabellenblatt3“)

Do Until Blatt2.Cells(zeile, 1) = „“
If Blatt2.Cells(zeile1, 2).Value = Blatt1.Cells(zeile2, 4).Value Then
ergebnis = ergebnis + Blatt2.Cells(zeile, 5).Value / Blatt1.Cells(zeile2, 10).Value
End If

zeile = zeile + 1
zeile1 = zeile1 + 1
zeile2 = zeile2 + 1

Loop
Blatt3.Range(„B20“).Value = ergebnis

End Sub

Ich habe es dabei mal ein wenig übersichtlicher gestaltet.

Gruß
Natator

danke für deinen vorschlag!

korrektur für deinen vorschlag: ergebnis=ergebnis+1

man muss aber noch eine bedingungung überprüfen: ob in der spalte 10 ein wert steht, erst dann soll dividiert werden!

Hallo,

dann müsste es so lauten:

Dim zeile, zeile1, zeile2 As Integer
Dim ergebnis, teiler As Double
Dim Blatt1, Blatt2, Blatt3 As Object

Sub Programm()
zeile = 3
zeile1 = 3
zeile2 = 6

Set Blatt1 = Sheets(„Tabellenblatt1“)
Set Blatt2 = Sheets(„Tabellenblatt2“)
Set Blatt3 = Sheets(„Tabellenblatt3“)

Do Until Blatt2.Cells(zeile, 1) = „“
teiler = Val(Blatt1.Cells(zeile2, 10).Value)
If teiler = 0 Then teiler = 1
If Blatt2.Cells(zeile1, 2).Value = Blatt1.Cells(zeile2, 4).Value Then
ergebnis = ergebnis + Blatt2.Cells(zeile, 5).Value / teiler
End If

zeile = zeile + 1
zeile1 = zeile1 + 1
zeile2 = zeile2 + 1

Loop
Blatt3.Range(„B20“).Value = ergebnis

End Sub

Deinen Korrekturvorschlag kann ich nicht nachvollziehen. „Ergebnis“ zählt Zeile für Zeile die Gesamtsumme zusammen, falls die Bedingung stimmt. Warum sollte man dieser Gesamtsumme noch 1 hinzuzählen?

Gruß
Natator