我经常使用Excel表格。它使得在一个工作表中拥有多个表成为可能。但是我在VBA遇到了一个我不知道如何解决的问题。
我们假设我的电子表格中有一个名为“tbl”的表格。它包含以下数据:
id value
1 1000
1 2000
2 3000
2 4000
我有以下代码可以使用:
Sub test()
Dim rng As Range
Dim arr() As Variant
Set rng = ActiveSheet.ListObjects("tbl").DataBodyRange
arr = rng.Value
End Sub
此代码将整个表格放入arr
。但有些情况下我只想要表中的某些行。让我们说我想要第4行和第5行,即:
2 3000
2 4000
以下代码可以解决问题:
arr = Range("A4:B5")
但有些情况下,我的电子表格中有很多位于不同位置的表格。因此,我需要找出表中第一个单元格所在的位置(左上角)。如果它位于K1,我需要同时获取列和行(K和1)。
有一种简单的方法吗?
答案 0 :(得分:7)
使用Cells():
Sub test()
Dim rng As Range
Dim arr() As Variant
Set rng = ActiveSheet.ListObjects("tbl").DataBodyRange
arr = ActiveSheet.Range(rng.Cells(3, 1), rng.Cells(4, 2)).Value
End Sub
答案 1 :(得分:3)
如果您只想要第三和第四行数据(如果计算标题行,则为第四和第五行),您可以使用
Sub test()
Dim rng As Range
Dim arr() As Variant
Set rng = ActiveSheet.ListObjects("tbl").DataBodyRange
arr = rng.Rows("3:4").Value
'or
arr = rng.Range("A3:B4").Value
End Sub
由于Rows
和Range
属性正在应用于rng
对象,因此引用("3:4"
和"A3:B4"
)相对于rng
对象。
因此,您还可以使用rng
(或rng.Range("A1").Address
)获取rng.Cells(1, 1).Address
中第一个单元格的工作表地址,或者您可以获取第一个单元格的工作表行和列分别只使用rng.Row
和rng.Column
(它们都默认返回第一个单元格的值)。
答案 2 :(得分:1)
表格中的第一个单元格具有一些独特的属性:
- 它不是空的
- 它上面的单元格为空
- 它左边的单元格为空
- 它下面的单元格不为空
使用这些属性可以执行以下操作:
1)遍历每个单元格
2)如果该单元具有上述属性,则它是“左上角”单元格
3)对那张桌子做任何事情