2017-10-19 8 views
0

Disons que nous avons le tableau suivant:VBA Excel: Tableau de cellules, y compris les valeurs des cellules fusionnées

Excel array

Les deuxième et troisième cellules sont fusionnées. Comment faire un tableau pour lire la troisième valeur comme 2 au lieu de vide?

Code actuel:
Sub arrayTest() Dim rng As Range Set rng = Range(Cells(1, 1), Cells(4, 1)) Debug.Print rng(1) & "," & rng(2) & "," & rng(3) & "," & rng(4) End Sub
Sortie: 1,2,,4

+0

'Range (3,1) .MergeArea.Cells (1,1) .Value' fonctionne pour obtenir la valeur, mais je veux que le tableau le prenne automatiquement – SLT

+0

Vous voulez donc que la deuxième valeur soit vide ou que trois valeurs soient renvoyées? Comment utilisez-vous cette sortie? – SJR

+0

Je veux faire un tableau avec des valeurs d'une colonne, sans spécifier pour chaque cellule si elle est fusionnée ou non. Le debug.Print est juste pour indiquer si cela est fait avec succès (à des fins de débogage) – SLT

Répondre

0

J'ai résolu la question moi-même. Cela fonctionne pour comment je voulais que cela fonctionne:
Sub arrayTest2() Dim LastRow As Long With Worksheets(1) LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row End With Dim rng As Range Set rng = Range("A1:A" & LastRow) Dim cellA As Range Dim arrayA() As Variant ReDim arrayA(LastRow)
For Each cellA In rng arrayA(cellA.Row) = cellA.MergeArea(Cells(1, 1).Value) Debug.Print arrayA(cellA.Row) Next cellA End Sub

0

Vous pouvez exclure les cellules vides de l'impression en utilisant une boucle

Dim i As Integer 

Sub arrayTest() 
Dim rng As Range 
    Set rng = Range(Cells(1, 1), Cells(4, 2)) 
    For i = 0 To 4 
     If Not IsEmpty(rng(i)) Then 
      Debug.Print rng(i) 
     End If 
    Next 
End Sub 
0

A la place, je ne pense pas qu'il sera possible de faites lire Excel comme vous le voulez (sauf si vous construisez un tableau en mémoire en utilisant une boucle comme Matt l'a démontré). Si j'ai bien compris alors vous voulez une sortie comme 1,2,2,4.

Exemple de code pour obtenir ce résultat en utilisant une colonne vide temporaire:

Sub ArrayTest2() 
    Const tmpCol As Long = 2 '\\ Change this to suit. This will be your temporary column 
    Dim rngIn As Range, rngOut As Range 
    Set rngIn = Range(Cells(1, 1), Cells(4, 1)) 
    rngIn.Copy Cells(1, tmpCol) 
    Set rngOut = Cells(1, tmpCol).Resize(rngIn.Count, 1) 
    With rngOut 
     .UnMerge 
     If .SpecialCells(xlCellTypeBlanks).Count > 0 Then .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C" 
     .Value = .Value 
    End With 
    Debug.Print rngOut(1) & "," & rngOut(2) & "," & rngOut(3) & "," & rngOut(4) 
    Cells(1, tmpCol).EntireColumn.Delete 
    End Sub