Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellwerte in externer Tabelle finden

Zellwerte in externer Tabelle finden
22.01.2023 10:34:19
Much
Hallo liebe Excel-Spezialisten!
Habe untenstehende Code geschrieben, der soweit funktioniert.
Mein Problem damit ist folgendes.
Ich möchte aus der tab_Auftrag, die tab_Statistik ergänzen, wenn ein neuer Auftrag geschrieben wurde.
Soweit habe ich es geschafft, auch die Auftragsrücknahme funftioniert.
Das Problem er vergleicht nur die Artikelnummer (tab_Auftrab!B) und diese kommt in tab_Statistik mehrfach aber mit anderen Farbenamen vor, daher schreibt er mir in all den gefundenen Artikelnummern die Mengen der Order.
Ich müsste somit Artikelnummer und Farbname vergleichen um die richtige Zeile zu finden. Habe auch schon versucht Zeilenweise zu vergleichen, komm aber nicht auf die richtige Lösung.
Weiters ist der Code recht langsam!
Hoffe es ist verständlich, und Ihr könnt mir helfen.
Vielen Dank im voraus.
lg Much
Sub OrderStatistik()
Dim MsgErgebnis As VbMsgBoxResult, MsgOrder As VbMsgBoxResult
Dim iRowL As Integer, iRow As Integer, LZ As Integer, iCol As Integer
Dim OrderNrA As String, OrderNrV As String, rngVrgl As String, rngVrgl2 As String
Dim rng As Range, rngCol As Range
tab_Statistik.Activate
rngVrgl = Sheets("Auftrag").Range("D12") & " " & Sheets("Auftrag").Range("D13")
rngVrgl2 = tab_Statistik.Range("A1") & " " & tab_Statistik.Range("C1").Value
If rngVrgl = rngVrgl2 = True Then
    OrderNrA = Sheets("Auftrag").Range("D8")
    
    With tab_Statistik
    OrderNrV = Application.WorksheetFunction.CountIf(Range("M:M"), OrderNrA) > 0
    End With
 If OrderNrV = False Then
 MsgOrder = MsgBox("Möchten Sie die Order " & OrderNrA & " in die Statistik übernehmen?", vbYesNo + vbQuestion + vbDefaultButton2, _
 "Order verarbeiten?")
 Select Case MsgOrder
 Case vbYes:
     With tab_Statistik
        LZ = .Cells(Rows.Count, 1).End(xlUp).Row
        iRowL = .Cells(Rows.Count, 13).End(xlUp).Row + 1
        Cells(iRowL, 13).Value = OrderNrA
     End With
        With tab_auftrag
        
         For iRow = 3 To LZ
         Set rng = .Cells.Find(Cells(iRow, 1), lookat:=xlWhole, LookIn:=xlValues)
         Set rngCol = .Cells.Find(Cells(iRow, 5), lookat:=xlWhole, LookIn:=xlValues)
            If Not rng Is Nothing Then
               Cells(iRow, 6) = .Cells(rng.Row, 9) + .Cells(iRow, 6).Value
               Cells(iRow, 7) = .Cells(rng.Row, 10) + Cells(iRow, 7).Value
               Cells(iRow, 8) = .Cells(rng.Row, 11) + Cells(iRow, 8).Value
               Cells(iRow, 9) = .Cells(rng.Row, 12) + Cells(iRow, 9).Value
               Cells(iRow, 10) = .Cells(rng.Row, 13) + Cells(iRow, 10).Value
            End If
         Next iRow
        End With
