尝试使用Excel VBA解析excel文件。
以下是样本sata
我做了一些研究,发现你可以将范围分配给数组,如
Arrayname = Range("A1:D200")
但我正在寻找一些更具动态性的东西,比如将下面的多个范围添加到单个数组中。 我的最后一个数组将是一个数组/表,其中n是所有范围和4列的行数。
任何人都可以给我一个例子。 谢谢你。
答案 0 :(得分:1)
我认为您要求提供有关在范围和变量之间移动数据的更多信息,这是我将尝试回答的问题。
创建新工作簿。将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
并仍将数据写入正确的工作表。我希望上面的内容能让您了解自己的选择。如果我理解您的要求,您将不得不:
如果有什么不清楚,请回答问题。