excel表中第一个单元格的位置

问题描述 投票:3回答:3

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

是否有捷径可寻?

excel vba
3个回答
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

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得到第一个单元格的工作表行和列(它们都默认返回值为第一个细胞)。


1
投票

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

- 它不是空的

- 它上面的单元格为空

- 它左边的单元格为空

- 它下面的单元格不为空

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

1)循环每个细胞

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

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

© www.soinside.com 2019 - 2024. All rights reserved.