 |
Autor |
Nachricht |
erml
Gott des krassmatischen Charismas & more


Alter: 53
Anmeldungsdatum: 18.12.2004
Beiträge: 2318

|
|
Vielleicht kann mir jemand bei einem Excelproblem helfen:
Gegeben sei eine aufsteigend sortierte Liste, zB in Spalte A, mit ein paar hundert Einträgen.
Ich möchte folgendes erreichen: Ich schreibe in eine Zelle, egal welche, zB A1, einen Wert, der in der Liste vorkommt, und möchte nun, dass der Bildausschnitt auf den betreffenden Wert in der Liste verschoben wird, also dass automatisch an die richtige Stelle gescrollt wird.
Hat jemand eine Idee, wie man das realisieren könnte? Ich nehme an, dass ein Makro notwendig sein wird, in dem der Wert gesucht und angesprungen wird. Vielleicht gehts aber auch einfacher...
lg und danke schon mal
erml
|
|
|
|
|
|
 |
    |
 |
Mobbi
Gott der Abstrusitäten


Alter: 46
Anmeldungsdatum: 08.04.2004
Beiträge: 6163
Wohnort: Berlin

|
|
Da benötigst Du tatsächlich ein Makro. Wenn Du nur schnell an die Stelle gelangen willst, an welcher Dein gesuchter Eintrag zu finden ist, dann kannst Du auch über die Menü-Leiste den entsprechenden Eintrag suchen.
Spalte markieren --> Menüleiste: Bearbeiten --> Suchen --> Suchvariable/Name/was auch immer eingeben. (noch schneller ist der Befehl Strg+f --> macht das Gleiche)).
Willst das tatsächlich automatisieren, so wird das um einiges komplizierter. Da kann ich Dir auf die Schnelle auch nicht weiterhelfen.
|
|
|
|
_________________ Wer hier lebt, weiß nicht was er morgen verpassen könnte, außerdem werden die Blue Moon-Krieger auferstehen und die Vaqua und Homix und Inquisisandten sowie die restlichen anderen Typen, deren Namen mir entfallen sind, wo war ich stehengeblieben?
|
|
 |
    |
 |
Frog
Gott des Ortograviehs


Alter: 53
Anmeldungsdatum: 12.04.2005
Beiträge: 3390
Wohnort: Wien

|
|
Du trägst im Code deiner Arbeitsmappe folgendes ein
Zitat: |
Private Sub Workbook_Open()
Application.OnEntry = "Eingabe"
End Sub |
Damit wird bei jeder Eingabe die Prozedur "Eingabe" aufgerufen.
Dann musst du noch ein Modul einfügen und dort folgende Prozeduren hineinkopieren
Zitat: |
Sub Eingabe()
Call JumpTo(ActiveSheet.Cells(1, 2))
End Sub
Sub JumpTo(wert As Integer)
Dim c As Integer
With ActiveSheet.Range("a1:a500")
Set f = .Find(wert, LookIn:=xlValues)
r = Mid(f.Address(), 2, 1)
c = CInt(Right(f.Address(), Len(f.Address()) - 3)) - 1
rc = CStr(r) & CStr(c)
If Not f Is Nothing Then
Range(rc).Select
End If
End With
End Sub |
Der Code ist natürlich nur rudimentär und ziemlich fehleranfällig, kann dir aber mal einen Startpunkt geben. Ich habe angenommen, dass sich die Zielwerte in deinem aktiven Blatt in der Spalte "A" befinden und die überwachte Zelle auf B1. Ein Problem ist, dass er bei jeder Änderung dort hinspringt. Das ließe sich umgehen, indem du den Wert von B1 noch in eine andere Zelle kopiert und nur dann springst, wenn die Werte von B1 und (sagen wir mal) C1 unterschiedlich sind. Die Zieladressermittlung ist auch nicht sonderlich elegant, aber mir ist auf die Schnelle nichts Besseres eingefallen. Das Problem war, dass er immer eine Zeile zu weit nach unten gesprungen ist und ich daher das um 1 nach oben korrigieren musste.
|
|
|
|
|
|
 |
    |
 |
