[EXCEL] hor - vert zoeken
ik probeer een inventaris te maken in excel maar ik geraak er niet met mijn zoekfunctie.
Situatie:
De bedoeling is dat ik veld H3 ingeef welke maat ik zoek. In veld I3 zou die nummer dan moeten verschijnen waardoor ik die nummer uit mijn stock kan nemen.
Ik heb al geprobeerd met horizontaal zoeken en verticaal zoeken maar ik geraak er maar niet uit. Een accesDB is ook geen oplossing want niet iedereen die het moet gebruiken heeft acces.
Iemand een oplossing?
Wat je dan kan doen is een combinatie van INDEX en VERGELIJKEN gebruiken. De VERGELIJKEN functie kijkt de hoeveelste waarde in de matrix de waarde bevat waarnaar je zoekt:
De INDEX functie pakt de xte waarde in de matrix die je opgeeft, dus:
Geeft de 4de waarde in de A3:A24 matrix, dus A7.
Combineer je deze dan zoek je dus in de B3:B24 matrix voor een getal die je in H3 definieert, vervolgens pak je die waarde om die dan weer te zoeken in de eerste kolom:
maar nu word er nog steeds geen rekening gehouden met de stock toch? Ik Wil dus dat als ik bijvoorbeeld lengte 100 ingeef dat de computer mij zegt dat van lengte 100 nr 10 nog in stock is. Als ik op lengte 90 zoek moet hij mij nr 12 geven en niet nr 1. Mijn excuses als dat niet duidelijk was.
Alvast bedankt!
Met de basisfunctionaliteit van verticaal zoeken gaat het je met de huidige opzet in ieder geval niet lukken. Wouter heeft dat goed verwoord.
Wouter J op 27/12/2012 12:23:57:
VERT.ZOEKEN kijkt altijd naar de meest linkse kolom en daarna kun je een waarde selecteren uit de rijen ernaast. Jij wilt dat je zoekt in de rechter kolom en de linkse waarde selecteert. Je kan dus de kolommen omdraaien, maar dat is niet mooi.
Overigens staat in je voorbeeld 2x 100 -> welke wil je dan vinden? 10 of 11?
Zoiets kan niet met een normale functie en je zult wat VBA kennis nodig hebben en een leuk macrootje moeten schrijven.
Toevoeging op 28/12/2012 12:10:12:
Oké, ik heb even een macrootje gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Public Sub Knop1_BijKlikken()
Dim iSearchStart As Integer
Dim sSearchValue As String
Dim iStockStart As Integer
Dim lStockStart As Integer
Dim rStockCell As Range
Dim bStockFound As Boolean
Dim sFindedIdCell As String
Dim sFindedValueCell As String
' Nothing found yet
bStockFound = False
' Ask the user where to search for
sSearchValue = InputBox("Geef de maat waarnaar u zoekt op")
' Begin at A3
iSearchStart = 3
' Stock begins at E3
iStockStart = 3
' Foreach cell which is filled in the A column
Do
' Save current cells in variables
sFindedIdCell = "A" & CStr(iSearchStart)
sFindedValueCell = "B" & CStr(iSearchStart)
If Not bStockFound Then
' Nothing found
' Looks if the value is equal to the searched value
If Range(sFindedValueCell).Value = sSearchValue Then
lStockStart = iStockStart
' Foreach stock cell
Do
' Check if id is in the stock
If Range(sFindedIdCell).Value = Range("E" & CStr(lStockStart)).Value Then
' Give them a nice yellowisch background
Range(sFindedValueCell, sFindedIdCell).Interior.ColorIndex = 27
' We have found something
bStockFound = True
' Exit stock loop
Exit Do
End If
lStockStart = lStockStart + 1
Loop Until IsEmpty(Range("E" & CStr(lStockStart)))
Else
' Remove highlighting if exists
Range(sFindedIdCell, sFindedValueCell).Interior.ColorIndex = 0
End If
Else
' Something found
' Remove highlighting from other cells
Range(sFindedIdCell, sFindedValueCell).Interior.ColorIndex = 0
End If
iSearchStart = iSearchStart + 1
Loop Until IsEmpty(Range("A" & CStr(iSearchStart)))
End Sub
Dim iSearchStart As Integer
Dim sSearchValue As String
Dim iStockStart As Integer
Dim lStockStart As Integer
Dim rStockCell As Range
Dim bStockFound As Boolean
Dim sFindedIdCell As String
Dim sFindedValueCell As String
' Nothing found yet
bStockFound = False
' Ask the user where to search for
sSearchValue = InputBox("Geef de maat waarnaar u zoekt op")
' Begin at A3
iSearchStart = 3
' Stock begins at E3
iStockStart = 3
' Foreach cell which is filled in the A column
Do
' Save current cells in variables
sFindedIdCell = "A" & CStr(iSearchStart)
sFindedValueCell = "B" & CStr(iSearchStart)
If Not bStockFound Then
' Nothing found
' Looks if the value is equal to the searched value
If Range(sFindedValueCell).Value = sSearchValue Then
lStockStart = iStockStart
' Foreach stock cell
Do
' Check if id is in the stock
If Range(sFindedIdCell).Value = Range("E" & CStr(lStockStart)).Value Then
' Give them a nice yellowisch background
Range(sFindedValueCell, sFindedIdCell).Interior.ColorIndex = 27
' We have found something
bStockFound = True
' Exit stock loop
Exit Do
End If
lStockStart = lStockStart + 1
Loop Until IsEmpty(Range("E" & CStr(lStockStart)))
Else
' Remove highlighting if exists
Range(sFindedIdCell, sFindedValueCell).Interior.ColorIndex = 0
End If
Else
' Something found
' Remove highlighting from other cells
Range(sFindedIdCell, sFindedValueCell).Interior.ColorIndex = 0
End If
iSearchStart = iSearchStart + 1
Loop Until IsEmpty(Range("A" & CStr(iSearchStart)))
End Sub
Deze werkt met Excel 2003. Deze macro moet je nu nog vastbinden aan een shortcut (bijv. Ctrl + 4) of aan een button.
let wel dat als je macro gebruikt excel wel eens moeilijk kan gaan doen en de gebruiker gaat vragen om toestemming...dan moet je je gebruikers weer instrueren...
Ik kan wel een stukje VB maar als ik op zoeken klik springt hij telkens naar de code, waarschijnlijk moet ik dus nog iets aanpassen. Hij zegt alleen niet wat er fout is... :s
VBA heeft een geweldige tool om fouten op te stopen. In het VBA venster klik je op 'Foutenopsporing' en dan 'stap verder' en zo ga je telkens een stap verder, hij gaat dan telkens naar de regel die hij uitvoert. Zo kun je zien hoe de code loopt en in welke regel de fout zit.