Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema RefEdit
BildScreenshot zu RefEdit RefEdit-Seite mit Beispielarbeitsmappe aufrufen

Bereich von rechts nach links auslesen?

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

  

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


  

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


  

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


  

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?


  

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


  

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<>""))))




  

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!


  

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


  

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!


  

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


  

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


 

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