VBA-Makro tabelle durchsuchen, 5. spalte ausgeben

Hallo VBA-Gemeinde,
habe nur anfänger kentnisse in vba.
Hoffe ihr könnt mir helfen

Problem:
ich muss eine Excel-tabelle nach verschiedenen werten in der gleichen zeile(!) durchsuchen.
diese stehen in spalte C, F und G
falls alle 3 zutreffen, dann muss ich den wert in der gleichen Zeile, in der Spalte E ausgeben
ansonsten nimm die nächste zeile und wiederhole, bis das ganze wahr ist

ein beispiel
Tabelle123

A B C D E F G
u g h j 7 j ö
4 x k ü 5 r l

für C=k, F=r und G=l
gebe E aus

Weiss nicht genau wie ich Zeilen und Spaltensuche bzw. die ausgabe implementiren soll
hoffe ihr könnt mir helfen!

Edit:
Hab das ganze jetzt implementiert aber iwarum spuckt er mir immer 0 aus

Function Umlagerunsmenge_herraussuchen(ziel1 As String, aus1 As String, k As String, k1 As Boolean) as Integer

'Suchen in Tabelle blubb
With ThisWorkbook.Worksheets(„blubb“)

Dim a As Variant
Dim x As Integer
Dim i As Integer

'Anzahl Reihen
x = Cells(Rows.Count, 1).End(xlUp).Row

For i = 3 To x
a = 0
'k1 ausgewählt
If k1 = True Then
'C
If Cells(i, 3) = aus1 Then
'F
If Cells(i, 6) = k Then
'G
If Cells(i, 7) = ziel1 Then

a = Cells(i, 5)

End If
End If
End If
End If
Next
End With

End Function

Luchs

mir ist die aufgabenstellung nicht klargeworden. aber: in der vorgeschlagenen implementierung fehlt auf jeden fall die zuweisung des rückgabewertes an die funktion. z.b. könnte folgende zeile vor „end function“ zugefügt werden: Umlagerunsmenge_herraussuchen = a.

Hallo Luchs

Nachfolgendes Macro sucht über die ganze Tabelle (hört nicht beim ersten Treffer auf) und schreibt deinen gesuchten Wert (aus Spalte E) jeweils in die Spalte H.
In meinem Beispiel habe ich die Suchargumente der Einfachheit halber „fix verdrahtet“.

Sub parse()

Range(„A1“).Select
Do While ActiveCell() „“
If ActiveCell.Offset(0, 2) = „k“ Then
If ActiveCell.Offset(0, 5) = „r“ Then
If ActiveCell.Offset(0, 6) = „l“ Then
ActiveCell.Offset(0, 7) = ActiveCell.Offset(0, 4)
End If
End If
End If
ActiveCell.Offset(1, 0).Activate
Loop

End Sub

Und hier noch mit variablen Suchargumenten:

Sub parse()

Dim SpalteC, SpalteF, SpalteG As String

SpalteC = InputBox(„Welcher Wert muss in Spalte C stehen?“)
SpalteF = InputBox(„Welcher Wert muss in Spalte F stehen?“)
SpalteG = InputBox(„Welcher Wert muss in Spalte G stehen?“)

Range(„A1“).Select
Do While ActiveCell() „“
If ActiveCell.Offset(0, 2) = SpalteC Then
If ActiveCell.Offset(0, 5) = SpalteF Then
If ActiveCell.Offset(0, 6) = SpalteG Then
ActiveCell.Offset(0, 7) = ActiveCell.Offset(0, 4)
End If
End If
End If
ActiveCell.Offset(1, 0).Activate
Loop

End Sub

Hey, ich würde dir gerne helfen, aber ich verstehe dein Problem nicht so richtig.
Du hast z.B. zwei Zeilen mit Werten (Zahlen und Buchstaben) gefüllt. Richtig?
dann willst du diese Zeile nach gleichen Werten durchsuchen. Richtig?
Danach willst du in die Zellen, in dem die doppelten Werte stehen einen anderen Wert ausgeben. Richtig?

Hallo

Was für ne werte stehen in
ziel1 As String,
aus1 As String,
k As String,
k1 As Boolean

Fred

Hallo Luchs,

Deine Frage ist nicht so ganz einfach zu verstehen, aber, so wie ich Deine Funktion verstehe, möchtest Du den Ergebniswert in die Variable „a“ schreiben, richtig?

Um einen Rückgabewert über eine Function zu erhalten, solltest Du am Ende den Wert an die Funktion übergeben, indem Du vor „End Function“ die Zeile

Umlagerungsmenge_heraussuchen = a

einfügst.

Klappt das?

Gruß,

Walter

Hallo Luchs

Problem:

ich muss eine Excel-tabelle nach verschiedenen werten in der
gleichen zeile(!) durchsuchen.

diese stehen in spalte C, F und G

falls alle 3 zutreffen, dann muss ich den wert in der
gleichen Zeile, in der Spalte E ausgeben

