2017-08-02 4 views
1

j'ai une feuille de calcul avec plusieurs plages nommées de dynamiques tels que HR_B1, à HR_B10 etc.utilisant vba dans Excel pour determinine valeur minimale de tableau de plages nommées

Je suis en train de créer une fonction qui va trouver le minimum valeur de toutes les plages sont insérées dans la fonction, à savoir la fonction utilisateur va entrer deux valeurs dans la fonction disons 3 et 6 et il trouvera la valeur minimale sur les plages HR_B3 à HR_B6.

J'ai créé un tableau et une boucle for qui stocke les noms des plages nommées dans le tableau.

Toutefois, je ne peux pas obtenir le code WorksheetFunction.Min pour lire le contenu du tableau en tant que plages nommées et afficher la valeur min.

Mon code est:

Public Function HR_Min_Range(minval As Integer, maxval As Integer) As Variant 

Dim fullrange() As Variant 
Dim total_birds As Integer 
Dim i As Long 

total_birds = (maxval - minval) 

ReDim fullrange(total_birds) 

For i = 0 To total_birds 

fullrange(i) = "HR_B" & (i + minval) 
Next i 

HR_Min_Range = WorksheetFunction.Min(Sheets("HR_Depths").Range(fullrange)) 

End Function 
+0

"Je ne peux pas obtenir le WorksheetFunction.Min" pourquoi? Qu'avez-vous essayé? –

Répondre

0

La syntaxe correcte est comme ceci:

Worksheetfunction.min([named]) 

ou

WorksheetFunction.min(activesheet.range("named")) 

ou

WorksheetFunction.min(tabelle1.Range("named")) 

ou

Worksheetfunction.Min(worksheets("Tabelle1").range("named")) 

ou

Worksheetfunction.Min(tabelle1.[named]) 

ou

Worksheetfunction.Min(worksheets("Tabelle1").[named]) 

Sentez-vous libre de choisir ce :) C'est dans le cas où la feuille est avec la légende et le nom de code Tabelle1 et la plage nommée est nommé named.


En vous cas, vous ne mettez pas fullrange entre parenthèses ou [. Chacune de ces deux options devrait fonctionner.

+0

Salut Jeeped, Votre code fonctionne mais je ne sais pas comment. Pourriez-vous expliquer ce qui se passe dans la boucle? Merci – Timm

+0

La réponse de @Timm - jeeped est ci-dessus. – Vityata

1

Essayez comme,

Option Explicit 

Public Function HR_Min_Range(minval As Integer, maxval As Integer) As Variant 

    Dim i As Long 


    HR_Min_Range = Worksheets("HR_Depths").Range("HR_B" & minval).Cells(1) 

    For i = minval To maxval 
     HR_Min_Range = Application.Min(HR_Min_Range, Worksheets("HR_Depths").Range("HR_B" & i)) 
    Next i 

End Function 
+0

Je pense que j'ai le code de Jeeped. Dans la boucle, application.min ajoute un nouvel argument à utiliser pour chaque plage nommée, donc s'il y a 5 plages nommées, elle exécute application.min avec 5 arguments. Est-ce exact? – Timm

+0

Oui, compte tenu de votre exemple, cela trouverait les valeurs minimales des plages nommées HR_B3, HR_B4, HR_B5 et HR_B6. – Jeeped

+0

Je crois que je comprends maintenant. Il n'y a que deux arguments dans l'application.min, le premier est fixe et le second augmente à chaque boucle en ajoutant une plage nommée supplémentaire à la zone globale que l'application.min regarde. Merci – Timm