Case vbNo: Exit Sub
End Select
 Else
    MsgErgebnis = MsgBox("Order " & OrderNrA & " wurde schon eingefügt!" & vbCrLf & vbCrLf & "Möchte Sie die Order zurücknehmen?", _
    vbYesNo + vbQuestion + vbDefaultButton2, "Hinweis")
 Select Case MsgErgebnis
 Case vbYes:
    With tab_Statistik
        LZ = .Cells(Rows.Count, 1).End(xlUp).Row
        iRowL = .Cells(Rows.Count, 13).End(xlUp).Row
        OrderNrV = Cells(iRowL, 13).ClearContents
     End With
        With tab_auftrag
         For iRow = 3 To LZ
         Set rng = .Cells.Find(Cells(iRow, 1), lookat:=xlWhole, LookIn:=xlValues)
            If Not rng Is Nothing Then
                Cells(iRow, 6) = Cells(iRow, 6) - .Cells(rng.Row, 9)
                Cells(iRow, 7) = Cells(iRow, 7) - .Cells(rng.Row, 10)
                Cells(iRow, 8) = Cells(iRow, 8) - .Cells(rng.Row, 11)
                Cells(iRow, 9) = Cells(iRow, 9) - .Cells(rng.Row, 12)
                Cells(iRow, 10) = Cells(iRow, 10) - .Cells(rng.Row, 13)
            End If
         Next iRow
        End With
  Case vbNo: Exit Sub
  End Select
 End If
Else
MsgBox "kein gültiges Statistikformular zu dieser Saison vorhanden!", vbOKOnly + vbInformation, "...ungültiges Formular!"
Exit Sub
End If
tab_auftrag.Activate
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellwerte in externer Tabelle finden
22.01.2023 12:07:37
ralf_b
ok, du hast das selbst programmiert.
Nun fragst du nach einer Lösung wie man eine Zeile findet mit Hilfe zweier Suchkriterien? Dazu gibts zig Lösungen, die du mit ein paar Klicks finden könntest.
Natürlich müsstest du dich dann vielleicht von deinem Range.find() verabschieden. Warum wendest du Range.find auf alle Zellen des Blattes an? Suche nur in der Spalte, wo der Wert vorkommt. Grenze den Suchbereich nur auf den benutzten Bereich ein.
Du setzt ganz oben Statistik als aktives Blatt. Lass die Statistik With Klammern weg, oder setze sie konsequent um. Hier und da fehlen die Blattreferenzen oder Punkte.
Ein paar Kommentare hier und da wären auch recht nett.
sonst läuft der Code gut?
Cells(iRow, 6) = .Cells(rng.Row, 9) + Cells(iRow, 6).Value ' der Punkt vor dem letzten Cells ?
Cells(iRow, 7) = .Cells(rng.Row, 10) + .Cells(iRow, 7).Value
wofür ist das gut ?
LZ = .Cells(Rows.Count, 1).End(xlUp).Row
iRowL = .Cells(Rows.Count, 13).End(xlUp).Row + 1
Cells(iRowL, 13).Value = OrderNrA
sind etwa in Spalte 1 und 13 unterschiedlich viele Einträge?
Du setzt ganz oben Statistik als aktives Blatt. Lass die Statistik With Klammern weg, oder setze sie konsequent um. Hier und da fehlen die Blattreferenzen oder Punkte.
z.b. gibts hier einen Grund für die With Klammer?
With tab_Statistik
      OrderNrV = Application.WorksheetFunction.CountIf(Range("M:M"), OrderNrA) > 0
End With

Anzeige
AW: Zellwerte in externer Tabelle finden
22.01.2023 23:18:11
much
Hallo ralf_b!
Erstmal Danke für deine rasche Antwort. Jetzt muss ich mich mal erklären.
Also,... hatte mal einen VBA-Basic Kurs, leider auch schon einige Zeit vorbei und zuwenig Möglichkeit es zu vertiefen.
Jetzt hab ich einfach ein Project und bin wieder auf den Geschmack gekommen.
B
Ich beginne meine Codes immer mit dem Versuch mein Grundwissen einzusetzen, dann muss halt Google mit den diversen Foren mir wieder auf die Sprünge helfen.
Merke aber das es nicht so leicht ist das richtige zu finden, da ist Google mit den Begrifflichkeiten etwas eigen.
Das in meinen Code manche Versuche stecken, daher kommt es auch zu Wrackteilen. Die entweder auskommentiert, oder gerade nicht mehr störend sind.
Zum Codeteil
With tab_Statistik ist zu sagen.
In der Spalte "M" stehen die einzelnen Ordernummern, hier wird geprüft ob diese Order schon übertragen wurde!
Dann geht es je nachdem mit der Select Case weiter. Das funktioniert alles soweit.
Werde mir deinen Input zu Herzen nehmen, und versuchen mich neu zu orientieren.
Leider habe ich das schon die längste Zeit versucht, und daher mein Anliegen hier gepostet.
Schauen wir mal was mir zu deinem Post noch einfällt. Melde mich wenn es gelingt.
Im Moment bin ich gerade nicht sehr euphorisch.
Bis bald
lg Much
Anzeige
AW: Zellwerte in externer Tabelle finden
23.01.2023 07:56:21
much
Hallo ralf_b,
Habe gestern zu rasch und unzureichend auf Deine Fragen geantwortet, sorry dafür!
Zu "tab_Statistik.Activate" ' Ich rufe die Prozedur über einen Button im tab_auftrag auf, wenn nicht tab_Statistik das aktive Tabellenblatt ist, schreibt er einen Teil der Daten nach tab_auftrag. '(hier ist Dein Ansatz "konsequent umsetzten" und "Blattreferenzen" wahrscheinlich gemeint)
Die Range.find ist mein Problem, da ich in 2 Spalten suchen müsste! Hab schon viel probiert, auch das Zeilenweise vergleichen, scheitere wahrscheinlich eher an meiner Ungeduld.
sonst läuft der Code gut? 'Ja bis auf mein besagtes Problem, er findet die Zeile nicht eindeutig mit Artikelnummer + Farbcode.
Cells(iRow, 6) = .Cells(rng.Row, 9) + Cells(iRow, 6).Value der Punkt vor dem letzten Cells ? ' war ein Relikt aus diversen Versuchen, Danke, habe ich geändert!
zu
With tab_auftrag
LZ = .Cells(Rows.Count, 1).End(xlUp).Row ' Soll die letzte geschrieben Zeile im tab_auftrag suchen (wurde auf Spalte 2 geändert)
iRowL = .Cells(Rows.Count, 13).End(xlUp).Row + 1 ' Das wäre die Spalte "M" wo die Ordernummern abgelegt werden
Cells(iRowL, 13).Value = OrderNrA
sind etwa in Spalte 1 und 13 unterschiedlich viele Einträge? ' Ja Spalte 1 wurde auf Spalte 2 geändert (Artikelnummer), Spalte 13 besagte Ordernummern
So hoffe ich konnte Dir alles soweit beantworten, und nochmals sorry für das schnell antworten.
Danke für Deine Nachsicht,
lg much
Anzeige
AW: Zellwerte in externer Tabelle finden
23.01.2023 17:41:29
ralf_b
entspann dich mal..
unser neuer Freund chatgpt hat mir diesen Code für dich zusammenprogrammiert.
es zeigt eine Variante ohne range.find()
Bereiche und Spaltennr sind nur beispiehaft.
  searchWord1 = searchWordsRange.Cells(1, 1).Value
    searchWord2 = searchWordsRange.Cells(1, 2).Value
    
    'Perform the search
    For Each r In searchRange.Rows
        If r.Cells(1).Value = searchWord1 And r.Cells(13).Value = searchWord2 Then
            'Add any actions to perform on the found range here
            'In this case, the entire row where both search words are found
            Set ResultRange = r
        End If
    Next r
    

