我需要按照以下方式扩展数组。 搜索了答案,但似乎没有任何帮助,如下面的代码。
Sub MakeOneColumn()
Dim vaCells As Variant
Dim vOutput() As Variant
Dim i As Long, j As Long
Dim lRow As Long
If TypeName(Selection) = "Range" Then
If Selection.Count > 1 Then
If Selection.Count <= Selection.Parent.Rows.Count Then
vaCells = Selection.Value
ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1)
For j = LBound(vaCells, 2) To UBound(vaCells, 2)
For i = LBound(vaCells, 1) To UBound(vaCells, 1)
If Len(vaCells(i, j)) > 0 Then
lRow = lRow + 1
vOutput(lRow, 1) = vaCells(i, j)
End If
Next i
lRow = lRow + 1
Next j
Selection.ClearContents
Selection.Cells(1).Resize(lRow).Value = vOutput
End If
End If
End If
End Sub
上面的代码没有添加行“lRow = lRow + 1”。但是,我需要为数组中的每一列添加一个空行。使用添加的行,我得到运行时错误9,下标超出范围。
答案 0 :(得分:1)
请将您的redim声明更改为
ReDim vOutput(1 To (UBound(vaCells, 1) * UBound(vaCells, 2)) + UBound(vaCells, 2), 1 To 1)
答案 1 :(得分:0)
您收到错误是因为您正在迭代lrow两次,一次在i
循环中,一次在j
循环中。如果检查,您应该发现只有在选择中的所有单元格中都有值时才会出现错误。
修复在j和i循环之外设置lrow
的初始值,然后在之后迭代,将当前单元格的值赋值给vOutput
。它看起来像这样:
lRow = 1
For j = LBound(vaCells, 2) To UBound(vaCells, 2)
For i = LBound(vaCells, 1) To UBound(vaCells, 1)
If Len(vaCells(i, j)) > 0 Then
vOutput(lRow, 1) = vaCells(i, j)
lRow = lRow + 1
End If
Next i
Next j
顺便说一句,我会注意到你不需要TypeName
测试,因为选择总是类型为Range。