Bereich von rechts nach links auslesen?

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Bereich von rechts nach links auslesen?
von: Andre
Geschrieben am: 04.08.2008 16:58:54

Hallöle,
ich habe für jeden Vorgang, wie in der Testtabelle, einen Namen definiert. Gibt es nun die Möglichkeit über VBA jeden Bereich von rechts nach links zu durchsuchen, um immer den ersten Wert der gefunden wird zu erhalten? Quasi bei Vorgang1 "D", bei Vorgang2 "E" usw.
Ich brauch nämlich diese Werte später für eine Auswertung. Die Bereiche sind festgelegt, haben aber nicht immer die selbe Spaltenanzahl sondern manchmal mehr oder weniger. Daher muss das irgendwie dynamisch sein.
Dankeschön und schönen Abend
https://www.herber.de/bbs/user/54328.xls

Bild

Betrifft: AW: Bereich von rechts nach links auslesen?
von: Matthias L
Geschrieben am: 04.08.2008 17:10:08
Hallo
Geht sicher auch von Rechts, aber eigentlich ist es egal (jedenfalls bei dieser Größenordnung der Spalten)
Dir kommts doch sicher nur aufs Ergebnis an, oder?
Beispiel:


Sub Vorgang1()
Dim c As Range, strg1 As String
For Each c In Range("Vorgang1")
If c <> "" Then strg1 = c.Value
Next
MsgBox "FÜr Vorgang1 wird gespeichert " & strg1
End Sub



Sub Vorgang2()
Dim c As Range, strg2 As String
For Each c In Range("Vorgang2")
If c <> "" Then strg2 = c.Value
Next
MsgBox "FÜr Vorgang2 wird gespeichert " & strg2
End Sub



Sub Vorgang3()
Dim c As Range, strg3 As String
For Each c In Range("Vorgang3")
If c <> "" Then strg3 = c.Value
Next
MsgBox "FÜr Vorgang3 wird gespeichert " & strg3
End Sub


Gruß Matthias

Bild

Betrifft: AW: Bereich von rechts nach links auslesen?
von: Andre
Geschrieben am: 04.08.2008 17:39:56
Hi,
danke ihr beiden für die schnellen Antworten. Naja im Prinzip hab ich eine variable Spaltenanzahl ... mal mehr, mal weniger. Aber es sind ungefähr 400 Vorgänge. Kann man das ganze so umschreiben, das jenes Makro durchläuft und mir die Ergebnise in Spalte "z" oder so wiedergegeben werden? Das heißt, das ich jedes Ergebnis weiter hinten wiederfinde.
@ Daniel
Ich wüßte nicht, wie ich sonst die Daten auslesen kann? Gibt es da einfachere Möglichkeiten? Ich brauch eben aus jeder Zeile den ersten Wert links von der Spalte "Identification" ...
Danke für eure Antworten
Gruß
Andre

Bild

Betrifft: Beispiel ...
von: Matthias L
Geschrieben am: 04.08.2008 17:54:00
Hallo
meinst Du so ... ?
Klick auf Schaltfläche "alle" in der Datei
https://www.herber.de/bbs/user/54332.xls
Gruß Matthias

Bild

Betrifft: AW: Beispiel ...
von: Andre
Geschrieben am: 04.08.2008 20:41:26
Hi Mathias,
genau das mein ich!! *freu*
Aber da ich an die 400 Vorgänge hab, gibt es die Möglichkeit irgendwie eine Schleife zu bauen und alles in eine Methode zu bauen?

Bild

Betrifft: Ich hab nicht mehr viel Zeit (heute) ...
von: Matthias L
Geschrieben am: 04.08.2008 21:09:29
Hallo Andre
Das geht sicherlich auch zu machen, aber dazu wären genauere Angaben erforderlich.
evtl lädst Du ja ein Beispiel hoch. Mit ein paar konkreten Infos.
Welcher Bereich Welche Zeilen / Spalten, Grundaufbau der Tabelle etc.
Aber von meiner Seite (heute nicht mehr).
Vielleicht hat ja ein anderer Excelfreund heute noch Lust und Zeit.
Ich schau morgen erst wieder in diesen Beitrag rein.
Gruß Matthias

Bild

Betrifft: AW: Beispiel ...
von: Daniel
Geschrieben am: 04.08.2008 21:10:27
Hi
genau das Ergebnis erhälst du auf einfache Weise ohne Makro und ohne Namen für alle 400 Vorgänge, wenn du diese Formel verwendest (Matrixformel, dh ohne geschweifte Klammern eingeben und mit STRG+SHIFT+ENTER abschleißen), in Zeile 2 eingeben und nach unten kopieren