erml
Gott des krassmatischen Charismas & more


Alter: 53
Anmeldungsdatum: 18.12.2004
Beiträge: 2318

|
|
Danke für eure Anteilnahme
Ich möchte diese Funktion tatsächlich automatisieren, und der Code mit Application.OnEntry erfüllt diesen Zweck perfekt.
Die Adressermittlung bereitet mir noch Kopfzerbrechen. Ich hab den Eindruck, dass das Programm je nach Lust und Laune mal so, mal anders rechnet. Einmal springt es in die richtige Zeile, dann wieder eine Zeile drunter, je nachdem, ob ich die Prozedur aus der Tabelle starte oder in Einzelschritten im VB-Fenster debugge.
Ein anderes Problem: Die Liste ist absteigend sortiert, wenn ich nun 40 suche, findet das Prog zuerst zB 940, das sollte doch durch den Zusatz LookAt:=xlWhole in der .Find-Methode zu lösen sein, dann liefert Find allerdings gar kein Resultat mehr...
|
|
|
|
|
|
 |
    |
 |
Frog
Gott des Ortograviehs


Alter: 53
Anmeldungsdatum: 12.04.2005
Beiträge: 3390
Wohnort: Wien

|
|
Hmmm... Ich habe es gerade mit LookAt:=xlWhole ausprobiert und da funktioniert es problemlos. Meine Liste habe ich von 260 bis 0 in 5er-Schritten absteigend sortiert in der Spalte A drin. Das Phänomen beim Debuggen habe ich jetzt mangels Zeit nicht probiert.
Verbesserung bei der Erkennung der Eingabe:
Zitat: |
Sub Eingabe()
If ActiveSheet.Cells(1, 2) <> ActiveSheet.Cells(1, 3) Then
Call JumpTo(ActiveSheet.Cells(1, 2))
ActiveSheet.Cells(1, 3) = ActiveSheet.Cells(1, 2)
End If
End Sub |
Verbesserung bei Find:
Zitat: |
Set f = .Find(wert, LookIn:=xlValues, LookAt:=xlWhole) |
|
|
|
|
|
|
 |
    |
 |
Frog
Gott des Ortograviehs


Alter: 53
Anmeldungsdatum: 12.04.2005
Beiträge: 3390
Wohnort: Wien

|
|
Das "Find" funktioniert bei Nicht-Integer-Werten offensichtlich nicht. Da ist eine eigene Suchroutine gefragt.
|
|
|
|
|
|
 |
    |
 |
erml
Gott des krassmatischen Charismas & more


Alter: 53
Anmeldungsdatum: 18.12.2004
Beiträge: 2318

|
|
Bin jetzt wieder um einiges schlauer :
Anstelle der Find-Funktion hab ich eine einfache Suchroutine eingefügt, ist ja bei einer sortierten Liste ganz einfach.
Zitat: |
Sub JumpTo(wert As Variant)
Dim adr As String, i As Integer
i = 4
vglwert = ActiveSheet.Cells(i, 1)
While vglwert > wert
i = i + 1
vglwert = ActiveSheet.Cells(i, 1)
Wend
adr = "A" & CStr(i - 1)
Range(adr).Select
End Sub |
Die Suche beginnt in Zelle A4, gesucht wird die Variable "wert".
Dass das Prog immer eine Zeile zu weit nach unten springt (deshalb i-1) liegt daran, dass nach der Bestätigung der Eingabe in die Suchzelle die Markierung immer eine Zelle nach unten wandert. Und das passiert dummerweise nach Durchlauf des Makros.
Danke für deine Hilfe, Frog
|
|
|
|
|
|
 |
    |
 |
|
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
3.0890030890032E+35 Angriffe abgewehrt
Alle Zeiten sind GMT + 1 Stunde
|
|