2017-08-15 4 views
1

Voici ce que je suis en train d'accomplir, j'ai deux feuilles:multiple recherche et retour colonne valeur correspondante dans la colonne suivante (valeur la plus proche)

Fiche de référence: Click to see the image

Code  Length  Width  Height 

A   78   48  25  
B   78   48  34 
C   12   7.4  5 
D   12   15   5 
E   12   15  7.5 
F   12   15   9 
G   24   15   5 
H   24   15   7 

Solution Sheet:

Click to see solution example

Length Width Height Returning Code Match_L Match_W Match_H 

10  6  8   C    12  7.4  5 

La formule dans la colonne « retour Code » devrait chercher la valeur la plus proche dans la correspondante Feuille de référence à savoir, Longueur < -> Longueur, largeur < -> Largeur, Hauteur < -> Taille et renvoie le "Code" correspondant de la ligne correspondante.

Il aurait été plus simple si je voulais l'apparier lorsque les valeurs sont égales mais dans mon cas, il cherchera la valeur la plus proche (plus ou moins) dans chacune des colonnes correspondantes et retournera la correspondance " Code "et les valeurs des colonnes Match_L, Match_W, Match_H.

Toute aide ou pointeur sont très appréciés!

+0

Qu'avez-vous déjà essayé, et où cela a-t-il échoué? Êtes-vous à la recherche d'une solution en VBA? Si oui, quel code avez-vous déjà? La différence dans l'une ou l'autre direction est-elle traitée de la même manière, comme une différence absolue, ou peut-elle même être différente? – Luuklag

+0

Vous avez deux feuilles, dans cette feuille, vous allez entrer 'ReturningCode' et les valeurs restantes seront automatiquement remplies à partir d'une autre feuille. est ce bien? S'il vous plaît expliquer un peu plus, quelle est l'entrée et quelle sera la sortie attendue. –

+0

@MIdrees Je vais entrer la longueur, la largeur et la hauteur et il devrait retourner "Code". Dans l'exemple, j'ai entré L = 10, W = 6, H = 8 et les valeurs correspondantes les plus proches sont en "C" avec L = 12, = 7.4 et H = 5. Les trois valeurs doivent correspondre! –

Répondre

0

Après VBA faire emploi.

Sub LookupNearestValue() 

    Dim ws As Worksheet: Set ws = Worksheets("Sheet1") 
    Dim LastRow As Long: LastRow = ws.UsedRange.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    Dim i As Long, RowCounter As Long: RowCounter = 2 

    Dim tRowCounter As Long 
    Dim tValue As Long 
    Dim tempValue As Long 

    Dim tLength As Long, tWidth As Long, tHeight As Long 
    Dim tempLength As Long, tempWidth As Long, tempHeight As Long 

    tLength = ws.Cells(2, 6) 
    tWidth = ws.Cells(2, 7).Value 
    tHeight = ws.Cells(2, 8).Value 

    With ws 
     For i = 2 To LastRow 

      tempLength = ws.Cells(RowCounter, 2) 
      tempWidth = ws.Cells(RowCounter, 3).Value 
      tempHeight = ws.Cells(RowCounter, 4).Value 

      tempValue = Abs(tLength - tempLength) + Abs(tWidth - tempWidth) + Abs(tHeight - tempHeight) 

      If RowCounter = 2 Then 
       tValue = tempValue 
       tRowCounter = RowCounter 
      ElseIf RowCounter > 2 And tempValue < tValue Then 
       tValue = tempValue 
       tRowCounter = RowCounter 
      End If 

      RowCounter = RowCounter + 1 
     Next i 

     ws.Cells(2, 9) = ws.Cells(tRowCounter, 1) 
     ws.Cells(2, 10) = ws.Cells(tRowCounter, 2) 
     ws.Cells(2, 11) = ws.Cells(tRowCounter, 3).Value 
     ws.Cells(2, 12) = ws.Cells(tRowCounter, 4).Value 


    End With 

End Sub 

Pour faire ce travail macro, vous devez disposer de données sur la feuille selon ces arrangement colonnes:

enter image description here

Dans ma feuille, j'ai configuré pour exécuter cette macro sur l'événement valeur de changement dans H2 cellule.

+0

Merci @M_Idrees Cela aide beaucoup! –

+0

Bienvenue, heureux que ça aide. –

1

Si l'on suppose qu'il y a seulement un endroit unique pour entrer dans la longueur souhaitée, la largeur et la hauteur, et donc une seule valeur renvoyée au maximum:

Dans votre feuille de référence ajouter trois colonnes de E à G: length_difwidth_dif et height_dif.

La formule pour ces colonnes sera dans la cellule E2: =ABS(B2-SolutionSheet!A$2) puis étendez-la à G2 et réduisez-la jusqu'à la fin de votre table de solution.

Ajouter une autre colonne dans votre feuille de référence en H: dif_abs avec la formule: =Sum(E2:G2)

ensuite retourner votre valeur ajouter la formule suivante dans votre SolutionSheet dans la cellule D2: =Index(ReferenceSheet!$A$2:$H$9;MATCH(Min(ReferenceSheet!$H$2:$H$9);ReferenceSheet!$H$2:$H$9);1)