ansonsten nimm die nächste zeile und wiederhole, bis das
ganze wahr ist

Edit:

Hab das ganze jetzt implementiert aber iwarum spuckt er mir
immer 0 aus

Wenn die Tabelle „blubb“ beim Aufruf der Function nicht das aktive Blatt ist, dann ermittelt deine Funktion in der falschen Tabelle den Wert.

Damit die Werte in „blubb“ durchsucht werden muss du vor allen „Cells(…)“ und den anderen Methoden und Eigenschaften, die sich auf das in der With-Anweisung angegebene Blatt beziehen sollen, einen Punkt setzen.

Ein weiteres Problem könnte noch auftreten, wenn die Zellinhalte in den Spalten C, F oder G auch Zahlen oder Datum enthalten, da die Suchwerte als Strings deklariert sind. In diesem solltest du Suchwerte mit der Texteigenschaft der Zellen vergleichen. z.B.
If .Cells(i, 3).Text = aus1 Then

oder du deklarierst die Suchwerte als Variant statt String.

Das zusätzliche „Exit For“ beschleunigt die Ausführung etwas, da die For-Next-Schleife" verlassen wird, sobald eine Übereinstimmung in allen 3 Spalten gefunden wurde.

Gruß
Franz

Function Umlagerunsmenge\_herraussuchen(ziel1 As String, aus1 As String, k As String, \_
 k1 As Boolean) As Integer

 'Suchen in Tabelle blubb
 With ThisWorkbook.Worksheets("blubb")


 Dim a As Variant
 Dim x As Integer
 Dim i As Integer

 'Anzahl Reihen
 x = .Cells(.Rows.Count, 1).End(xlUp).Row
 For i = 3 To x
 a = 0
 'k1 ausgewählt
 If k1 = True Then
 'C
 If .Cells(i, 3) = aus1 Then
 'F
 If .Cells(i, 6) = k Then
 'G
 If .Cells(i, 7) = ziel1 Then
 a = .Cells(i, 5)
 Exit For
 End If
 End If
 End If
 End If
 Next
 End With

End Function

Hallo Luchs,

leider fehlt mir zur Zeit die Zeit um Dir bei dem Makro weiter zu helfen. Jedoch würde ich mir an deiner Stelle überlegen das ganze mit Hilfsspalten zu erledigen.

In 3 Zellen gibtst die Suchwerte ein. In 3 Hilfsspalten mit einer „Wenn-Abfrage“ als Wahrheitswert „1“ ausgeben.
In einer 4. Spalte die Ahrheitswerte addieren.
In deiner Spalte E mit einer Wenn-Abfrage den Wert ausgeben, wenn die Addition = 3 ist.

Gruß
Sausage

hey luchs

ich komm bei deiner frage nicht ganz daraus. hast du an eine anderen ort die werte für diese spalten gespeichert und diese müssen gefunden werden?

wenn ja, frag ich mich, weshalb du ein makro schreibst. du könntest doch einfach den wert aus spalte E in z.B. spalte F (oder in eine Spalte auf einem anderen Tabellenblatt) via formel schreiben lassen, wenn alle übereinstimmen.

gruss
m

Hi Luchs,

auch wenn es bereits 5 Tage her ist, möchte ich versuchen dir zu helfen.

Ich bin mir nicht ganz sicher, ob ich verstanden habe, was du genau benötigst. Bist du dir sicher, dass du nach den ganzen IF-Abfragen den Wert aus Spalte E in die Variable a schreiben möchtest (a = Cells(i, 5))? Sofern ich dich richtig verstanden habe, wolltest du doch etwas IN die jeweilige Zelle der Spalte E schreiben?! Dazu müsstest du die Anweisung umkehren. Dann stellt sich aber für mich die Frage, was du mit Variable a bezweckst.

Liebe Grüße,
Stefi

Hallo Luchs,

hier mein Lösungsvorschlag:

Sub blubb()
Dim x As Integer
Dim i As Integer

'Anzahl Reihen
x = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To x
'Abfrage verknüpft für alle drei werte da nur dann eine Meldung erfolgen soll
If Cells(i, 3).Value = „k“ And Cells(i, 6).Value = „r“ And Cells(i, 7).Value = 1 Then
'Ausgabe von Wert in Spalte E
MsgBox (Cells(i, 5).Value)
End If
'nächste Zeile
Next i

End Sub

ich hoffe es kommt noch rechtzeitig.

Gruß Hugo

If Cells(i, 3) = aus1 Then

If Cells(i, 6) = k Then

If Cells(i, 7) = ziel1 Then

a = Cells(i, 5)

Versuche bei obigen Zeilen hinter den Cells() ein .Value also Cells().Value zu schreiben.
Man sollte immer das .value angeben, da VBA sonst nicht weis was er mit den Cells() machen soll, es gibt ja mehrere Möglichkeiten.

Grüezi Luchs

Da ich momentan im Ausland im Urlaub bin, kann ich dir keine Antwort auf deine Frage geben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -