2010-08-13 5 views
1

Je veux compter aucune des différentes cellules qui sont sélectionnées en utilisant VBA. Considérons si nous sélectionnons cinq cellules distinctes - D5, C2, E7, A4, B1Nombre de cellules différentes dans VBA

Existe-t-il un moyen de comptabiliser ce nombre de cellules?

Deuxièmement comment puis-je récupérer des données dans ces cellules. Disons que je veux le stocker dans un tableau.

Merci pour votre aide.

Répondre

3
Dim rngCell as Range, arrArray() as Variant, i as integer 

Redim arrArray(1 to Selection.Cells.Count) 

i = 1 
For each rngCell in Selection 

    arrArray(i) = rngCell.Value 
    i = i + 1 

Next 
+0

Merci pour l'aide. Le code fonctionne exactement comme je le voulais. – Aniruddha

+0

@Aniruddha - Heureux de vous aider. Merci pour la confirmation sur la réponse. – variant

0

Heureusement j'ai eu un moyen de contourner cela en faisant - Selection.Cells.Count

Il me renvoie le nombre de cellules pour les cellules sélectionnées.

Mais je suis toujours bloqué avec affectation dynamique de cette valeur à un tableau comme dans ---

I = Selection.Cells.Count Dim ValArr(I)

+0

ce code fonctionne – Aniruddha

1

On dirait que vous l'avez deviné la plupart du temps, mais voici quelque chose à charger dans un tableau si vous le voulez:

Public Sub Example() 
    Dim test() As Variant 
    test = RangeToArray(Excel.Selection, True) 
    MsgBox Join(test, vbNewLine) 
End Sub 

Public Function RangeToArray(ByVal rng As Excel.Range, Optional ByVal skipBlank As Boolean = False) As Variant() 
    Dim rtnVal() As Variant 
    Dim i As Long, cll As Excel.Range 
    ReDim rtnVal(rng.Cells.Count - 1) 
    If skipBlank Then 
     For Each cll In rng.Cells 
      If LenB(cll.Value) Then 
       rtnVal(i) = cll.Value 
       i = i + 1 
      End If 
     Next 
     ReDim Preserve rtnVal(i - 1) 
    Else 
     For Each cll In rng.Cells 
      rtnVal(i) = cll.Value 
      i = i + 1 
     Next 
    End If 
    RangeToArray = rtnVal 
End Function 
Questions connexes