excel表中

时间:2018-01-03 20:39:29

标签: excel vba

我经常使用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)。

有一种简单的方法吗?

3 个答案:

答案 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

由于RowsRange属性正在应用于rng对象,因此引用("3:4""A3:B4")相对于rng对象。

因此,您还可以使用rng(或rng.Range("A1").Address)获取rng.Cells(1, 1).Address中第一个单元格的工作表地址,或者您可以获取第一个单元格的工作表行和列分别只使用rng.Rowrng.Column(它们都默认返回第一个单元格的值)。

答案 2 :(得分:1)

表格中的第一个单元格具有一些独特的属性:

- 它不是空的

- 它上面的单元格为空

- 它左边的单元格为空

- 它下面的单元格不为空

使用这些属性可以执行以下操作:

1)遍历每个单元格

2)如果该单元具有上述属性,则它是“左上角”单元格

3)对那张桌子做任何事情