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

Suchen und "*" dranhängen

Suchen und "*" dranhängen
30.07.2014 07:15:25
Chris
Hallo VBAler,
ich möchte per VBA folgendes lösen.
Zwei Worksheets.:
Wenn in WKSI(Tabelle1) in irgendeiner Zelle in Spalte D "((AKTIV))" steht, soll Excel den entsprechenden Eintrag der Zelle, welche in Spalte A steht (Offset,-3), in WKS2 (Tabelle2), Spalte A, suchen und dort am Ende des Eintrages ein "*" dranhängen.
Bei beiden Worksheets ist der Range variabel und soll jeweils von unten durchsucht werden .end(xlup)...
Zum besseren Verständnis haben ich eine Beispielmappe hochgeladen.
https://www.herber.de/bbs/user/91774.xlsm
Danke,
Chris

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 07:32:58
Robert
Hallo Chris
In die Arbeitsmappe:

Option Explicit
Dim i, o As Integer
Private Sub Test()
For i = Tabelle1.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Tabelle1.Cells(i, 4) = "((AKTIV))" Then
For o = Tabelle2.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
If Tabelle2.Cells(o, 1) = Tabelle1.Cells(i, 1) Then
Tabelle2.Cells(o, 1) = Tabelle2.Cells(o, 1) & "*"
End If
Next o
End If
Next i
End Sub

AW: Suchen und "*" dranhängen
30.07.2014 08:36:27
Chris
Danke Robert - läuft bestens. Ich versuche das makro nachzuvollziehen.
Gruß
Chris

Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 08:44:25
Robert
Hallo Chris,
Dann will ich mal nicht so sein ;)
Die erste For-Next Schleife läuft von der letzten benutzen Zeile in Tabelle1 zurück zu Zeile 1
For i = Tabelle1.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1

Wenn nun in Zeile i, Spalte D(4) dein "((AKTIV))" steht
If Tabelle1.Cells(i, 4) = "((AKTIV))" Then

Dann sucht er in jeder verwendeten Zeile in Tabelle2, von unten nach oben (2. Schleife)
For o = Tabelle2.UsedRange.SpecialCells(xlCellTypeLastCell).Row To 1 Step -1

Wenn er in Spalte A, Tabelle2 den gleichen Wert findet wie in Spalte A, Tabelle1
If Tabelle2.Cells(o, 1) = Tabelle1.Cells(i, 1) Then

Dann hängt er an den Wert in Tabelle2, Spalte A dein * dran
Tabelle2.Cells(o, 1) = Tabelle2.Cells(o, 1) & "*"

Hoffe das hilft :)
Viele Grüße
Robert

Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 07:42:06
Beverly
Hi Chris,
das geht m.E. nur, wenn die Anzahl und die Reihenfolge der Inhalte in Spalte A in beiden Tabellen identisch ist:
Sub Vergleichen()
Dim lngZeile As Long
Dim lngLetzte1 As Long
Dim lngLetzte2 As Long
lngLetzte1 = IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
With Worksheets("Tabelle2")
lngLetzte2 = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
For lngZeile = lngLetzte1 To 1 Step -1
If Cells(lngZeile, 4) = "((AKTIV))" Then _
.Cells(lngLetzte2, 1) = .Cells(lngLetzte2, 1) & "*"
lngLetzte2 = lngLetzte2 - 1
Next lngZeile
End With
End Sub


Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 08:30:52
Chris
Hallo Karin,
danke läuft. Die Reihenfolge und Anzahl sind identisch. Wenn dies nicht so wäre, wieso ginge das dann nicht.

AW: Suchen und "*" dranhängen
30.07.2014 08:35:34
Robert
Hallo Chris,
Weil Karins Code nur eine Schleife macht, um die "((Aktiv))" zu finden und dann davon ausgeht, dass in Tabelle2 der Datensatz in derselben Zeile steht.
Soll es davon unabhängig funktionieren, muss man eine zweite Schleife einbauen, die den richtigen Datensatz in Tabelle 2 sucht.
Siehe mein Beitrag weiter oben, da sind 2 Schleifen drin und es funktioniert auch wenn Tabelle2 eine andere Reihenfolge hat.
Viele Grüße
Robert

Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 07:45:08
Hajo_Zi
Hallo Chris,
Option Explicit
Public Sub Find_Methode()
Dim WsSheet1 As Worksheet
Dim WsSheet2 As Worksheet
Dim Rafound As Range
Dim StAdresse As String
Dim sSuchbegriff  As String
Dim LoI As Long
Dim LoLetzte As Long
Set WsSheet1 = ThisWorkbook.Worksheets("Tabelle1")
Set WsSheet2 = ThisWorkbook.Worksheets("Tabelle2")
LoLetzte = IIf(IsEmpty(WsSheet1.Cells(Rows.Count, 1)), WsSheet1.Cells(Rows.Count, 1).End( _
xlUp).Row, Rows.Count)
Application.ScreenUpdating = False
Application.EnableEvents = False
For LoI = 1 To LoLetzte
If WsSheet1.Cells(LoI, 4) = "((AKTIV))" Then
'Set WkSh_1 = ThisWorkbook.Worksheets("Sicherung_Telefonliste")
With WsSheet2.Columns(1)
Set Rafound = .Find(What:=WsSheet1.Cells(LoI, 1), LookAt:=xlWhole, LookIn:= _
xlValues)
If Not Rafound Is Nothing Then
StAdresse = Rafound.Address
Do
Rafound = Rafound & "*"
Set Rafound = .FindNext(Rafound)
If Rafound Is Nothing Then
Exit Do
End If
Loop While Rafound.Address  StAdresse
End If
End With
End If
Next LoI
Application.EnableEvents = True
Application.CutCopyMode = False         'Zwischenspeicher löschen
Application.ScreenUpdating = True
Set WsSheet1 = Nothing
Set WsSheet2 = Nothing
Set Rafound = Nothing
End Sub

Anzeige
AW: Suchen und "*" dranhängen
30.07.2014 08:33:47
Chris
Hallo Hajo,
danke für das Makro - läuft. Viel Makro für ein simples Verfahren :-)
Mal eine Verständnisfrage: Schreibst du sowas mal eben während des Frühstücks nebenbei oder ist das hier COPY-Paste von einer anderen Sache.....
Nochmals Danke,
Chris

AW: Suchen und "*" dranhängen
30.07.2014 08:36:59
Hajo_Zi
Hallo Chris,
ich bin nun schon zig Jahre im Forum. Da wird oft vorhandenes angepasst.
Gruß Hajo

noch ein Vorschlag
30.07.2014 08:34:18
Erich
Hi Chris,
probier mal

Option Explicit
Sub Sternchen()
Dim arQ, arZ, zz As Long
With Worksheets("Tabelle1")
arQ = .Cells(1, 4).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)
End With
With Worksheets("Tabelle2")
arZ = .Cells(1, 1).Resize(UBound(arQ))
For zz = 1 To UBound(arQ)
If arQ(zz, 1) = "((AKTIV))" Then
arZ(zz, 1) = arZ(zz, 1) & "*"
Else
arZ(zz, 1) = CStr(arZ(zz, 1))
End If
Next zz
.Columns(1).NumberFormat = "@"
.Cells(1, 1).Resize(UBound(arQ)) = arZ
End With
End Sub
In Tabelle2!A:A werden hier einheitlich Texte geschrieben - es entsteht kein Mischmasch aus Zahlen und Texten.
"und soll jeweils von unten durchsucht werden": Warum? Spielt das hier eine Rolle?
In Tabelle1!D1 der BeiSpielMappe könnte eine Klammer fehlen... :-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: noch ein Vorschlag
30.07.2014 10:59:06
Chris
Hallo Erich,
ja, es spielte eine Rolle, da in Spalte A ziemlich viele Zahlen untereinander stehen und Excel prüft, ob eine bestimmte Zahl schon mal vorgekommen ist, um dies zu umgehen, setze ich einfach ein * hinter jede Zahl, somit findet der SVerweis keine Übereinstimmung. Klappt auch wunderbar.
Nun habe ich hier gleich mehrere Makros bekommen, die alle irgendwie das gleiche machen. Am besten verstehen, tue ich allerdings nur das von Robert, der sich die Mühe gemacht hat, mir jede Zeile zu erklären.
Kannst du mir dein Makro auch erklären ? Zeile für Zeile ...Ubound?Cstr?
übrigens: Die F1-Hilfe von VBA hilft mir persönlich zu 98% so überhaupt nicht, weiss nicht, wie es anderen geht.
Gruß und Danke,
Chris

Anzeige
unklar
31.07.2014 12:25:11
Erich
Hi Chris,
deine Antwort verstehe ich nicht wirklich. Vielleicht hast du hier auch einfach nur zu wenige Infos preisgegeben.
"Excel prüft, ob eine bestimmte Zahl schon mal vorgekommen ist": Wo? Wie? Excel? Oder du mittels Formel?
"findet der SVerweis keine Übereinstimmung": Was für ein SVERWEIS? Kam hier noch nicht vor...
Wie auch immer: Es bleibt egal, in welcher Reihenfolge die Sterne gerechnet werden.
Zum Code:
arQ ist ein Array, das die Quelldaten aus Tabelle1!D:D aufnimmt.
arZ ist ein Array für die Daten aus Tabelle2!A:A (vor und nach der Änderung).
zz ist eine laufende Nummer, wie eine Zeilennummer.
UBound(arQ) ist die Anzahl der Zeilen des Arrays arQ. Mit
arZ = .Cells(1, 1).Resize(UBound(arQ))
wird erreicht, dass arZ dieselbe Anzahl Zeilen wie arQ hat.
Was an der Funktion CStr(x) kann man verstehen, was nicht? Die Funktion gibt eine Zeichenkette/einen Text/String zurück,
der aus dem Argument x (ein Ausdruck, z. B. eine Zahl) entsteht.
Bei so allgemeinen Bitten um Erklärungen tut man sich immer schwer. Wo soll man anfangen?
Ein Beispiel aus diesem Zusammnhang: Ist klar, was ein Array ist?
Besser wäre es, du würdest konkrete Fragen stellen, aus denen auch gleich hervorgeht, was klar ist. :-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Korrektur
30.07.2014 08:46:43
Erich
Hi Chris,
sorry, da war noch ein kleiner Fehler drin:
Statt
arQ = .Cells(1, 4).Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 1)
soll da stehen:
arQ = .Cells(1, 4).Resize(.Cells(.Rows.Count, 4).End(xlUp).Row, 1)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige