Clever-Excel-Forum

Normale Version: Suchen von Daten in Spalte A wenn Bedingung in Spalte B erfüllt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
(24.06.2017, 16:21)SamTG schrieb: [ -> ]Ich habe meine Tabellen schon als Datenbanken in Access gespeichert, da ich schon einige andere Abfragen erstellt habe.
Gibt es vielleicht auch eine Funktion wie list.select bei Access?
Power Query lässt sich größtenteils über das UI bedienen, d.h. Coden durck Klicken.

Wenn deine Daten schon als Access-Tabellen vorliegen dann sollte es doch ebenso einfach sein eine entsprechende Abfrage zu erstellen.
(24.06.2017, 16:29)Fennek schrieb: [ -> ]Hallo,

schau mal, ob du damit zurecht kommst:

Einmal kopieren, 6 x paste könnte reichen.

mfg

Danke Fennek, leider ist das bei meiner Menge an Datensätzen sehr anstrengend für meinen kleinen Rechner. Nur ein Lauf über alle Zeilen dauerte fast 30 Minuten.

Bei Access habe ich noch auch noch nicht die richtige Lösung gefunden.
Das wird noch eine harte Nuss...

LG
Sam
Hallo,

mit VBA könnte es wesentlich schneller gehen. Die Daten müssen, wie in der Datei vorhin, in Cells(3,1) beginnen und mit einer Leerzeile von der Überschrift getrennt sein.

Es kann sein, dass es bei zu vielen Zeilen eine Fehlermeldung gibt, da "transpose" eine max. Anzahl hat.


Code:
Sub Fen()
With CreateObject("scripting.dictionary")
F = Cells(3, 1).CurrentRegion
For i = LBound(F) To UBound(F)
   If F(i, 1) = 3179 Or F(i, 1) = 5012 Then
       If Not .exists(F(i, 2)) Then
           .Add F(i, 2), F(i, 1)
       Else
           .Item(F(i, 2)) = .Item(F(i, 2)) & ", " & F(i, 1)
       End If
   End If
Next i
Cells(5, 5).Resize(.Count, 2) = Application.Transpose(Array(.keys, .Items))
End With
End Sub


Auf einem "vernüftigen" REchner sollte es nicht mehr als 10 Sekunden dauern (geraten, aber auf Basis früherer Ergebnisse)

mfg
Hallo,

von mir auch eine Variante mit Dictionary:


Code:
Sub mach()
 
  Dim i As Long, n As Long
  Dim lngZ As Long
  Dim feld, schreibFeld
  Dim varStrg
 
  Dim c As Object
  Set c = CreateObject("Scripting.Dictionary")
 
  With Sheets("Tabelle1")
    lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range("C3:C" & lngZ).ClearContents
    feld = Range("A3:b" & lngZ)
    schreibFeld = Range("C3:C" & lngZ)
    For i = LBound(feld) To UBound(feld)
      If feld(i, 1) = 3179 Or feld(i, 1) = 5012 Then
        If Not c.exists(feld(i, 2)) Then
          c(feld(i, 2)) = i
        Else
          schreibFeld(c(feld(i, 2)), 1) = n + 1
          schreibFeld(i, 1) = n + 1
          n = n + 1
        End If
      End If
    Next i
    .Range("C3:C" & lngZ) = schreibFeld
  End With

End Sub


Bei 150 Tausend Zeilen dauerte es bei mir ca 3 Minuten.

Bei jeder ID darf ein Artikel immer nur einmal vorkommen.
Hallo zusammen,

also wie gesagt ich weiß dass es VBA und so gibt, aber ich kenne mich null aus. Wenn ich die Codes im VBA Direktfenster eingebe kommt bei beiden  Fehlermeldung.
Was mache ich falsch? bzw wo muss ich den Code einfügen?

Hab jetzt auch nochmal mit Access probiert, aber auch da bin ich noch nicht weiter. 
Die Kriterien mit einem Und zu verbinden scheint nicht zu funktionieren, da er mir immer 0 rausgibt, was nicht stimmt.

LG
Sam
Hallöchen,

der Code muss in ein Modul. Wenn Du im VBA-Editor bist, gehst Du über das Menü | Einfügen | Modul. Dann gehst Du mit dem Cursor irgendwo in den Code und startest ihn mit F5

Wenn es einen Fehler gibt, dann teile ihn uns mit, einfach nur ... Fehler ... reicht i.d.R. nicht zum korrigieren Sad
Seiten: 1 2