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

Liste - oder array(?) füllen

Liste - oder array(?) füllen
Joachim
Hallo,
ich hab ne Tabelle mit 3 Spalten: Nummer, real, Vorlieger.
Zuerst will ich alle Nummern ermitteln, die in Spalte real ein R stehen haben. Diese Nummern würde ich in einer Liste (array?) zwischenspeichern. Danach picke ich mir jede einzelne Nummer nacheinander wieder raus und such dazu alle Nummern, die diese Nummer als Vorlieger haben.
(Die Anzahl der Nummern mit R variiert.)
Endprodukt soll so aussehen:
12345 R
12378 P 12345
12379 P 12345
12380 P 12345
45678 R
12381 P 45678
12382 P 45678
usw.
Bisher ist die Tabelle durcheinander und sie soll danach eben so ausschauen.
Mit arrays habe ich bisher noch nicht gearbeitet.
Gruß
Joachim
AW: Liste - oder array(?) füllen
03.08.2012 14:08:17
Rudi
Hallo,
Endprodukt soll so aussehen:
und wie sieht der Ursprung aus?
Lad mal die Mappe hoch.
Gruß
Rudi
AW: Liste - oder array(?) füllen
03.08.2012 14:48:25
Joachim
Hallo Rudi,
anbei ein Beispiel:
https://www.herber.de/bbs/user/81258.xlsx
die "R" haben alle als Vorlieger die 18225. Das ist aber Nebensache.
Es geht um die "R" und die "P", die an den "R" hängen. Es können unterschiedlich viele "P" an einem "R" hängen.
Anmerkung: Die Datei ist eine Auswertung aus einer Oracle-DB.
Gruß
Joachim
AW: Liste - oder array(?) füllen noch offen
03.08.2012 14:48:51
Joachim
owT
AW: Liste - oder array(?) füllen noch offen
03.08.2012 21:23:57
Josef

Hallo Joachuim,
probier mal.

Sub wiredArray()
  Dim rng As Range, rngC As Range
  Dim vntOut() As Variant
  Dim lngIndex As Long, lngLast As Long
  
  With Tabelle1
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    Redim vntOut(1 To lngLast - 1, 1 To 3)
    For Each rng In .Range("A2:A" & lngLast)
      If rng.Offset(0, 1) = "R" Then
        lngIndex = lngIndex + 1
        vntOut(lngIndex, 1) = rng
        vntOut(lngIndex, 2) = "R"
        For Each rngC In .Range("C2:C" & lngLast)
          If rngC.Row <> rng.Row Then
            If rngC = rng Then
              lngIndex = lngIndex + 1
              vntOut(lngIndex, 1) = rngC.Offset(0, -2)
              vntOut(lngIndex, 2) = rngC.Offset(0, -1)
              vntOut(lngIndex, 3) = rng
            End If
          End If
        Next
      End If
    Next
    .Range("E2").Resize(lngLast - 1, 3) = vntOut
  End With
  
  Set rng = Nothing
  Set rngC = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Liste - oder array(?) füllen noch offen
06.08.2012 08:56:16
Joachim
Hallo Sepp,
vielen Dank! Es funktioniert!
Eine "Schönheit" hätte ich noch:
Kann man die Liste noch vorher sortieren, aufsteigend nach den Nummern mit R? Danach aufsteigend nach Nummer mit P innerhalb eines R.
Soll dann so aussehen:
182224 R
182226 P 182224
182721 P 182224
182227 R
182228 P 182224
182719 P 182224
182720 P 182224
182230 R
199359 P 182230
199407 P 182230
182229 R
Gruß
Joachim
AW: Liste - oder array(?) füllen noch offen
06.08.2012 13:43:45
Dirk
Hallo!
Kan man mit Bubblesort machen. Einfach mal danach googlen.
Gruss
Dirk aus Dubai
AW: Liste - oder array(?) füllen noch offen
06.08.2012 17:58:44
Josef

Hallo Joachim,
der Einfachheit halber sortiere ich die Ursprungsliste.
Sub wiredArray()
  Dim rng As Range, rngC As Range
  Dim vntOut() As Variant
  Dim lngIndex As Long, lngLast As Long
  
  With Tabelle1
    lngLast = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
    Redim vntOut(1 To lngLast - 1, 1 To 3)
    .Range("A1:C" & lngLast).Sort Key1:=.Range("A1"), Order1:=xlAscending, _
      Key2:=.Range("B1"), Order1:=xlAscending, _
      Key3:=.Range("C1"), Order3:=xlAscending, _
      Header:=xlGuess
    For Each rng In .Range("A2:A" & lngLast)
      If rng.Offset(0, 1) = "R" Then
        lngIndex = lngIndex + 1
        vntOut(lngIndex, 1) = rng
        vntOut(lngIndex, 2) = "R"
        For Each rngC In .Range("C2:C" & lngLast)
          If rngC.Row <> rng.Row Then
            If rngC = rng Then
              lngIndex = lngIndex + 1
              vntOut(lngIndex, 1) = rngC.Offset(0, -2)
              vntOut(lngIndex, 2) = rngC.Offset(0, -1)
              vntOut(lngIndex, 3) = rng
            End If
          End If
        Next
      End If
    Next
    .Range("E2").Resize(lngLast - 1, 3) = vntOut
  End With
  
  Set rng = Nothing
  Set rngC = Nothing
End Sub




« Gruß Sepp »

Anzeige
AW: Liste - oder array(?) füllen noch offen
07.08.2012 10:14:07
Joachim
Hallo Sepp,
vielen Dank!!
Jetzt kann ich daran weiterbasteln :)
Gruß
Joachim

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige