Office: Suchen in einem Array

Helfe beim Thema Suchen in einem Array in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, im Forum kann ich mein Problem leider nicht finden. Wie kann ich in einem eindimensionalen Array nach einer bestimmten Zeichenfolge suchen?... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von kingcasi, 26. Dezember 2006.

  1. Suchen in einem Array


    Hallo,

    im Forum kann ich mein Problem leider nicht finden.

    Wie kann ich in einem eindimensionalen Array nach einer bestimmten Zeichenfolge suchen? Ich habe eine csv-Datei per VBA in ein Array eingelesen. Jede Zeile enthält eine Kundennummer. Nun möchte ich nach einer bestimmten Kundennummer innerhalb dieses Arrays suchen. Kann mir jemand helfen? Danke!!!!

    :)
     
    kingcasi, 26. Dezember 2006
    #1
  2. Hi,

    anbei mal ein Bsp. wie Du vorhehen könntest:
    Code:
     
  3. Hallo,

    wenn's nur darum geht, zu prüfen, ob die Nummer da ist, dann geht's so recht flott:

    Public Sub test()
    Dim lngArray(1 To 100) As Long, lngReturn As Long
    Dim intIndex As Integer
    '//Array mit testdaten Füllen
    For intIndex = 1 To 100
    lngArray(intIndex) = intIndex
    Next
    '//Prüfung
    On Error Resume Next
    lngReturn = WorksheetFunction.Match(99, lngArray, 0) > 0
    If Err.Number <> 0 Then MsgBox "Nix Da" Else MsgBox "Ist da"
    End Sub
     
  4. Suchen in einem Array

    Hallo,

    und wie kriegt man aus einem Array eine bestimmte Zahl als wert zurück!
    zb. wenn im text eine PLz "#####" enthalten ist!

    grüße Olaf
     
    Olaf.S, 13. Juli 2008
    #4
  5. HAllo Olaf

    Anderer Ansatz:
    So sehen die Daten in der CSV aus:
    (Der Einfachheit halber mal 3 volle Spalten in Excel 2007)
    ' **********************************************************************
    ' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
    ' **********************************************************************

    Option Explicit

    Public Sub test()
    Dim arr
    Dim FSO
    Dim Datei
    Dim Such
    Such = 12345
    Set FSO = CreateObject("Scripting.filesystemobject")
    Set Datei = FSSuchen in einem Array o_Opentextfile("D:\Eigene Dateien\Mappe1.csv", 1)
    arr = Split(Datei.readall, vbCrLf)
    Datei.Close
    arr = Filter(arr, Such)
    'MsgBox Join(arr, vbCrLf)
    End Sub


    ransi
     
    ransi, 13. Juli 2008
    #5
  6. Hallo,
    genau mein Problem! Ich brauche den Index der gefundenen Zeilen! Ein Ojekt muss zugewiesen werden, aber welches? Ich bin immer wieder in dieser „Falle“.
    Bin wohl am Ende meiner Lernfähigkeit. Kann mir jemand helfen?
     
    Cadoldtimer, 3. April 2019
    #6
  7. Hallo Cadold,

    wenn der "Index" kein eigenes "Feld" in der CSV-Datei ist, kannst du entweder mit Hilfe einer Schleife nach einem Treffer suchen und den Schleifenzähler als "Index" nutzen, oder mit der WorksheetFunction.Match() dein Glück versuchen.
    Allerdings deutet das auf einen grundsätzlichen Konstruktionsfehler deiner Datenhaltung hin. Eigentlich sollte die Position eines Datensatzes keinerlei bedeutung für den Inhalt des Datensatzes haben. Wenn die Position wichtig ist, ist diese als eigenes Feld zu führen.

    Was du mit deinem Objekt zuweisen willst, habe ich nicht verstanden.

    Viele Grüße
    derHöpp
     
    derHoepp, 3. April 2019
    #7
  8. Suchen in einem Array

    Danke für die schnelle Antwort. Als Hilfesuchender ist es für mich immer schwierig, meine Frage richtig zu formulieren, denn wenn alles klar wäre, bräuchte man keine Hilfe. Ich bitte um Verzeihung.
    Da ich sehr große und zahlreiche Textdateien in eine verwertbare Tabelle überführen muß, habe ich fast nur Arrays angelegt. Über
    arr = Filter(arr,“Suchstring“) finde ich alles Nötige, z.B. einige Zeilen mit Datum. Das arr ist Variant, deshalb brauche ich keine Schleife. Jetzt habe ich ein weiteres Array erhalten mit 168 Datumseinträgen, also das Ursprungsfile als Array und das Filterergebnis. Ich benötige jetzt die Adresse bzw. den Index eines Datums der gefilterten Liste in der Ursprungsdatei. Nun dachte ich mir, dass es mir möglich sein sollte, die Position eines Datums über arr(i).address erhalten zu können, erhalte jedoch immer die Meldung „Objekt erforderlich“. Da ich ein Array auch (fälschlicherweise?) als Range verstehe, versuche ich über eine set-Zuweisung weiterzukommen, was mir bisher bei einem Array noch nicht gelungen ist. Eine Schleife, ein Array mit 100k Zeilen mit einem Array von 1000 gefundenen Ergebnissen nach einem einzigen Eintrag und dessen Position zu durchsuchen, dauert seine Zeit!
    Zusammenfassend: Ich benötige die Adresse bzw. den Index eines einzigen Datums aus der Textdatei, damit ich ein Ereignis als „vorher“ oder „nachher“ bestimmen kann.
    Beispiel Log-Datei: Jede Zeile verfügt über einen Zeiteintrag „hh:mm:ss“,
    leider aber nicht über einen Datumseintrag! Nun finde ich eine Eintrag „Otto“ mit „hh:mm:ss“, aber kein verheriges Datum. Aber nach x Zeilen finde ich ein Datum und Uhrzeit. Da ein Tag in 24 Stunden aufgeteilt ist, kann ich nun das Ereignis „Otto“ mit einem Datum bestimmen, indem ich die Uhrzeiten in Tage umrechnen kann und vom gefundenen Datum rückwärts bestimme.
    Hier hatte ich die Hoffnung, über einen Schalter bei „Filter“ oder „find“ oder „like“ o.a. zu einer schnellen Lösung ohne Tabelle zu kommen.
    Für Ihr Verständnis, bin 73 und habe vor 6 Monten mit der Programmierung begonnen, hatte Grundkenntnisse aus dem Studium vor 45 Jahren.
    Für weiter Tipps bin ich sehr dankbar, das Problem quält mich ungemein! Alle anderen Probleme habe ich gelöst.
     
    Cadoldtimer, 3. April 2019
    #8
  9. Habe über die Uhrzeiten die Anzahl fehlender Tage bis zum ersten Auftauchen eines Datums berechnet und mit DateAdd zurückgerechnet.
    Was für ein Aufwand!
    Falls Sie bessere Lösungen haben, bitte vorschlagen, vielen Dank!
     
    Cadoldtimer, 3. April 2019
    #9
  10. Lernen, lernen und nochmals lernen.
    Wer das nicht mehr kann, ist schon mit der Vorbereitung zum Einstieg in die Kiste beschäftigt (unabhängig vom Alter). Daher: Sehr gut und alle Achtung.

    Zum Thema:
    Arrays haben zwei Stärken: Man kann wunderbar Schleifen darin laufen, und wenn man die Adresse eines Datenfeldes kennt (Zeile, Spalte), kann man direkt auf den enthaltenen Inhalt zugreifen.
    Für andere Maßnahmen wie Finden, Filtern, Sortieren ist ein Array weniger geeignet, da muss man dann Schleifen laufen.

    Für Tabellen gibt es wiederum effiziente Aufrufe zum Finden, Filtern, Sortieren. Daher sollte man schauen, woraus man sein Array erzeugen würde, weil ein Array nur ein temporäres Objekt und kein Speichermedium ist. Erzeugt man es aus einer Tabelle, würde man doch vielleicht besser diese für solche Maßnahmen heranziehen, aus praktischen und Performancegedanken heraus.

    Wenn das so einfach gelingt, sind diese Textdateien bereits Texttabellen, wo halt nur z.B. ein Zeichen wie ein Semikolon als Spaltenbegrenzer fungiert.

    Also wäre es ein geeigneter Weg, sich den Dateiinhalt unmittelbar als Tabelle verfüg- und lesbar zu machen. Das gelingt z.B. mit SQL und seit Excel 2010 mit Power Query.

    Hier hatte ich mal für die erste Variante einen Ansatz hinterlegt: bestimmte Anzahl der letzten Datensätze einer Textdatei auslesen
     
  11. Hallo auch noch einmal von mir,

    du kannst ein Array als Range verstehen, die nur die Inhalte speichert. Also aller "unnötiger" Schnickschnack ist weg. Dazu gehören auch informationen über die Adresse. Du kannst einen bestimmten Inhalt über den "Spalten" und "Zeilen"-Index abrufen (Index der Dimension wäre treffender, im Gegensatz zu Ranges sind Arrays sind nicht auf zwei Dimensionen eingeschränkt. Es gehen auch mehr oder weniger). Allerdings kannst du nicht rückwärts vom Inhalt auf die Position im Array schließen. Das kannst du nur, in dem du mit Zählern in Schleifen arbeitest.

    Vielleicht stellst du uns mal eine Beispieldatei zur Verfügung und erläuterst daran, was du eigentlich erreichen willst. Ich finde es etwas schwierig, mir das nur theoretisch vorzustellen.

    Viele Grüße
    derHöpp
     
    derHoepp, 3. April 2019
    #11
  12. Hallo zusammen,
    bin doch überrascht von den schnellen Reaktionen. Ich habe das Problem gelöst unnd zeige hier mal einen Auszug (bitte nicht totlachen, komme dafür nicht auf).
    Zu diesem Zeitpunkt habe ich jetzt aus wirren Zeilen Text , keine .csv-Struktur, eine Tabelle durch Vorfilterung, u.a. mit Arrays erstellt (gebastelt, etliche Zeilen Code). Die 1. Spalte soll das Datum. die 2. die Uhrzeit enthalten, in Zeile 1 sind die Überschriften, die restlichen Spalten sind nicht von Belang.
    Ich teile nun die vollständige 2. Spalte über die Uhrzeiten in Tage auf, die ich dann als "Range" für das Auffinden von Datums nutze und bei Auffinden dann ggf. zurückrechne. Kommentare habe ich gelöscht, Ihre (Eure) Kommentare sind mir hochwillkommen!
    Leider ist hier meine Formatierung verloren gegangen! Sorry.

    Code:

    Option Explicit

    Sub SchleifeUhrzeit(VarDatTSSplit, ErstTS, Tagezähler, ListenZeile, OberGrenze, TagesAnfang, TagesEnde, TagesSpanne, TagesAnfangFolgetag, TageZählerMax, ErstTSad)
    Dim finden As Range
    Dim suchen As Variant
    On Error Resume Next
    With ActiveSheet
    For ListenZeile = TagesAnfang To OberGrenze
    If Format(Cells(ListenZeile, 2).Value, "hh:mm:ss") > Format(Cells(ListenZeile + 1, 2).Value, "hh:mm:ss") Then
    Range("A" & ListenZeile).Select '
    Selection.Interior.ColorIndex = 3
    Selection.Name = "EndeTag" & Tagezähler
    TagesEnde = ListenZeile
    TagesSpanne = TagesEnde - TagesAnfang
    Range("A" & ListenZeile + 1).Select
    Selection.Name = "AnfangTag" & Tagezähler + 1
    Selection.Interior.ColorIndex = 4
    '----------------------------------------------------------------------------------- Datum --------------------------------------
    .Range("AnfangTag" & Tagezähler, "EndeTag" & Tagezähler).Select 'Tag beginnt mit 1, VarDatTSSplit Array beginnt mit 0 => delta 1
    Set finden = .Range("AnfangTag" & Tagezähler, "EndeTag" & Tagezähler).Find("*") '.Range("AnfangTag" & Tagezähler, "EndeTag" & Tagezähler)
    If finden = "" Then
    'später
    Else
    Selection = finden.Value
    End If
    '----------------------------------------------------------------------------------- Datum --------------------------------------
    If ListenZeile < OberGrenze Then
    Tagezähler = Tagezähler + 1
    Else
    ListenZeile = OberGrenze
    TageZählerMax = Tagezähler
    End If
    Else
    If ListenZeile >= OberGrenze Then Exit For
    End If
    Next
    If Range("A2") = "" Then
    Tagezähler = 2
    Do
    Set finden = .Range("AnfangTag" & Tagezähler, "EndeTag" & Tagezähler).Find("*")
    If finden = "" Then
    Tagezähler = Tagezähler + 1
    Else
    finden(DateAdd("d", -(Tagezähler - 1), finden)).Value
    suchen = DateAdd("d", -(Tagezähler - 1), finden)
    .Range("AnfangTag" & (Tagezähler - 1), "EndeTag" & (Tagezähler - 1)) = suchen
    End If
    Loop Until finden > ""
    End If
    End With
    End Sub
     
    Cadoldtimer, 4. April 2019
    #12
Thema:

Suchen in einem Array

Die Seite wird geladen...
  1. Suchen in einem Array - Similar Threads - Array

  2. Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte

    in Microsoft Excel Hilfe
    Adressen in eine Zelle bei Übereinstimmung eindeutiger Werte einer anderen Spalte: Hallo zusammen, wer letzteren Thread kennt, hier eine Neuauflage. Problem: Aus Array-Berechnungen (Variablen von Let) ein weiteres Array zu erzeugen, welches für alle eindeutigen Werte aus G die...
  3. Zahlendubletten im Array

    in Microsoft Excel Hilfe
    Zahlendubletten im Array: Guten Morgen liebe Community, anbei ein vereinfachtes Beispiel der Problematik, da das Original mehrere LAMBDA-Funktionen und Tabellen mit einbezieht. Ich benötige die Lösung, um eine weitere...
  4. Array aus Excel Tabelle einlesen Word VBA

    in Microsoft Excel Hilfe
    Array aus Excel Tabelle einlesen Word VBA: Hallo, ich benötige in einer Word Datei die Werte einer Excel Datei. Ich würde gerne eine Spalte als Array einlesen. Wie das Array ein lesen in Excel geht weiß ich, aber wie schaffe ich den...
  5. Summenteilergebnis eines Arrays als Array darstellen

    in Microsoft Excel Hilfe
    Summenteilergebnis eines Arrays als Array darstellen: Hallo Community, Summenteilergebnis eines Arrays als Array darstellen. An dieser Stelle stecke ich fest. Ich habe eine Testmappe erstellt, die die Problematik versucht darzustellen. Bevor jemand...
  6. Formel bei Veränderung von dynamischem Array "mitziehen"?

    in Microsoft Excel Hilfe
    Formel bei Veränderung von dynamischem Array "mitziehen"?: Hallo liebes Forum, ich komme bei folgendem Problem nicht weiter und habe mir hier etwas Hilfe erhofft: Ich habe eine Tabelle mit Feedbacks zu Lehrgängen/Kursen. Diese will ich nach Dozent erst...
  7. Array-Funktion mit VBA in Zelle schreiben

    in Microsoft Excel Hilfe
    Array-Funktion mit VBA in Zelle schreiben: Hallo zusammen, ich bin begeisterter Nutzer der neuen Array-Funktionen in Excel 365. Ich möchte mit VBA so eine Funktion in eine Zelle schreiben. Bei "normalen" Formeln habe ich das immer so...
  8. Zählenwenn Ergebnis als dyn. Array

    in Microsoft Excel Hilfe
    Zählenwenn Ergebnis als dyn. Array: Hallo, In beiliegender Tabelle soll ein dyn. Array ausgegeben werden, welches die Ergebnisse wie in Spalte C beinhaltet. Das Array darf dabei nicht kürzer sein, als die Tabelle1 selbst. Also nicht...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden