我正在尝试使用 Excel VBA 解析 excel 文件。
这是样本数据
我做了一些研究,发现您可以将范围分配给数组,例如
Arrayname = Range("A1:D200")
但我正在寻找一些更动态的东西,比如将以下多个范围添加到单个数组中。我的最终数组将是一个数组/表,其中 n 是所有范围和 4 列的行数。
谁能给我一个例子。提前谢谢你。
我认为您正在询问有关在范围和变量之间移动数据的更多信息,因此这是我将尝试回答的问题。
创建一个新工作簿。将 Sheet1 留空;将 Sheet2 的单元格 B3 设置为“abc”,并将 Sheet3 的单元格 C4 到 F6 设置为 ="R"&ROW()&"C"&COLUMN()
打开 VB 编辑器,创建一个模块并将以下代码复制到其中。运行宏Demo01()
。
Option Explicit
Sub Demo01()
Dim ColURV As Long
Dim InxWkSht As Long
Dim RowURV As Long
Dim UsedRangeValue As Variant
' For each worksheet in the workbook
For InxWkSht = 1 To Worksheets.Count
With Worksheets(InxWkSht)
Debug.Print .Name
If .UsedRange Is Nothing Then
Debug.Print " Empty sheet"
Else
Debug.Print " Row range: " & .UsedRange.Row & " to " & _
.UsedRange.Row + .UsedRange.Rows.Count - 1
Debug.Print " Col range: " & .UsedRange.Column & " to " & _
.UsedRange.Column + .UsedRange.Columns.Count - 1
End If
UsedRangeValue = .UsedRange.Value
If IsEmpty(UsedRangeValue) Then
Debug.Print " Empty sheet"
ElseIf VarType(UsedRangeValue) > vbArray Then
' More than one cell used
Debug.Print " Values:"
For RowURV = 1 To UBound(UsedRangeValue, 1)
Debug.Print " ";
For ColURV = 1 To UBound(UsedRangeValue, 2)
Debug.Print " " & UsedRangeValue(RowURV, ColURV);
Next
Debug.Print
Next
Else
' Must be single cell worksheet
Debug.Print " Value = " & UsedRangeValue
End If
End With
Next
End Sub
以下将出现在立即窗口中:
Sheet1
Row range: 1 to 1
Col range: 1 to 1
Empty sheet
Sheet2
Row range: 3 to 3
Col range: 2 to 2
Value = abc
Sheet3
Row range: 4 to 6
Col range: 3 to 5
Values:
R4C3 R4C4 R4C5
R5C3 R5C4 R5C5
R6C3 R6C4 R6C5
如果您通过宏工作并研究输出,您将了解如何将范围加载到变体。我特别希望您注意的几点是:
您可能还想查看:https ://stackoverflow.com/a/16607070/973283 。略读宏的解释,这些解释与Demo01()
你Demo02()
无关,但要设置上下文。宏Demo03()
显示了将多个工作表加载到锯齿状数组的高级技术。
现在创建一个新工作表并保留其默认名称Sheet4
.
将以下代码添加到模块中。运行宏Demo02()
。
Sub Demo02()
Dim ColOut As Long
Dim OutputValue() As String
Dim Rng As Range
Dim RowOut As Long
Dim Stg As String
ReDim OutputValue(5 To 10, 3 To 6)
For RowOut = LBound(OutputValue, 1) To UBound(OutputValue, 1)
For ColOut = LBound(OutputValue, 2) To UBound(OutputValue, 2)
OutputValue(RowOut, ColOut) = RowOut + ColOut
Next
Next
With Worksheets("Sheet4")
Set Rng = .Range("A1:D6")
End With
Rng.Value = OutputValue
With Worksheets("Sheet4")
Set Rng = .Range(.Cells(8, 2), .Cells(12, 4))
End With
Rng.Value = OutputValue
With Worksheets("Sheet4")
Stg = "C" & 14 & ":G" & 20
Set Rng = .Range(Stg)
End With
Rng.Value = OutputValue
End Sub
尽管此宏将数组写入工作表,但许多点适用于相反的方向。我特别希望您注意的几点是:
Rng.Value = OutputValue
之外。With ... End With
我希望以上内容能让您对自己的选择有所了解。如果我正确理解您的要求,您将必须:
如果有任何不清楚的地方,请带着问题回来。