705 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
hoffe der Titel verwirrt nicht zuviel. Es geht darum:
Aus 2 verschiedenen Quellen werden Servernamen in eine Excel-Datei kopiert und mittels eines Makros
(https://support.microsoft.com/de-de/kb/213367)
miteinander verglichen, ob ein Server in beiden Quellen vorhanden ist.
Nun sucht Excel aber nur nach exakter Übereinstimmung und die Servernamen werden leicht unterschiedlich kopiert. Die 13 Anfangsbuchstaben sind die gleichen, bei der zweiten Quelle folgt jedoch noch eine nähere Bestimmung. Beispiel:
12h123h2h2ks3 vs.
12h123h2h2ks3.hshodjeeg
Ist es nun möglich das Makro soweit umzuschreiben, dass nur die ersten 13 Buchstaben für den Vergleiche zurate gezogen werden?

Es ist nicht möglich die Namensgebung der Quellen zu beeinflussen und aufgrund der schieren Anzahl an Servern ist auch manuelle Kürzung des Servernamens nicht möglich.

4 Antworten

0 Punkte
Beantwortet von
Hallo Meister Oek

Das geht ganz leicht.
Entweder du vergleichst Server1 = Left(Server2,13)
oder noch einfacher Server2 Like Server1 & "*" wobei der Stern für
eventuell zusätzliche Zeichen steht, die in Server 2 vorkommen können.

Wenn du zusätzlich keinen Unterschied zwischen Groß und
Kleinschreibung machen willst, kannst du ganz oben, noch vor der
ersten Sub die Zeile Option Compare Text hinzufügen oder du schreibst
alternativ LCase(Server1) = LCase(Left(Server2,13))

Gruß Mr. K.
0 Punkte
Beantwortet von
Moin,
ich scheine ein noch zu großer Amateur zu sein, ich weiß leider nicht, wie ich die eben genannten Ergänzungen in das Makro integriere.
Kann das vielleicht jemand für mich tun?

Sub Find_Matches()
Dim CompareRange As Variant, x As Variant, y As Variant
' CompareRange auf den Bereich festlegen, mit dem die
' Auswahl verglichen werden soll.
Set CompareRange = Range("C1:C5")
' HINWEIS: Verwenden Sie die folgende Syntax, wenn sich der Vergleichsbereich
' in einer anderen Arbeitsmappe oder einem anderen Arbeitsblatt befindet.
' Set CompareRange = Workbooks("Book2"). _
' Worksheets("Sheet2").Range("C1:C5")
'
' Jede Zelle in der Auswahl durchlaufen und sie mit jeder Zelle
' in CompareRange vergleichen.
For Each x In Selection
For Each y In CompareRange
If x = y Then x.Offset(0, 1) = x
Next y
Next x
End Sub

Wäre das Makro.
0 Punkte
Beantwortet von
Hallo Meister Oek,

du vergleichst hier Werte deines markierten Bereichs mit Werten aus anderer Quelle. Für diesen Fall würde der Vergleich so lauten.

For Each x In Selection
For Each y In CompareRange
If lcase(x) = lcase(left(y, 13)) Then x.Offset(0, 1) = x
Next y
Next x

Wenn du in der dritten Zeile ganz hinten nicht =x sondern =y schreibst, kannst du dir die vollständigen Werte aus deinem Vergleichsbereich ziehen.

Gruß Mr. K.
0 Punkte
Beantwortet von
Oder

For Each x In Selection
For Each y In CompareRange
If lcase(x) like lcase("*" & y & "*") Then x.Offset(0, 1) = x
Next y
Next x
...