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

vba - letzte Spalte suchen

vba - letzte Spalte suchen
21.02.2015 02:03:22
udo
Guten Morgen lieber Helfer,
ich hätte eine kurze Bitte ... ich versuche an einem best. Punkt meiner
Anweisungen im BeforeRightClick Ereignis einen Wert in einer Zelle einzutragen.
Bedingung er fängt irgendwann mal an in Spalte 23 wenn diese noch leer ist.
alle Spalten rechts weg sind dann auch noch leer.
wenn nun dann wieder das gleiche Ereignis wieder greift ( sprich beim nächsten Rechtsklick ) soll er nun in die nächste freie Spalte den Wert aus Spalte 20 dann eintragen, dies wäre dann also in Spalte 24, bei weiterem RK wäre es dann in Sp.25, dann Sp.26 usw. immer von Spalte 23 beginnend nach rechts die nächste leere Spalte und da dann immer den Wert aus Spalte 20 eintragen.
Ich hab da mal so angefangen, allerdings is da scheins ein Fehler drin :
R habe ich mit ActiveCell.Row bestimmt ...
If Cells(R, 23) = "" Then Cells(R, 23) = Cells(R, 20).Value
If Cells(R, 23) "" Then Cells(R, 23).End(xlToRight).Column 1 = Cells(R, 20).Value
sieht Jemand von Euch da evtl, was ich falsch schreibe ?
Wäre Euch um eure Hilfe sehr dankbar, schon mal lieben Dank im Voraus
LG Udo

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
habe zwar was gefunden - aber dennoch noch offen
21.02.2015 03:43:09
udo
konnte mir aus verschiedenen Beiträgen in der Recherche etwas zusammengestückeln, das so einigermaßen
nun funktioniert, allerdings musste ich dazu dann einige Spalten in meiner Tabelle verschieben ...
Cells(R, IIf(IsEmpty(Cells(R, Columns.Count)), Cells(R, 41).End(xlToLeft).Column, Columns.Count) + 1) = Cells(R, 20).Value
Meine Wunschlösung jedoch wäre :
ich löse das Ereignis in Spalte 19 aus , der nach Formel errechnete Wert steht in Spalte 20
es stehen noch eine weitere Formel in Sp.21, Sp. 22 sollte eigentl. leer bleiben, sodass er die Werte aus dem Ereignis bei jedem Rechtsklick in 19 eben nach und nach ab Spalte 23 rechts weg immer in die nächste freie Spalte bis Sp. 41 dann einträgt ...
Würde mich dennoch sehr freuen wenn mir dazu Jemand einen klareren Ansatz hätte.
Ich würde heute tagsüber mich rückmelden, lieben Dank
Udo

Anzeige
und was auch noch wichtig wäre dabei ...
21.02.2015 04:37:59
udo
... die Spalten in die die Werte rechtsweg dann eingetragen werden, sind alle ausgeblendet ...
In der Art wie ich es oben gelöst habe, fiel mir gerade auf, das er zwar die Wert nach u nach hochrechnet, diese wohl aber immer in eine gleiche zell schreibt u eben nicht rechts immer die nächste leere sucht, erst wenn ich die Spalten wieder einblende, springt er dann los ...
hmmm ? Ich bin mit meinem Latein am Ende, vielleicht habt ihr heut mal irgendwann ne Idee, schau mittgas wieder rein, Danke

AW: und was auch noch wichtig wäre dabei ...
21.02.2015 11:21:32
fcs
Hallo Udo,
wie du schon gemerkt hast funktioniert .End(xl.....) zur Ansteuerung von Zellen ggf. nicht korrekt wenn Zeilen/Spalten ausgeblendet sind.
In diesem Fall muss man in einer Schleife prüfen ob die relevanten Zellen in der Zeile schon ausgefüllt sind und in der 1. leeren Zelle den Wert eintragen.
Gruß
Franz
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim R As Long, Spalte As Long
Select Case Target.Column
Case 19 'bei Click in dieser/diesen Spalten Aktion ausführen - ggf. anpassen
If Target.Row > 1 Then 'Zeilennummer ggf. anpassen
Cancel = True 'wenn Rechte-Maus-Menü nicht eingeblendet werden soll
Spalte = 23
R = Target.Row 'statt ActiveCell.Row '(empfehlenswert)
Do Until IsEmpty(Cells(R, Spalte))
If Spalte = Columns.Count Then 'letzte Spalte im Blatt ist ausgefüllt
MsgBox "Alle Spalten in Zeile " & R & " sind ausgefüllt!"
Exit Sub
End If
Spalte = Spalte + 1
Loop
Application.EnableEvents = False 'Ist ggf. wichtig, wenn auch das _
Worksheet_Change-Ereignis im Tabellen-Code-Modul verwendet wird.
Cells(R, Spalte) = Cells(R, 20)
Application.EnableEvents = True
End If
End Select
End Sub

Anzeige
AW: vba - letzte Spalte suchen
21.02.2015 11:15:54
daniel
Hi
Das müsstest du so lösen, denn bevor .End() eingesetzt werden kann, muss Spalte 23 und 24 gefüllt sein.
If Cells(R, 23) = "" Then
Cells(R, 23) = Cells(R, 20).Value
ElseIf Cells(R, 24) = "" Then
Cells(R, 24) = Cells(R, 20).Value
Else
Cells(R, 23).End(xlToRight).Offset(0, 1).value = Cells(R, 20).Value
Ende If

Einfacher wäre es, wenn Spalte 22 immer befüllt ist und bis zum Blattende nichts anderes mehr kommt, dann springt man einfach vom Blattende nach links bis zur ersten befüllten Zelle und dann eine nach rechts:
Cells(R, Columns.Count).Ende(xlToLeft).Offset(0, 1).value = celks(R, 20).value
Gruß Daniel

Anzeige
Herzlichen Dank Franz & Daniel ! Ihr habt mir ...
21.02.2015 18:35:11
udo
... sehr geholfen, lieben Dank dafür.
So kann ich es bei mir integrieren, werde beide Varianten mal einbauen und schauen wie es sich
verhält.
Danke Euch wirklich sehr ! Euch noch ein schönes Wochenende
LG udo

Also, habe beide Varianten eben eingebaut und ...
21.02.2015 20:26:27
udo
... getestet, funktionieren zunächst beide bei eben eingeblendeten Spalten, blende ich die Eintragebereiche ( Spalten 23 - 42 ) aus, greift nur die Anweisung die Franz gepostet hatte, diese habe ich mir angepasst, funktioniert super.
Nochmals herzlichen Dank an Euch Beide, Daniels Ansatz habe ich eben auch schon für andere Anweisungen nutzen können ..
Schönes WE
udo
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige