Pseudo-SQL Abfrage mit Excel07

21/04/2010 - 13:56 von Jens Meier | Report spam
Hallo NG,

ich arbeite an einem Tool, das aus bestimmten Gründen in Excel 07 realisiert
werden muss. Es sieht so aus, dass man anhand von 3 comboboxen suchkriterien
wàhlt, anhand deren dann ein "Datensatz" aus einer tabelle gesucht werden
muss. ich bràuchte jetzt etwas das ungefàhr so aussieht:
Select Row Where (vname=combo1) and (nname=combo2) and (city=combo3)
Hoffentlich wird daraus klar was ich will; eigentlich brauch ich nur die
Zeilennummer des treffers, oder die erste Zelle der Zeile soll aktiviert
werden...
Blickt hier jmd durch und hat eine Idee?

Gruss,

Jens
 

Lesen sie die antworten

#1 Peter Schleif
21/04/2010 - 15:04 | Warnen spam
Jens Meier schrieb am 21.Apr.2010 13:56 Uhr:

ich arbeite an einem Tool, das aus bestimmten Gründen in Excel 07 realisiert
werden muss. Es sieht so aus, dass man anhand von 3 comboboxen suchkriterien
wàhlt, anhand deren dann ein "Datensatz" aus einer tabelle gesucht werden
muss. ich bràuchte jetzt etwas das ungefàhr so aussieht:
Select Row Where (vname=combo1) and (nname=combo2) and (city=combo3)



Zunàchst müsstest Du den drei Spalten Namen geben: vname, nname, city.

Wird eine der drei ComboBoxen geàndert startest Du einen Suchlauf. (Oder
auch erst wenn der Benutzer auf eine Button klickt).

Die Suche durchlàuft alle belegten Zeilen und vergleicht in jeder Zeile
die Zelle aus vname mit ComboBox1, nname mit ComboBox2 und city mit
ComboBox3. Passen alle drei, wird die Suche abgebrochen und die erste
Zelle dieser Zeile aktiviert.

Die benannten Bereiche vname, nname und city werden zuvor in Datenarray
eingelesen. Darum ist diese einfache Lösung IMHO hinreichend schnell:
65000 Zeilen ca. 0,4 Sekunden.

Der Code kommt ins Modul der UserForm. Die Suche beginnt in Zeile 2
(siehe For-Anweisung)

Peter


Private Sub ComboBox1_Change()
Call getRowNumber
End Sub

Private Sub ComboBox2_Change()
Call getRowNumber
End Sub

Private Sub ComboBox3_Change()
Call getRowNumber
End Sub

Private Sub getRowNumber()
Dim last_row As Long
Dim z As Long
Dim v As Variant
Dim n As Variant
Dim c As Variant

last_row = WorksheetFunction.Min( _
[vname].Cells(Rows.Count).End(xlUp).Row, _
[nname].Cells(Rows.Count).End(xlUp).Row, _
[city].Cells(Rows.Count).End(xlUp).Row)

v = Range([vname].Cells(1), [vname].Cells(last_row))
n = Range([nname].Cells(1), [nname].Cells(last_row))
c = Range([city].Cells(1), [city].Cells(last_row))

For z = 2 To last_row
If Trim(v(z, 1)) = ComboBox1 And _
Trim(n(z, 1)) = ComboBox2 And _
Trim(c(z, 1)) = ComboBox3 Then
Exit For
End If
Next

If z <= last_row Then
[vname].Worksheet.Select
[vname].Worksheet.Cells(z, "A").Select
End If
End Sub

Ähnliche fragen