2017-10-19 188 views
0

比方说,我们有以下阵列:VBA的Excel:单元阵列,包括合并单元格值

Excel array

的第二和第三小区合并在一起。 如何让数组读取第二个值而不是空值?

当前代码:
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
输出:1,2,,4

+0

'范围(3,1).MergeArea.Cells(1,1).Value'工程获得的价值,但我想在阵列把它捡起来自动 – SLT

+0

所以你想要第二个值是空白的,或三个值要返回?你如何使用这个输出? – SJR

+0

我想用列中的值创建一个数组,而不是为每个单元格指定是否合并。 debug.Print只是表明它是否成功完成(调试目的) – SLT

回答

0

我已经解决了这个问题我自己。这适用于我怎么想它的工作:
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

你可以使用一个循环排除打印空白单元格

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

在的地方,我不认为这将有可能让Excel按照你想要的方式阅读(除非你像Matt已经演示的那样使用循环在内存中构建数组)。如果我理解正确,那么你想输出像1,2,2,4。

示例代码使用临时空列得到这样的结果:

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 
相关问题