Hilfe bei Makroerstellung - Wert aus Zelle suchen

hallo excel-perten

kann mir jemand bei der erstellung eines makros helfen?

folgende situation:ich habe eine excel-datei mit mehreren sheets. aus dem sheet „berechnung“ soll die markierte zelle (b6) welches ein zahlenwert(personalnummer) ist, im sheet „personal-zusatz-info“(personalnummern stehen alle in spalte a) gesucht werden und dann dort die spalte 10 (j) der gesuchten personalnummer markieren, sodass ich dort diverse daten ändern kann. (die personalnummer kommt in dem sheet „personal-zusatz-info“ nur einmal vor).

habe schon ein makro aufgenommen, was aber nicht richtigfunktioniert, es schreibt den wert aus zelle b6 fest also wenn ich die personalnummer 123 eingebe, nimmt er -immer- die 123. und es soll aber ja unterschiedlich sein und dann noch in die spalte 10 (j)rutschten.

vielen dank im voraus!

grüße rico

folgende situation:ich habe eine excel-datei mit mehreren
sheets. aus dem sheet „berechnung“ soll die markierte zelle
(b6) welches ein zahlenwert(personalnummer) ist, im sheet
„personal-zusatz-info“(personalnummern stehen alle in spalte
a) gesucht werden und dann dort die spalte 10 (j) der
gesuchten personalnummer markieren, sodass ich dort diverse
daten ändern kann. (die personalnummer kommt in dem sheet
„personal-zusatz-info“ nur einmal vor).

Hi Rico,

im Blatt „Berechnung“ unten Rechtsklick auf den Blattnamen, Code anzeigen, dorthinein den Code kopieren, Blattnamen anpassen, Editor schließen.

Option Explicit
'
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim Zei As Long
If Target.Column 2 Then Exit Sub
If Target.Cells.Count \> 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
With Worksheets("Tabelle2")
 If Application.WorksheetFunction.CountIf(.Columns(1), Target.Value) \> 0 Then
 Zei = Application.WorksheetFunction.Match(Target.Value, .Columns(1), 0)
 .Activate
 .Cells(Zei, 10).Select
 Else
 MsgBox Target.Value & " nicht gefunden."
 End If
End With
End Sub

Gruß
Reinhard

Hallo Reinhard

danke für die super schnelle Antwort

so würde es funktionieren, allerdings sollte es nur dahin hüpfen, wenn ich auf einen butten drücke, dem das makro zugeordnet ist.
heißt das in dem fall überhaupt makro? oder nennt man das anders?

kannst du mir aber zu dem bisherigen text ne kleine erklärung geben, wie das funkt? würde da gern mal bisschen rum experimentieren.

DANKE Rico

Hi Rico,

so würde es funktionieren, allerdings sollte es nur dahin
hüpfen, wenn ich auf einen butten drücke, dem das makro
zugeordnet ist.

dann lösche es wieder. Im Editor auf Einfügen—Modul, dorthinein diesen Code:

Sub Huepfen()
Dim Zei As Long
' Verlasse die Sub wenn mehr als eine zelle markieet
If Selection.Cells.Count \> 1 Then Exit Sub
' Verlasse die Sub wenn nicht in Spalte B (=2)
If Selection.Column 2 Then Exit Sub
' Verlasse die Sub wenn markierte zelle leer
If Selection.Value = "" Then Exit Sub
With Worksheets("Tabelle2")
 ' Wenn es das Zählen der Personr in Spalte A (=1) mehr als 0 ergibt dann...
 ' (also personr existiert in Spalte A)
 If Application.WorksheetFunction.CountIf(.Columns(1), Target.Value) \> 0 Then
 ' Zei = Zeile der personnr in Spalte A
 Zei = Application.WorksheetFunction.Match(Selection.Value, .Columns(1), 0)
 ' Blatt 2 aktivieren
 .Activate
 'Zelle Jx markieren
 .Cells(Zei, 10).Select
 Else
 MsgBox Selection.Value & " nicht gefunden."
 End If
End With
End Sub

heißt das in dem fall überhaupt makro? oder nennt man das
anders?

Nein, es heißt weiter Makro oder Prozedur. Excel-Vba kennt einige festgelegte Ereignis-Makros/Ereignisprozeduren.
D.h. diese makros/prozeduren haben festgelegte namen und festgelegte Orte wo sie stehen müssen. Dann werden sie vollautomatisch, also ohne Buttondrücken, aufgerufen wenn das Ereignis eintritt.

Ereignisse sind bei jedem Blatt z.B manuelle Zellenwertänderung, Zellenanklicken,Blattberechnen u.ä.
Für die Gesamtmappe gibt es z.B das Öffnen und Schließen-Ereignis usw.

In meinem Beispiel hatte ich
Private Sub Worksheet_Change(ByVal Target As Range)
benutzt, was dem Zellenwertänderung-Ereignis entspricht.
In der Variablen target steckt die Info in welcher Zelle (Zellenbereich) eine Zelle geändert wurde.
Target kann ich dann im Code auswerten.

Da das Makro losläuft sobald eine Zellwertänderung stattfand muß ich anfangs des Codes abklären ob nur eine einzige Zelle in B geändert wurde, erst dann soll der weitere Code laufen.
Hintergrund ist, wenn du durch Copy/Paste gleichzeitig mehrere zellen änderst würde der weitere Code crashen (nix Schlimmes, er bricht halt ab *gg*) denn ein Zellbereich hat keinen Zellwert, den haben nur einzelne Zellen.

Doppelklicke im Editor auf „Tabelle1“, dann wähle im mittigen Drop-Down „Worksheet“ aus, dann kannst du im rechten Dropdown alle Erignisse sehen/auswählen.
Anallog dazu doppelklick auf „DieseArbeitsmappe“, mittig „Workbook“, rechts dann analog sind die Ereignisse der mappe zu sehen.

kannst du mir aber zu dem bisherigen text ne kleine erklärung
geben, wie das funkt? würde da gern mal bisschen rum
experimentieren.

Daurch daß die Prozedur nicht den festgelegten Namen hat, ist es eine ganz normale Prozedur/Makro.
D.h. nach Drücken des Buttons wird sie gestartet. Nun steht mir target nicht mehr zur Verfügeung. Also greife ich mit Selection auf die markierte Zelle zu

Insofern ist Target und Selection das Gleiche in gewisser Weise.

Scrolle hier im Brett nach ganz unten, da steht ein Beitrag von mir zu Vba-Code, vielleicht hilft er dir weiter.

Gruß
Reinhard

Hallo Reinhard,

leider muss ich nochmal nerven

bei dem jetzigen Makro kommt leider eine Fehlermeldung:

Laufzeitfehler ‚424‘
Objekt erforderlich

und wenn ich da auf „Debuggen“ gehe, zeit es mir die Zeile

If Application.WorksheetFunction.CountIf(.Columns(1), Target.Value) > 0 Then

an.

Muss ich da noch etwas ändern?

und wenn ich da auf „Debuggen“ gehe, zeit es mir die Zeile

If Application.WorksheetFunction.CountIf(.Columns(1),
Target.Value) > 0 Then

Hi Littlemoon,

sorry, mein Fehler, ersetze target durch Selection.

Gruß
Reinhard

DANKE

Super!!!

Vielen Dank, Reinhard.

Funktioniert klasse!

Besten Dank und ein schönes Wochenende!

Gruß Rico