Anzeige
AW: Zellwerte in externer Tabelle finden
23.01.2023 18:50:37
much
Hallo ralf_b!
Da muss ich jetzt schmunzeln chatgpt ;-) , setzt mir bitte keinen Floh in die Ohren, hab Angst davor!
Werde mich aber dennoch drüber her machen, woher auch immer die Unterstützung kommt.
Gebe Dir Bescheid wenn ich was daraus machen konnte, schaut nach Arbeit aus!
Danke für deinen Input,
lg much
(zumindest zunächst) nicht mehr offen, oder?
24.01.2023 08:56:04
Pierre
AW: Zellwerte in externer Tabelle finden
05.02.2023 17:43:55
much
Hallo ralf_b.
Habe mich mit deinem chatgpt-Tipp mal beschäftigt, hatte nicht unrecht unser neuer Freund ;-))
Hier mal mein Code daraus,
Werde Dir/Euch noch die Mappe hochladen.
Bin schon sehr gefordert gewesen, denke das hier noch Verbesserungspotenzial drinnen steckt.
Vielleicht gebt ihr mir noch den einen oder anderen Tipp.
Erklärung zur Arbeitsmappe!
Es geht um die Tabellen "Auftrag" und "Koll_Ver_Stat"
Der Code wird über den Button "Formular senden & speichern" ausgelöst.
Bei 2maligem auslösen, kann man den Auftrag(Order) wieder rückgängig machen.
Bedanke mich jetzt schon im vorhinein.
lg much
https://www.herber.de/bbs/user/157655.xlsm
Sub OrderStatistik() ' basic from chatgpt über ralf_b
'-----------------------------------------------------------------------------------------------------------------------------------------------------------
'**************************************************** Makro für die Verkaufsstatistik ********************************************
'-----------------------------------------------------------------------------------------------------------------------------------------------------------
Dim MsgErgebnis As VbMsgBoxResult, MsgOrder As VbMsgBoxResult
Dim OrderNrA As String, OrderNrV As String, FirmaA As String, FirmaV As String, tabVrgl As String, tabVrgl2 As String
Dim searchWord1 As String, searchWord2 As String, searchErg As String
Dim iRowL As Integer, iRow As Integer, LZa As Integer, LZ As Integer, LZs As Integer
Dim searchRange As Range, rng As Range
tab_Statistik.Activate
'----------------------------------------------------------------------------------------------------------------
'***************** prüfen ob Artikeltabellen gleich, und Order-Nr schon vorhanden ist ***************************
'----------------------------------------------------------------------------------------------------------------
tabVrgl = tab_Auftrag.Range("D12") & " " & tab_Auftrag.Range("D13")
tabVrgl2 = tab_Statistik.Range("B1") & " " & tab_Statistik.Range("D1").Value
If tabVrgl = tabVrgl2 = True Then
    OrderNrA = tab_Auftrag.Range("D8")
    FirmaA = tab_Auftrag.Range("B3")
    
    With tab_Statistik
     OrderNrV = Application.WorksheetFunction.CountIf(Range("R:R"), OrderNrA) > 0
     FirmaV = Application.WorksheetFunction.CountIf(Range("S:S"), FirmaA) > 0
    End With
'----------------------------------------------------------------------------------------------------------------
'************************* Wenn Order-Nr fehlt dann Case vbYes und Order hinzufügen *****************************
'----------------------------------------------------------------------------------------------------------------
 If OrderNrV = False Then
 MsgOrder = MsgBox("Möchten Sie die Order " & OrderNrA & " in die Statistik übernehmen?", _
 vbYesNo + vbQuestion + vbDefaultButton2, "Order verarbeiten?")
 
 Select Case MsgOrder
 Case vbYes:
 
      With tab_Statistik 'Order-Nr hinzufügen
        LZ = .Cells(Rows.count, 2).End(xlUp).Row
        iRowL = .Cells(Rows.count, 18).End(xlUp).Row + 1
        Cells(iRowL, 18).Value = OrderNrA
        Cells(iRowL, 19).Value = FirmaA
     End With
    With tab_Auftrag
     LZa = .Cells(Rows.count, 2).End(xlUp).Row
     For iRow = 17 To LZa
        searchWord1 = .Cells(iRow, 2).Value
        searchWord2 = .Cells(iRow, 7).Value
        searchErg = searchWord1 & " " & searchWord2
        Set rng = .Cells.Find(Cells(iRow, 2), LookAt:=xlWhole, LookIn:=xlValues)
        Set searchRange = tab_Statistik.Range("U3:U95").Rows
        
       For Each rng In searchRange
            
        If rng.Cells() = searchErg Then
            tab_Statistik.Activate
            If Not rng Is Nothing Then
               Cells(rng.Row, 9) = .Cells(iRow, 9) + Cells(rng.Row, 9)
               Cells(rng.Row, 10) = .Cells(iRow, 10) + Cells(rng.Row, 10)
               Cells(rng.Row, 11) = .Cells(iRow, 11) + Cells(rng.Row, 11)
               Cells(rng.Row, 12) = .Cells(iRow, 12) + Cells(rng.Row, 12)
               Cells(rng.Row, 13) = .Cells(iRow, 13) + Cells(rng.Row, 13)
               Cells(rng.Row, 14) = .Cells(iRow, 14) + Cells(rng.Row, 14)
               Cells(rng.Row, 15) = .Cells(iRow, 15) + Cells(rng.Row, 15)
            End If
        End If
       Next rng
     Next iRow
    End With
     
