Excel, en Essayant d'Index, d'un Match, à la recherche de valeurs à l'aide de VBA
Je suis en train de rechercher des valeurs à des cellules de lieux à l'aide de VBA, j'ai cherché sur google et tous sur stackoverflow avant de demander ce parce que je n'arrive pas à le faire fonctionner.
Voici le code que j'essaie de l'utiliser, de noter que budgetcode fait référence à une cellule contenant l'un des codes dans la première colonne et de mo fait référence à une cellule qui contient un nombre (de 1 à 12) ou contient un code court (aaj, 1qtr, 2qtr, 3qtr). Exemple, c'est que je veux tirer de CAO-NS pour le mois de février (2), et je devrais obtenir 5666.40.
Function eBudgetl(budgetcode As String, mo As String)
eBudgetl = Application.WorksheetFunction.Index(Range("Budget!G1:X5000"), _
Application.WorksheetFunction.Match(budgetcode, Range("Budget!B1:B5000"), 0), _
Application.WorksheetFunction.Match(mo, Range("Budget!G1:X1"), 0))
End Function
Voici une partie des données que je souhaite de recherche:
1 2 3 4
CAD-NS I Net Sales 5264.0 5666.4 5614.9 5966.6
COSMAT E Material 6207.5 3660.0 3661.9 3560.9
COSDL E Direct Labor 610.4 105.3 167.1 123.6
CAD-MOIL E Indirect Labor 671.2 163.4 181.6 161.7
CAD-MOSAL E Salary Overhead 601.0 106.0 101.0 101.0
Voici le code dans la cellule qui fonctionne, mais j'ai besoin de le faire en VBA. (La raison pour laquelle j'ai besoin de le faire en vba est parfois le budgetcode contiendra 2+ références séparées par une virgule, et je vais utiliser vba pour les séparer et de se regarder de manière indépendante.)
=INDEX(Budget!$G$1:$X$5000,MATCH($F12,Budget!$B$1:$B$5000,0),MATCH(AN$1,Budget!$G$1:$X$1,0))
J'apprécie toute l'aide beaucoup, j'ai été à ce pour 3 jours maintenant.
Merci,
Enoch
Types
de votre déclaration de fonction. Essayez Function eBudgetl(budgetcode As Variant), mo As Variant)
Oh mon dieu! Je ne peux pas croire que travaillé en! Sérieusement, Chris Neilsen, vous venez de faire ma journée!
Ajouté comme une Réponse, avec quelques explications et quelques conseils
OriginalL'auteur user3566159 | 2014-04-25
Vous devez vous connecter pour publier un commentaire.
La question est la
Function
types de paramètres.Lorsque vous appelez votre Fonction avec
mo
= celluleAN1
, contenant les nombre1
, le type de Fonction il jette à la Chaîne"1"
, qui ne débite pas exisit dans la gammeBudget!$G$1:$X$1
, puisque ceux-ci sont également numéros de.La solution est d'utiliser
Variant
que la fonction paramétrée type.Pour faire la correction de ce type d'erreur est plus facile, essayez de ne pas trop en faire dans une seule ligne de code. Le fractionnement de la ligne en 2 x
Match
fonctions et uneIndex
, vous permettra de voir le deuxième match de retour une erreur.Quelques autres points:
eBudgetl
ne serait pas recalculer automatiquement lorsque l'un quelconque de leurs modifications de données.Application
objet a une version deIndex
etMatch
de sorte que leWorksheetFunction
les appels ne sont pas requisRemaniée en version à démontrer:
Appelé comme
OriginalL'auteur chris neilsen