{=INDEX(A2:H2;1;MAX(SPALTE(B2:H2)*(B2:H2<>"")))}


hier dein Beispiel:
https://www.herber.de/bbs/user/54339.xls
Gruß, Daniel
ps man kann anstelle der Matrixformel auch diese verwenden, dann erspart man sich die etwas _ kompliziertere Eingabe:


 =INDEX(A2:H2;1;SUMMENPRODUKT(MAX(SPALTE(B2:H2)*(B2:H2<>""))))



Bild

Betrifft: AW: Beispiel ...
von: Andre
Geschrieben am: 04.08.2008 21:21:09
Hi Daniel,
ja das funktioniert! Doch leider ist ja die Spaltenanzahl in der die WP's stehen nicht fest. D.h. mein einziger Referenzpunkt ist die Spalte "Identification" und links davon brauch ich die ersten Werte. Manchmal sinds eben mehr, manchmal weniger. Und es sollte schon automatisch funktionieren, ohne die Formel anzupassen. Daher tuh' ich wirklich VBA favorisieren.
Grüße und dickes dankeschön an euch!

Bild

Betrifft: AW: Beispiel ...
von: Ramses
Geschrieben am: 04.08.2008 21:55:22
Hallo
wenn die Spalte den Namen "Identification" hat, dann ist die Antwort hier bereits erfolgt.
Das kannst du zur Zelladressierung verwenden
Gruss Rainer

Bild

Betrifft: AW: Beispiel ...
von: Andre
Geschrieben am: 04.08.2008 22:09:38
Hallo zusammen,
ich habe mir jetzt was von euren Beiträgen zusammengebastelt:
With Worksheets("Tabelle1").Rows(1)

Set rZelle = .Find(sName, lookat:=xlWhole, LookIn:=xlValues)
ActiveWorkbook.Names.Add Name:=sName, RefersToR1C1:= _
"=Tabelle1!C" & rZelle.Column


bName = Rows(1).Find(what:="Identification", LookIn:=xlValues, lookat:=xlWhole).Column
For Each Zelle In Range("A2:A" & Range("A1").End(xlDown).Row)
ActiveWorkbook.Names.Add Name:="Vorgang" & Zelle.Value, RefersTo:=Zelle.Resize(, bName - 1)

For Each c In Range("Vorgang" & Zelle)
If c <> "" Then strg = c.Value
Next
Cells(Range("Vorgang" & Zelle).Row, "Z") = strg


Next

End With
Er legt jetzt quasi den Namen für die Spalte "Identification" an, legt die Vorgangsbereiche fest und holt dort jeweils den letzten Wert raus.
Vielen Dank für eure Hilfe und einen schönen Feierabend!

Bild

Betrifft: AW: Beispiel ...
von: Daniel
Geschrieben am: 04.08.2008 23:15:14
Hi
auch das lässt sich per Formel lösen:
=INDEX(A2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH("Identification";$1:$1;0)-2);1; SUMMENPRODUKT(MAX(SPALTE(B2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH("Identification";$1:$1;0)-2)) *(B2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH("Identification";$1:$1;0)-2)<>""))))
die Formel wird zwar etwas länger, aber was solls.
nun ist es egal, wieviele Spalten du hast, es wird immer der Bereich bis links von der Spalte ausgewertet, in der "Identification" steht.
wenn du ein schnelles und einfaches Makro brauchst, dann würde ich einfach eines schreiben, daß diese Formel in die entsprechende Spalte schreibt.
with Range("Z2:Z400")
.FormulaLocal = "=INDEX(A2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH(""Identification"";$1:$1;0)-2);1;SUMMENPRODUKT(MAX(SPALTE(B2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH(""Identification"";$1:$1;0)-2))*(B2:BEREICH.VERSCHIEBEN(A2;0;VERGLEICH(""Identification"";$1:$1;0)-2)<>""""))))"
.Formula = .Value
Gruß, Daniel

Bild

Betrifft: AW: Bereich von rechts nach links auslesen?
von: Daniel
Geschrieben am: 04.08.2008 17:11:33
Hallo
vielleicht hilft dir dieses kleine Makro weiter:
das Ergebnis der Abfrage wird der entsprechenden Variable abgelegt


Sub test()
Dim Ergebnis As String
With Range("Vorgang1")
Ergebnis = IIf(.Cells(.Cells.Count) = "", .Cells(.Cells.Count).End(xlToLeft), .Cells(.Cells. _
Count))
End With
End Sub


durch deine Verwendung Namen ist es halt mit der Dynamik einwenig schwierig
Gruß, Daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Bereich von rechts nach links auslesen?"