Case vbNo: Exit 
Sub 'vbNo Exit Sub
End Select
Else 'sollte Order-Nr vorhanden, dann Frage siehe MsgBox
 
    MsgErgebnis = MsgBox("Order " & OrderNrA & " wurde schon eingefügt!" & vbCrLf & vbCrLf & "Möchte Sie die Order zurücknehmen?", _
    vbYesNo + vbQuestion + vbDefaultButton2, "Hinweis")
Select Case MsgErgebnis
Case vbYes: ' Rücknahme von Order-Nr und Orderzahlen
    With tab_Statistik
        iRowL = .Cells(Rows.count, 18).End(xlUp).Row
        OrderNrV = Cells(iRowL, 18).ClearContents
        FirmaV = Cells(iRowL, 19).ClearContents
    End With
    
With tab_Auftrag
    
     LZa = .Cells(Rows.count, 2).End(xlUp).Row
    
     For iRow = 17 To LZa
        searchWord1 = .Cells(iRow, 2).Value
        searchWord2 = .Cells(iRow, 7).Value
        searchErg = searchWord1 & " " & searchWord2
        
        Set searchRange = tab_Statistik.Range("U3:U95").Rows
        
       For Each rng In searchRange
            
        If rng.Cells() = searchErg Then
          tab_Statistik.Activate
          LZs = tab_Statistik.Cells(Rows.count, 2).End(xlUp).Row
          
         If Not rng Is Nothing Then
         
          If rng.Cells.Value = searchErg = True Then
          
           MsgBox "Artikel " & rng.Cells & " in tab_Statistik Zeile " & rng.Row & vbCrLf & "ist gleich mit" & vbCrLf & "Artikel " & _
           searchErg & " in tab_Auftrag Zeile " & iRow & "!", vbInformation + vbOKOnly, "Ergebnis"
           
                Cells(rng.Row, 9) = Cells(rng.Row, 9) - .Cells(iRow, 9)
                Cells(rng.Row, 10) = Cells(rng.Row, 10) - .Cells(iRow, 10)
                Cells(rng.Row, 11) = Cells(rng.Row, 11) - .Cells(iRow, 11)
                Cells(rng.Row, 12) = Cells(rng.Row, 12) - .Cells(iRow, 12)
                Cells(rng.Row, 13) = Cells(rng.Row, 13) - .Cells(iRow, 13)
                Cells(rng.Row, 14) = Cells(rng.Row, 14) - .Cells(iRow, 14)
                Cells(rng.Row, 15) = Cells(rng.Row, 15) - .Cells(iRow, 15)
          End If
         End If
        End If
       Next rng
     Next iRow
End With
Case vbNo: Exit Sub
  
End Select
End If
Else ' falls die Artikeltabellen nicht gleich sind
MsgBox "kein gültiges Statistikformular zu dieser Saison vorhanden!", vbOKOnly + vbInformation, "...ungültiges Formular!"
Exit Sub
End If
tab_Auftrag.Activate
End Sub

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige