2016-06-16 9 views
1

Ich habe Tabelle „Preisliste“ in Excel mit folgenden StrukturPreis berechnet aus der Tabelle in Excel-Lookup oder Makro

Type  Thickness  width Height  Price 
iron   5   7  10   20 
iron   10   10  15   24 
iron   12   14  17   26 

wie kann ich den Preis finden, wenn einige-on-Typen tritt Eisen, Dicke 10, Breite 9 , Höhe 14 mit vlookup oder Makro. Ich habe versucht, mit vlookup, aber es funktioniert nicht und später fand ich bei Google, dass Vlookup nur Daten mit einem Parameter abrufen. Kann ich dies mit Makro tun, wie wir für die Auswahl von Blattdaten mit Abfragen

Bitte schlagen Sie vor ??

Edit: Ich habe die oben genannten mit this berechnet. Jetzt nenne ich dieses Makro auf Blatt Änderungsereignis wie unten

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 41 Or Target.Column = 43 Or Target.Column = 45 Or Target.Column = 46 Then 
Dim i As Currency 
i = Calculate_CorePrice(cell(Target.Row, 46).Value, cell(Target.Row, 45).Value, cell(Target.Row, 41).Value, cell(Target.Row, 43).Value, "RWJ Doorset Schedule", "ED15") 
cell(Target.Row, 134).Value = i 
End If 

End Sub 

wenn ich debuggen die Funktion selbst mit hartcodierte Werte, es funktioniert, aber wenn ich die Funktion wie im obigen Weise nennen, ist es nicht Wert zurück und ich bin nicht in der Lage, das Ereignis blech_change zu debuggen.

Wie kann ich dieses Ereignis debuggen.

Antwort

1

Am besten wäre es, die Daten mit einer if-Anweisung zu durchlaufen, um die Datentabellen zu überprüfen. (Dies in einem Unter oder in einer Funktion gesetzt werden könnte, je nachdem, wie Sie die Daten wollen abgerufen werden)

Function GetPrice(Type As String, Thickness As Integer, Width As Integer, Height As Integer) 

Dim ItemRow As Range, SearchColumn As Range 
'Dim Price As Double 'Use variable if this were a sub 
Set SearchColumn = Range(Cells(2,1),Cells(ActiveSheet.UsedRange.rows.count,1)) 
For Each ItemRow In SearchColumn 
    If ItemRow.Value = Type AND ItemRow.Offset(0,1).Value >= Thickness AND ItemRow.Offset(0,2).Value >= Width AND ItemRow.Offset(0,3).Value >= Height AND ItemRow.Offset(-1,1).Value < Thickness AND ItemRow.Offset(-1,2).Value < Width AND ItemRow.Offset(-1,3).Value < Height Then 
     'Price = ItemRow.Offset(0,4).Value 
     GetPrice = ItemRow.Offset(0,4).Value 
     Exit For 
    End If 
Next ItemRow 

End Function 

Edit: Da Sie Ihre Anmerkung an eine andere Antwort, habe ich den Code angepasst, um den Wert zu finden, wie Ich glaube, Sie suchen nach

+0

@Vikky Ich denke, wir haben Probleme zu verstehen, wie Ihre Daten strukturiert sind. Ich bin vertraut mit SQL, so können Sie es in diesen Begriffen erklären, wenn das für Sie einfacher ist – RGA

+0

Ich habe eine Lookup-Tabelle in Excel erstellt, mit der gleichen Struktur in Frage. Ich muss den Preis basierend auf Höhe, Breite, Dicke und Typ finden. Angenommen, jemand kauft ein Material mit einer Dicke von 11, einer Breite von 13 und einer Höhe von 15, ist der geeignete Preis 26.Die in der Tabelle genannten Werte sind minimale/maximale Größe. – Vikky

3

Angenommen, Ihre Spalten sind A, B, C, etc. Sie können eine Index/Match-Formel als Array (geben Sie mit STRG + UMSCHALT + EINGABETASTE).

Wenn der Benutzer die Art eingibt, Dicke, Breite und Höhe in W1, X1, Y1 und Z1, können Sie verwenden:

=Index($E$2:$E$10,Match(W1&X1&Y1&Z1,$A$2:$A$10&$B$2:$B$10&$C$2:$C$10&$D$2:$D$10,0))

Es gewunden ist, aber im Grunde das Match Teil ist, dass Sie sind für W1 im Bereich A2:A10 suchen, dann was auch immer in X1 ist, werden Sie B2:B10 usw.

+1

Schön! Da Sie nach genauen Werten suchen, ist möglicherweise auch 'IFERROR()' hilfreich. – Brian

+0

ist nicht gleichzusetzen, sondern muss weniger als das Konzept für die Breite, Höhe und Dicke für den Preis verwenden. zum Beispiel Dicke 11, Breite 13 und Höhe 15 Preis wird 26 – Vikky

+0

@Vikky - Was ist, wenn die Dicke 11 ist, ist die Breite 14, ist die Höhe 9? Muss * jede * Variable nach "weniger als" suchen? – BruceWayne

1

Suche Es scheint, ich bin nur ab es spät mit meiner Antwort und @BruceWayne schlug mich dazu. Trotzdem werde ich meine Lösung als auch hinzufügen, da es eine nette kleine Illustration zu ihm:

enter image description here

Grundsätzlich ist es der gleiche Vorschlag bereits vorgeschlagen wurde. Verwenden Sie einfach eine Matrixformel und das Zeichen &, um alle Kriterien zu einem zu kombinieren. Am Ende wird ein Kriterium wie folgt aussehen: iron101015 (zum Beispiel). Und es wird mit allen Kombinationen in der Tabelle verglichen.

+0

es geht nicht darum zu vergleichen, es ist in einem bestimmten Bereich zu finden, zum Beispiel Dicke 11, Breite 13 und Höhe 15 Preis wird 26 sein. – Vikky

+0

Und was wäre der Preis für Dicke 3, Breite 10 und Höhe 18? Was ist mit dieser Formel stattdessen: '{= INDEX (Tabelle1 [Preis]; MATCH (B7 * 1000000 + C7 * 1000 + D7; Tabelle1 [Dicke] * 1000000 + Tabelle1 [Breite] * 1000 + Tabelle1 [Höhe]; 1)) } ' – Ralph

Verwandte Themen