Excel / VBA - Index Correspondent à la fonction à l'aide de Plages Dynamiques
Comment utiliser efficacement une Index/Match
formule en VBA?
Contexte: j'ai une feuille de calcul qui s'appuie fortement sur l'utilisation d'une formule qui récupère une sortie basée sur la correspondance d'un nom spécifique à son nom et une date précise pour sa plage de dates.
=INDEX(OutputRange,MATCH(1,(Name=NameRange)*(Date=DateRange),FALSE),1)
En outre, il est codé en dur VBA sous qui produit le même résultat
Sub ExampleHardCode()
Dim Result As Variant
Result = Evaluate("INDEX($C$4:$C$13,MATCH(1,($G$6=$A$4:$A$13)*($G8=$B$4:$B$13),FALSE),1)")
ActiveCell.Value = Result
End Sub
Question: j'aimerais produire une fonction qui renvoie le même résultat que les options ci-dessus, mais permet à l'utilisateur de (i), sélectionnez le Nom et les valeurs de Date en référençant les cellules respectives et (ii) sélectionner chaque plage (plage de nom, intervalle de date et de la plage de sortie). Essentiellement à l'aide de =examplefunction(valeur de nom, le nom de la gamme, la date de valeur, date de plage, plage de sortie) dans excel.
J'ai essayé plusieurs solutions mais sans succès. Ci-dessous est un exemple de ce que j'ai essayé jusqu'à présent, je pense qu'il y a un problème avec le match de la partie, même quand j'essaie de définir les plages (avec codé en dur plages), il renvoie une erreur.
Function TestIndexMatch1(NameVal As Variant, DateVal As Date)
Dim NameRng As Range
Dim DateRng As Range
Dim OutputRng As Range
Dim Var1 As Variant 'should this be a range or integer?
Dim Result As Variant
Set NameRng = Range("$A$4:$A$13")
Set DateRng = Range("$B$4:$B$13")
Set OutputRng = Range("$C$4:$D$13")
With Application.WorksheetFunction
Var1 = .Match(1, (NameVal = NameRng) * (DateVal = DateRng), False)
Result = .Index(OutputRng, Var1, 1)
End With
End Function
J'ai un exemple de classeur si ça aide, je peux partager. Je ne sais pas si c'est très faisable, mais si oui il faudrait vraiment aider beaucoup d'utilisateurs qui ne sont pas assez familiers avec excel à utiliser l'index/match excel formule correctement. Malheureusement pour moi, mes compétences sur excel dépasse de loin mes VBA compétences.
Vous devez vous connecter pour publier un commentaire.
À utiliser les formules de tableau dans le code VBA ensemble ReferenceStyle pour objet Application pour xlR1C1 (temporairement, seulement lors de votre fonction est exécutée). Enfin appel Évaluer pour obtenir le résultat de la formule.
Et donc il regarde sur la feuille: