Hallo Experten,
heute habe ich eine Frage zum einem VBA Makro.
Ich habe eine Tabelle mit 2 Spalten und x Zeilen
und einer Spalte D1.
In A1 bis Ax stehen Namen
In B1 bis Bx stehen dazugehörende Uhrzeiten.
In D1 steht ein einzelner Name.
Nun muß das Makro die Zellen in Spalte A1 bis Ax durchsuchen
und mit dem Namen in D1 vergleichen.
Wenn es diesen Namen nicht gibt, dann soll er ans Ende der Tabelle (Ax)(1. leere Zelle)
kopiert werden.
Wenn es diesen Namen schon gibt, dann darf er nicht ans Ende der Tabelle (Ax)
kopiert werden.
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.
Wäre super wenn jemand mir helfen könnte.
Vielen Dank im Voraus.
Roland
alles klar, machen wa:
du müsstes folgendes makro progammieren:
sub main () '„main“ oder sonst ein makroname
do
x=x+1
loop until range („A“ & x ) = Range („D1“) or Range („A“ & x)=""
'sprich, der zählt x solange hoch, bis A & Zeile x leer ist oder den best. Namen enthält. wenn in A jedoch ein leerzeichen
„_“ steht, dann ist es nichct gleich „“, da muss man ein wenig aufpassen.
als abschluss dann noch der evtl Namen eintrag:
if range(„A“ & x)range („D1“) then
range („A“ & x)=range(„d1“) 'eintrag des namens
range („B“ & x)=time() 'Uhrzeit
end if
end sub
So, müsste so funzen, weiss nihct ob da jetzt kleine bugs drin stecken, kanns hier nicht ausprobieren, aber denke prinzip ist klar, sonst nochmal melden
So geht´s: Inhalt einer Zelle mittels VBA suchen
Hallo RST,
möglicherweise erschlägt Dich das Makro ein wenig, obwohl es wirklich sehr einfach ist (ich kenne Deine VBA-Erfahrung nicht). Aber guck´ es Dir in Ruhe an, gehe im Einzelschritt-Modus durch (F8-Taste), beobachte dabei die Inhalte der Variablen (indem Du mit der Maus über die Variablen-Namen gehst) und konsultiere ggf. die Hilfe (den Cursor in ein Schlüsselwort wie „While“ bringen und Strg-F1 drücken). Spätestens dann hast Du es intus.
Option Explicit
Option Base 1
Sub ErgaenzeNamen()
'Kristian Zarse für WerWeissWas am 05.08.02
Dim z As Integer
Dim Name\_D1 As String
Dim NameGefunden As Boolean
Dim EndeErreicht As Boolean
Name\_D1 = Range("D1").Value
NameGefunden = False
EndeErreicht = False
z = 0 'Starten in Zeile 1, da am Anfgang der Schleife 1 addiert wird
If Name\_D1 = "" Then
MsgBox "In D1 muß ein gültiger Name stehen!", vbCritical, "Fehler"
Exit Sub
End If 'Name\_D1 = ""
Do Until EndeErreicht
z = z + 1
'Wir gehen jede Zeile in Spalte 1 (A) durch und prüfen,
'ob der gesuchte Name drin steht. Ist dies der Fall, wird
'die Variable "NameGefunden" auf "Wahr gesetzt".
NameGefunden = NameGefunden Or (Cells(z, 1).Value = Name\_D1)
'("Cells(z, 1) steht für "Feld in (Zeile z, Spalte 1)")
'In der gleichen Schleife wird geguckt, ob überhaupt ein
'Name drin steht in der Zelle. Falls nicht, ist das Ende
'der Liste erreicht. Dies ist gleichzeitig das Abbruch-
'Kriterium für die Schleife. Sie wird also in jedem Falle
'bis zum Ende durchlaufen.
EndeErreicht = (Cells(z, 1).Value = "")
'Falls der Name in Zeile z gefunden wird, darf "NameGefunden"
'natürlich in Zeile z+1 nicht wieder mit "Falsch" überschrieben
'werden (da steht nämlich ein anderer Name). Deshalb wird oben
'"NameGefunden Or" ergänzt. Durch das "Oder" bleibt ein zuvor
'gesetztes "Wahr" bestehen, auch wenn "Cells(z, 1).Value = Name\_D1"
'"Falsch" ergibt.
Loop 'EndeErreicht
'In "z" steht nun die Zeilennummer, in der kein Name mehr steht (siehe
'Abbruch-Kriterium). Hier muß nun also der neue Name eingefügt werden,
'falls er nicht aufgetaucht ist.
If Not NameGefunden Then
Cells(z, 1).Value = Name\_D1
MsgBox "Der Name """ & Name\_D1 & """ ist in Zeile " & z & " ergänz worden!", vbExclamation, "Achtung"
Else
MsgBox "Der Name """ & Name\_D1 & """ existierte schon.", vbInformation, "Info"
End If 'NameGefunden
'Das war´s.
End Sub 'ErgaenzeNamen