Anzeige
Archiv - Navigation
260to264
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
260to264
260to264
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ARRAY schnell durchsuchen

ARRAY schnell durchsuchen
23.05.2003 11:21:42
Dietmar
Hi

Wie kann ich ein ARRAY mit "drei" Spalten schnell nach einem Wert durch suchen?
Zuzeit wird es Zeile für Zeile (mit einer FOR NEXT Schleife) durchsucht, dies dauert aber sehr lange.

Gruß und Dank an alle
Dietmar

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 11:25:20
Umbratus

Hallo Dietmar,

grundsätzlich merkt man keinen Unterschied, ob es jetzt ne gezählte, ne Kopf- oder ne Fußgesteuerte Schleife is.

Poste mal den Code, dann wird sich zeigen, ob man was dran optimieren kann.

Grüßli

Re: ARRAY schnell durchsuchen
23.05.2003 11:38:38
Dietmar

Hi Umbratus
Hier z.B.: in verküzter Form mein Code

For w = 1 To 500
If Array(2, w) = "Irgendwas" Then
MsgBox "An " & w & " .Stelle gefunden"
Exit For
Next w

Ich würde gern folgenden Code gern verwenden, aber dieser scheint nur bei einem einspaltingem ARRAY zufunktionieren

Sub Durchsuchen()
Dim arrBereich As Variant
Dim intRow As Integer
arrBereich = Range("A1:A16")
On Error Resume Next
intRow = Application.Match("Irgendwas", arrBereich, 0)
If Err > 0 Then
MsgBox "Nicht gefunden"
Else
MsgBox "An " & intRow & " .Stelle gefunden"
End If
End Sub

Gruß Dietmar

Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 11:50:32
Umbratus

Hmm, ich glaub net, das die Funktion Application.Match schneller is, als deine Schleife. Die Funktion kann ja auch nur die Tabelle Zelle für Zelle durchsuchen.

Das wird nicht schneller gehen, es sei denn, du sortierst die Tabelle in einer Form, das du an je nach Suchwert den Bereich der durchforstet wird einschränkst.

Ansonsten seh ich keine Möglichkeit.



Re: ARRAY schnell durchsuchen
23.05.2003 11:55:25
Dietmar

Ich habe es mit einer einspaltigen ARRAY probiert und es schien als wäre der andere Code deutlich schneller.

Gruß Dietmar
PS fals ich noch was finde werde ich es hier posten.

Re: ARRAY schnell durchsuchen
23.05.2003 12:06:53
Nepumuk

Hallo Dietmar,
und warum machst du das nicht mit der Find - Anweisung?
Gruß
Nepumuk

Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 12:17:37
Dietmar

kannst du mir eventuell ein Beispiel Code posten

Gruß Dietmar

Re: ARRAY schnell durchsuchen
23.05.2003 12:34:35
Nepumuk

Hallo Dietmar,
das Programm durchsucht die Splate B Von Zeile 1 bis zur Zeile in der der letzte Eintrag steht. Es werden nur genaue Übereinstimmungen gezählt sowie Groß- und Kleinschreibung beachtet. Das kannst du in den Parameter der Find-Methode einstellen.

Gruß
Nepumuk

Re: ARRAY schnell durchsuchen
23.05.2003 12:46:04
Dietmar

Hi Nepumuk

dein Code habe ich probiert er funktioniert im Sheet gut aber wenn ich ihn bei einem ARRAY anwende, kommt ein Laufzeit Fehler (424) in der Zeile "Set zellen = .FIND ...."

Gruß Dietmar

Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 13:06:54
Nepumuk

Hallo Dietmar,
das kommt davon, dass viele von Array sprechen, wenn sie einen Bereich in der Tabelle meinen. Also, wenn du ein echtes Array durchsuchen willst, gibt es mehrere Möglichkeiten. Da brauche ich aber noch ein paar Angaben. Wie viele Dimensionen hat das Array und sind die Daten darin sortiert, wenn ja in welcher Reihenfolge? Können Daten im Array doppelt vorkommen? Wird das Arrray nur einmal durchsucht, oder laufen mehrere Suchläufe darin nacheinander ab?
Gruß
Nepumuk


Re: ARRAY schnell durchsuchen
23.05.2003 13:23:47
Dietmar

zu
1. dies ist das ARRAY Array(3, maxZeilen)
2. nein die daten sind unsortiert
3. Spalte (1) kommen die daten wiederholt vor
Spalte (2) sind die daten nur einmal vorhanden diese soll auch durchsucht werden
Spalte (4) kommen die daten wiederholt vor
4. es sind mehrere Suchläufe (es können schonmal 200 sein)
ausdiesem grund ist mir auch die ARRAY mit einer Schleife zudurchsuchen zulangsam.

Gruß Dietmar

Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 14:20:08
Nepumuk

Hallo Dietmar,
du hast im Programm die Option Base nicht auf eins gestellt. D.h. die Spalte 1 hat den Spaltenindex 0 oder?
Ist maxZeilen eine als Public deklarierte Variable?
Gruß
Nepumuk

Re: ARRAY schnell durchsuchen
23.05.2003 14:46:12
Dietmar

Was ist die Option Base ??
maxZeilen ist ein Variable

Gruß Dietmar

Re: ARRAY schnell durchsuchen
23.05.2003 14:53:48
Nepumuk

Hallo Dietmar,
kannst du den Code mal an meine Adresse schicken, damit ich mir das genauer anschauen kann? Es brauchen keine Daten in der Tabelle sein.
Gruß
Nepumuk

Re: ARRAY schnell durchsuchen
23.05.2003 15:16:58
Dietmar

An Nepumuk
ich muß jetzt leider los,
hier noch die komplette SUB um die es geht. (Bin Montag wieder hier)
die TEST.xls ist diese Datei
in der WGT.txt sind Artikel Bez. + Nr + WGT
die TRAN*.*" sind sogenannte Transportbelege beinhaltet nur eine Artikel Nr und Kundendaten
Produkt.dat hier sollen die Daten gespeichertwerden


Sub TestCreateFile()
Dim iFile As Integer, iCounter As Integer
Dim sFileA As String 'für WGT ARRAY
Dim sFileB As String
Dim sFile As String, sTxt As String
Dim WGTOK As Boolean

XLSDatei = "TEST.xls"

Ordner = CODESRV & "\went-trans$\"
Extension = "TRAN*.*"
dName = Dir(Ordner & Extension)

iFile = FreeFile
sFileA = "S:\WGT.txt"
maxZeilen = 0
Zeile = 1
Open sFileA For Input As iFile
Do Until EOF(iFile)
Line Input #iFile, sTxt
maxZeilen = maxZeilen + 1
Loop
Close
iFile = FreeFile
Open sFileA For Input As iFile
ReDim WGT_Array(3, maxZeilen)
Do Until EOF(iFile)
Line Input #iFile, sTxt
WGT_Array(1, WGT_Zeilen) = CStr(Left(sTxt, 3)) 'WGT
WGT_Array(2, WGT_Zeilen) = CStr(Mid(sTxt, 5, 6)) 'BestellNr
WGT_Array(3, WGT_Zeilen) = CStr(Right(sTxt, Len(sTxt) - 11)) 'Bezeichnung
WGT_Zeilen = WGT_Zeilen + 1
Loop

Close

iCounter = 1

iFile = FreeFile
sFile = Application.Path & "\Produkt.dat"
Open sFile For Output As iFile

Do While dName <> ""

n = n + 1
If dName = Workbooks(XLSDatei).Sheets("TRANS-Dateien").Range("A" & n) Then GoTo Weiter

sFileB = Ordner & dName
AnzahlTrans = 0
Zeile = 1
Open sFileB For Input As iFile + 1
Do Until EOF(iFile + 1)
Line Input #iFile + 1, sTxt
AnzahlTrans = AnzahlTrans + 1
Loop
Close iFile + 1

Open sFileB For Input As iFile + 1
Do Until EOF(iFile + 1)
Line Input #iFile + 1, sTxt

'Zähler = 4 +1
'Gedruckt = 1 +1
'Dateiname = 20 +1 dName
'Datum = 10 +1 CStr(Mid(sTxt, 62, 10))
' = 3 +1 CStr(Mid(sTxt, 46, 3))
'TRANS ID = 12 CStr(Mid(sTxt, 12, 12))
'BestellNr. = 6 +1 CStr(Mid(sTxt, 24, 6))
'WGT = 3 +1
'Bezeichn. = offen

'Auftrag ID CStr(Mid(sTxt, 49, 13)) nichtverwendet

For Zeile = 1 To AnzahlTrans
WGTOK = False
x = iCounter

For w = 2 To WGT_Zeilen - 1
If WGT_Array(2, w) = CStr(Mid(sTxt, 24, 6)) Then

Print #iFile, iCounter & Space(4 - Len(x)) & "0" & Space(1) & dName & Space(1) & _
CStr(Mid(sTxt, 62, 10)) & Space(1) & _
CStr(Mid(sTxt, 46, 3)) & Space(1) & _
CStr(Mid(sTxt, 12, 12)) & Space(1) & _
CStr(Mid(sTxt, 24, 6)) & Space(1) & _
WGT_Array(1, w) & Space(1) & WGT_Array(3, w)
WGTOK = True
Exit For
End If
Next w
If WGTOK = False Then
Print #iFile, iCounter & Space(4 - Len(x)) & "0" & Space(1) & dName & Space(1) & _
CStr(Mid(sTxt, 62, 10)) & Space(1) & _
CStr(Mid(sTxt, 46, 3)) & Space(1) & _
CStr(Mid(sTxt, 12, 12)) & Space(1) & _
CStr(Mid(sTxt, 24, 6)) & Space(1)
End If

iCounter = iCounter + 1

Next Zeile

Schliessen:
Loop

Close iFile + 1
Weiter:
dName = Dir()
'Call refreshPB

Loop

Close iFile
Workbooks.OpenText _
Filename:=sFile, _
DataType:=xlDelimited, _
Tab:=False, _
semicolon:=False, _
comma:=False, _
Space:=False, _
other:=False
MsgBox "Weiter"
ActiveWorkbook.Close savechanges:=False
End Sub


Gruß Dietmar
PS (Bin Montag wieder hier)

Anzeige
Re: ARRAY schnell durchsuchen
23.05.2003 16:15:46
Nepumuk

Hallo Dietmar,
jetzt weiß ich zumindest wo maxZeilen herkommt und das Array heißt anscheinend WGT_Array aber das hat nur drei Spalten. Du hast geschrieben: "Spalte (4) kommen die daten wiederholt vor".
Was nun?
Gruß
Nepumuk
P.S.: Kann aber erst Montag nachmittag.

Re: ARRAY schnell durchsuchen
27.05.2003 08:02:04
Dietmar

Hi Nepumuk
Sorry konnte gestern leider nicht
und nochmal sorry habe mich wohl verschrieben meinte Spalte 3 und nicht Spalte 4

Gruß dietmar

Re: ARRAY schnell durchsuchen
27.05.2003 16:13:25
Nepumuk

Hallo Dietmar,
das Programm soll wie ich mich erinnere nach Bestellnummern suchen. Sind das nummerische Werte?
Gruß
Nepumuk

Anzeige

169 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige