Anzeige
Archiv - Navigation
1108to1112
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

Spalte durchsuchen und Eintrag übernehmen ...

Spalte durchsuchen und Eintrag übernehmen ...
udo-d
Hallo Forum, bräuchte bitte eure Hilfe beim durchsuchen einer Spalte per Rechtsklick ...
https://www.herber.de/bbs/user/65177.xls
kopiert werden soll in die Target Zelle immer der nächstfolgende Eintrag ( hochwärts suchend ) pro Rechtsklick immer Übernahme von nächst abweichenden ...
Hab mal ein Beispiel hochgestellt um es zu verdeutlichen
Wär euch dankbar wenn ihr mir eine passende Anweisung hättet ,
hab selbst schon im Archiv geschaut, find da leider nichts passendes
Besten Dank für Eure Mühen im Voraus
udo
hier mal auf Spalte "I" (Sp.9) begrenzt
18.10.2009 15:41:17
Matthias
Hallo
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim R As String, X As Long
R = ActiveCell.Row
If Target.Row > 8 And Target.Column = 9 Then
For X = R To 9 Step -1
If Cells(X, 9)  "" Then
Cells(R, 8).Value = Cells(X, 8).Value
Cells(R, 9).Value = Cells(X, 9).Value
Exit For
End If
Next
Cancel = True 'Popup Fenster nach Rechtsklick - deaktiviert
End If
End Sub

Willst Du den Klick auch in Spalte 8 auswerten musst Du es entsprechend anpassen.
statt:
If Target.Row > 8 And Target.Column = 9 Then
eben so
If Target.Row > 8 And Target.Column = 8 Or Target.Column = 9 Then
Gruß Matthias
Anzeige
AW: hier mal auf Spalte "I" (Sp.9) begrenzt
18.10.2009 15:54:56
udo-d
Hallo Matthias,
lieben Dank für deine Idee, hab gerade zeitgl. auch was hochgestellt wie ich gesehen habe, hat sich überschnitten.
Hab deinen Code mal getestet , deckt sich von der Funktion her wie der Ansatz von mir eben , leider müsste man es noch ein wenig erweitern.
Dass er den letzten Eintrag oberhalb findet und in die aktive Zelle ( in Sp.9 ) einträgt funktioniert.
Die ursprüngl. Idee bzw. der uspr. Wunsch sieht vor, wenn man jetzt nach diesem Schritt eben nochmals auf die gleiche Zelle nochmals " Rechtsklick " ausübt, dann soll der bereits eingetragene Wert ( sprich der zuvor bereits gefunden wurde ) als Abgleichsbasis genutzt werden in einer wieteren Suche hochwärts nach dem nächsten abweichenden Eintrag ...
Hast du da evt. noch eine Idee ?
Lieben Dank für deine Mühe schon mal im Voraus
Gruß udo
Anzeige
vielleicht so ? ...
18.10.2009 16:20:46
Matthias
Hallo
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim R As String, X As Long
R = ActiveCell.Row
If Target.Row > 8 And Target.Column = 9 Then
For X = R To 9 Step -1
If Cells(X, 9)  "" Then
If Target.Value  Cells(X, 9).Value Then
Cells(R, 8).Value = Cells(X, 8).Value
Cells(R, 9).Value = Cells(X, 9).Value
Exit For
End If
End If
Next
Cancel = True 'Popup Fenster nach Rechtsklick - deaktiviert
End If
End Sub
Gruß Matthias
beinahe ... sind der Lösung schon sehr nahe ...
18.10.2009 16:40:46
udo-d
allerdings funktioniert es nur auf 2x Rechtsklicke .
Ziel wäre dass er eben ( " beliebig " oft rechts Klicken zu können ) unabhängig der Anzahlen der verschiedenen Einträge in der Spalte in der er sucht.
Im Beispiel funktioniert es bislang nur bei 2 Einträgen
er wechselt den zuerst gefundenen Eintrag 5 ... dann beim 2. RK zwar auf 2 ... wenn man dann aber weiter RK ausübt , müsste dann der nächste abweichende Eintrag gefunden werden , im Beispiel wäre das dann 1 ....
Evt. hab ich das auch zu kompliziert beschrieben, musst entschuldigen, keine Absicht.
Also prima wäre wenn man das später auch mal in Spalten anwenden kann, die min mal 20 versch. Einträge haben, eher sogar mehr ...
Ich hab keine Ahnung ob man das dann per Schleife anweisen muss, oder an entscheidender Stelle den Code eben anweist, nach dem Eintrag in der Target Zelle oberhalb zu suchen, und von dort ab hochwärts dann den nächsten Eintrag eintragen / kopieren soll .
Danke dir für deine Mühe Matthias
udo
Anzeige
AW: beinahe ... sind der Lösung schon sehr nahe ...
18.10.2009 17:10:33
Matthias
Hallo
Als Erstes:
Dein Beitrag in der 2.Baumstruktur mit Deiner 2. hochgeladenen Datei.


Zitat:
If Cells(X, 9) "" Then
hab ich mal
If Cells(X, 9) Cells(R, 9) Then eingesetzt, jetzt würde es schon fast gehen …


Du widersprichst Dir selbst! Du hattest in der Ausgangsfrage geschrieben:
Zitat:
in der rechten Spalte ( I9:I ... ) soll per Rechtsklick ( in entspr, Ereignis mit Before Right Klick etc. )
eine Anweisung - die angewählte Zelle in Spalte I (9) soll dann automatisch mit dem nächstfolgenden Eintrag
( leere Zellen ignorierend ) dann den drüber folgenden Eintrag hineinkopieren.
Habe dafür folgenden Code in Verwendung....
Zitat Ende


Wenn Du den Code dahingehend änderst und nicht abfragst, ob der Zellinhalt leer ist, dann wird eine bereits gefüllte Zelle allerding auch wieder geleert(was Du eigentlich verhindern wollstest), sofern eine Zelle oberhalb derer steht, welche im Target ist.
Du könntest also die Variable X als Public deklarieren, dann speichert Excel den Inhalt der Variable
Wenn Du nun einen 2. Doppelklick auf der Zelle ausführst, dann startest Du die Schleife eben erst bei X
Beim Verlassen der entsprechenden Spalte löschst Du den Inhalt der Variablen wieder.
Aber:
was soll denn passieren, wenn z.B. der letzte Wert eingetragen wurde und Du nochmal doppelklickst?
Gruß Matthias
Anzeige
AW: beinahe ... sind der Lösung schon sehr nahe ...
18.10.2009 17:40:11
udo
Hi Matthias,
wirklich großen Dank an dich, ich hab mich best. zu unverständlich ausgedrückt musst bitte entschuldigen.
Und gleich vorne weg, meine Kenntnisse in VB sind da teilw. sehr " bescheiden " , je nach dem.
Bin da teils einfach am probieren ... mit den ganzen Deklarationen kenn ich mich auch nur bedingt aus.
' "x als Public" sagt mir leider gar nichts ... Neuland
Also klar , grundsätzlich soll er leere Zeilen ( wenn da mal die eine oder andere hochwärts drinne erscheint ) , diese dann ignorieren , egal ob die sozusagen als Trennung zwischen dem einen zum anderen Wert steht, oder auch mal in einer Anzahl gleicher Einträge untereinander, da dann zwischen drinn mal eine leere Zeile wäre.
Also Leer generell ignorieren bitte .
Und dann eigentl. dort an der Stelle der Spalte zB. Zeile 153 ... egal, nimmt er die dann als Target ...
und ab jetzt soll die Prozedur dann per " Rechtsklick " dann verfüg bar sein,
Angenommen in der gesamten Spalte 9 würden sich zB. insges. 20 versch. Einträge befinden, die nicht sortiert sind, teils Zahlen , teils Buchstaben , völlig egal, einfach von den Zellwerten her gesehen 20 versch. Einträge, dann würde ab der Zeile wo ich einsteige immer hochwärts pro Rechtsklick immer der nächste Wert übernommen werden, ...
Sprich wenn ich an meiner Target Stelle ( zB zeile 153 ) hochzus den vierten untersch. Eintrag haben wollte, würd ich nun an der Target zellen 4x hintereinander Rechtsklicken
oder eben so oft, bis dann der gew. Eintrag drinne stünde, das ganze würde sich ja eh denke ich selbst abschalten, wenn er bei seiner Suche im Suchbereich Target.Row "größer als" 8
nichts mehr unterschiedl. findet .
Hoffe ich konnte mich verständl. ausdrücken, wie gesagt, musst entschuldigen, setzt bitte nicht zu hohe Ausgangskenntnisse an mich. sind eher bescheiden
Dank dir dennoch sehr für deine Hilfe
Lieben Gruß udo
Anzeige
bzgl. Public X ...
18.10.2009 18:02:23
udo-d
Hi, wie deklarier ich denn X als Public - was du gemeint hattest ?
hilft das dann schon in der Lösungsfindung ...
besten Dank & Gruß udo
einfach in ein Modul: Public X As Long
18.10.2009 19:27:18
Matthias
Hallo
in ein Modul:
Public X As Long
Nun könnte man abfragen ob X ungleich 0 ist.
Dadurch das mit Exit For die Schleife beendet wird, könnte man durch eine 2.Variable
z.B. Y die Schleife exakt in dieser Zeile starten.
Gruß Matthias
glaube da fehlen mir einfach Vorkenntnisse
18.10.2009 19:55:12
udo-d
Hallo Matthias,
kannst du mir bitte das als Code evt. anzeigen /vorgeben wie und wo ich eine 2. Schleife ansetze
damit ich dann weitere Rechtsklicke ausüben kann und sozusagen so oft eben an der gleichen Stelle ( Target zelle ) klicke , und damit dann die immer nacheinander hochwärts dann abweichenden Einträge
in die Target Zelle übernehme.
Ein bereits eingetragener Eintrag soll/ wird also pro weiteren Klick durch den nächsten folgenden Überschrieben ...
Meine VB Kenntnisse stoßen definitiv an die Grenzen.
Wo, bzw. an welcher Stelle muss ich Public X As Long noch einsetzen ?
Deine Tipps sind best. sehr wertvoll, nur ich tu mich teils sehr schwer damit diese zu nutzen da mir
entspr. Vorkenntnisse einfach fehlen .
Könntest du das ganze mal im gesamten zeigen , da wäre ich dir sehr dankbar.
sofern es deine Zeit zulässt,
dennoch großen Dank an Dich
Lieben Gruß udo
Anzeige
100 % !!! Matthias das ist es !!! ... ( mT.)
18.10.2009 21:17:11
udo-d
Ich möchte mich bei dir in aller Form für deine Mühen herzlich bedanken,
genau das ist es.
Hab mir deinen Code eben noch angeschaut, da wär ich nicht drauf gekommen ohne deine Hilfe.
Jetzt versteh ich aber auch das ganze doch schon viel besser.
Wirklich großen Dank nochmals, dir noch einen schönen Abend
und herzliche Grüße aus dem Süden der Republik
udo
ach wie schön ... Gruß aus Dresden :o) oT
18.10.2009 21:29:15
Matthias
Nachfrage an Matthias...
19.10.2009 02:13:51
Jens
Moin Matthias
Warum deklarierst Du
R als String ?
R ist doch eine Zeilennummer
Oder hast Du das aus dem ursprünglichen Code von Udo und einfach übersehen? :o)
Gruß aus dem Sauerland
Jens
Anzeige
völlig richtig erkannt :)
19.10.2009 03:47:39
Matthias
Guten Morgen, Jens
Tätsächlich! Das habe ich nur so übernommen und nicht darauf geachtet.
Danke für Deinen Hinweis.
Gruß Matthias
@Udo
19.10.2009 02:18:13
Jens
Moin Udo
Ändere mal in Deinem Code die Zeile:
Dim R As String
in
Dim R As Long
R ist nämlich ein numerischer Wert (Zeilennummer). Den sollte man dann auch numerisch deklarieren ;o)
Gruß aus dem Sauerland
Jens
ein erster Ansatz meinerseits ...
18.10.2009 15:45:59
udo-d
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'           Deklaration
Dim R As String
R = ActiveCell.Row
'           letzten Eintrag oberhalb suchen
Range(Cells(R, 9).Address).End(xlUp).Copy
If Target.Value = "" Then
With Cells(R, 9)
ActiveSheet.Paste
Application.CutCopyMode = False
End With
End If
If Target.Value  "" Then
'           xxxxxx  hier fehlt mir eine Anweisung die zwar die oberhalb nächsten Eintrag findet, _
'           xxxxxx  aber eben in Abhängigkeit zum bereits in der aktiven Zelle stehenden
'           xxxxxx  sprich den nächsten abweichenden soll er dann übernehmen ...
End If
'           Popup Fenster nach Rechtsklick unterbinden
Cancel = True
End Sub

könntet Ihr mal einen Blick drauf werfen an der gekennzeichneten Stelle - komm nicht weiter damit
Gruß und Danke vorab
udo
Anzeige
schon mal den Browser aktualisiert? oT
18.10.2009 15:47:17
Matthias
hab damit leider noch Schwierigkeiten ...
18.10.2009 16:17:34
udo-d
Hallo Matthias,
hab deinen Code mal eingesetzt und etwas angepasst soweit ich mich damit auskenne
kannst du bitte hierauf nochmals einen Blick werfen
https://www.herber.de/bbs/user/65179.xls
denke wir sind nah dran an der Lösung
Gruß und lieben Dank an Dich
Udo

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige