Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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

VBA - Excel Makro das Vergleicht und einen Wert ko

VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 13:00:27
fedx
Hallo,
ich bin hier neu und auch ein VBA neuling. Ich habe das Problem das ich in einem Tabellen Blatt Sachen suchen und kopieren möchte.
Ich hab schon ein Makro gefunden das funktioniert. Das Problem ist jetzt das dieses Makro für denke ich kurze Zeichenfolgen geschrieben wurde. Das Problem für mich ist nun das ich das Makro dahingehend ändern möchte das es Felder mit Text und Sonderzeichen kopiert. Bis jetzt kommt immer Laufzeitfehler 13 Typen unverträglich.
Anbei das Makro:
Option Explicit
'
' Die Reihenfolge der Spalte C ist vorgegeben.
' Das Makro soll jetzt Spalte C von oben nach unten mit Spalte A
' vergleichen und sobald der Bezeichner gleich ist, soll der
' entsprechende Messwert von B nach D kopiert werden.
' Falls in Spalte C ein Bezeichner in Spalte A nicht gefunden wird,
' soll das Feld in der Zeile in Spalte E markiert werden.
' In Spalte C können auch leere Felder bestehen, diese sollen dann
' vom Makro einfach übersprungen werden.
'

Public Sub Zuordnen()
Dim WkSh As Worksheet ' das zu bearbeitende Tabellenblatt
Dim lZeile As Long ' For/Next Schleifen-Index - hier die fortlaufende Zeile
Dim rZelle As Range ' die Zelle mit dem gefundenen Suchbegriff
Set WkSh = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
With WkSh.Columns(1) ' in dieser Spalte 1 = A suchen
' alle Zeilen ab Zeile 1 bis zum Ende, gemäß Spalte 3 = C abarbeiten
For lZeile = 1 To WkSh.Cells(WkSh.Rows.Count, 3).End(xlUp).Row
If Trim$(WkSh.Range("C" & lZeile).Value)  "" Then ' ist Spate C nicht leer?
' den Inhalt aus Spalte C in Spalte A suchen
Set rZelle = .Find(What:=WkSh.Range("C" & lZeile).Value, LookAt:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Then ' der Wert wurde gefunden!
' den Inhalt aus Spalte B nach Spalte D kopieren
WkSh.Range("D" & lZeile).Value = WkSh.Range("B" & rZelle.Row).Value
' evtl. Markierungen in Spalte E zurücknehmen
WkSh.Range("E" & lZeile).Interior.ColorIndex = xlNone
Else ' der Inhalt aus Spalte C wurde in Spalte A NICHT gefunden
' die Spalte E rot markieren
WkSh.Range("E" & lZeile).Interior.ColorIndex = 3
End If
Else ' Spalte C ist leer
' evtl. Markierungen in Spalte E zurücknehmen
WkSh.Range("E" & lZeile).Interior.ColorIndex = xlNone
End If
Next lZeile
End With
End Sub
Was muss ich ändern das es funktioniert wie ich möchte ?
Wäre für jede hilfe sehr dankbar!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 13:15:11
Klaus
Hallo Fedx, (wir benutzen hier gerne Klarnamen / Vornamen)
Dein Makro sieht funktional aus.
Das Problem ist jetzt das dieses Makro für denke ich kurze Zeichenfolgen geschrieben wurde.
Ich sehe in dem Makro nichts, dass auf eine Beschränkung der Zeichenfolge-Länge hindeutet.
Das Problem für mich ist nun das ich das Makro dahingehend ändern möchte das es Felder mit Text und Sonderzeichen kopiert
Das sollte es eigentlich machen.
Bis jetzt kommt immer Laufzeitfehler 13 Typen unverträglich.
Dieser Fehler lässt eher auf einen Fehler in der Tabelle schließen. Hast du im Bereich vielleicht #NV oder #DIV/0 stehen? Vielleicht als beabsichtigte Formelergebnisse?
Bitte lade mal eine Tabelle hoch, in der ein paar Beispiele sind die NICHT funktionieren.
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 13:21:44
fedx
Hallo !
Vielen Dank für die schnelle Antwort!
Konkret sind die Zeichen in dem Feld:
Die Nutzung der Software ist nur im Rahmen des zugehörigen Lizenzvertrages gestattet. Dementsprechend ist eine Nutzung der Software ohne einen gültigen Lizenzvertrag mit # nicht gestattet. Etwaige Verstöße werden von # sowohl zivil- als auch strafrechtlich verfolgt.
Wenn ich nur "test" in das Feld schreibe funktioniert alles ohne Probleme.
Hast du eine Idee woran das liegen kann?
Grüße und danke im Vorraus

AW: VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 13:51:45
fedx
Hallo,
ich habe per try and error herausgefunden, dass es an den # in dem Textfeld liegt. Wie kann ich das Makro ändern das ich auch diese mit dem Makro kopieren kann ?
Wäre für jede Hilfe dankbar!
Grüße

Anzeige
AW: VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 14:30:27
Klaus
Hallo,
ich habe per try and error herausgefunden, dass es an den # in dem Textfeld liegt.
Das kann ich nicht bestätigen!
Ich habe eine Musterdatei gebaut, in der ich auch Strings wie "Katze#" zuordnen konnte.
Allerdings habe ich seitdem per Try-And-Error herausgefunden, dass es nur bis zu Textlängen bis 255 Zeichen funktioniert!
Ist dir geholfen, wenn das Makro die ersten 255 Zeichen der Strings vergleicht?
Grüße,
Klaus M.vdT.

Limit 255 Zeichen
05.03.2013 14:37:17
Klaus
Hallo,
ich habe jetzt an mehreren Stellen gelesen, dass diverse Formeln höchstens 255 Zeichen mögen. Du wirst nicht umhin kommen, deinen Zelleninhalt entsprechend zu kürzen.
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA - Excel Makro das Vergleicht und einen Wert ko
05.03.2013 14:59:32
fcs
Hallo fedx,
die Zeichenlänge des Suchbegriffs ist für die Find-Methode auf 256 Zeichen begrenzt. Außerdem können Wildcard-Zeichen wie ? oder * in den Suchbegriffen zu falschen Ergebnissen führen.
Hier bleibt dann nichts anderes übrig, als in einer For-Next-Schleife die Begriffe zu vergleichen. Zur Beschleunigug des Makros sollten dann die Suchbegriffe und die zu vergleichenden Werte in Variablen gespeichert werden.
Gruß
Franz
Public Sub Zuordnen()
Dim WkSh As Worksheet ' das zu bearbeitende Tabellenblatt
Dim lZeile As Long ' For/Next Schleifen-Index - hier die fortlaufende Zeile
Dim lSuchen As Long ' die Zeile mit dem gefundenen Suchbegriff
Dim varSuchen, arrSuchen As Variant, bolGefunden As Boolean
Set WkSh = ThisWorkbook.Worksheets("Tabelle1") ' den Tabellenblattnamen ggf. anpassen!
With WkSh
arrSuchen = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
' alle Zeilen ab Zeile 1 bis zum Ende, gemäß Spalte 3 = C abarbeiten
For lZeile = 1 To WkSh.Cells(WkSh.Rows.Count, 3).End(xlUp).Row
bolGefunden = False
If Trim$(WkSh.Range("C" & lZeile).Value)  "" Then ' ist Spalte C nicht leer?
varSuchen = .Range("C" & lZeile).Value 'Suchtext
If IsArray(arrSuchen) Then
' den Inhalt aus Spalte C in Spalte A suchen
For lSuchen = 1 To UBound(arrSuchen)
'            If LCase(arrSuchen(lSuchen, 1)) = LCase(varSuchen) Then 'Groß-/Kleinschreibung  _
nicht beachten
If arrSuchen(lSuchen, 1) = varSuchen Then 'Groß-/Kleinschreibung beachten
bolGefunden = True
' den Inhalt aus Spalte B nach Spalte D kopieren
WkSh.Range("D" & lZeile).Value = WkSh.Range("B" & lSuchen).Value
' evtl. Markierungen in Spalte E zurücknehmen
WkSh.Range("E" & lZeile).Interior.ColorIndex = xlNone
Exit For
End If
Next
If bolGefunden = False Then ' der Inhalt aus Spalte C wurde in Spalte A NICHT  _
gefunden
' die Spalte E rot markieren
WkSh.Range("E" & lZeile).Interior.ColorIndex = 3
End If
Else
'nur in A1 steht in SPalte A ein Wert
'            If LCase(arrSuchen) = LCase(varSuchen) Then 'Groß-/Kleinschreibung nicht beachten
If arrSuchen = varSuchen Then 'Groß-/Kleinschreibung beachten
' den Inhalt aus Spalte B nach Spalte D kopieren
WkSh.Range("D" & lZeile).Value = WkSh.Range("B1").Value
' evtl. Markierungen in Spalte E zurücknehmen
WkSh.Range("E" & lZeile).Interior.ColorIndex = xlNone
Else
' die Spalte E rot markieren
WkSh.Range("E" & lZeile).Interior.ColorIndex = 3
End If
End If
Else ' Spalte C ist leer
'evtl. Markierungen in Spalte E zurücknehmen
WkSh.Range("E" & lZeile).Interior.ColorIndex = xlNone
End If
Next lZeile
End With
End Sub

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige