如何在Excel中自动检测表

时间:2017-11-30 14:25:50

标签: excel excel-vba vba

我有一个包含大约40个表的工作簿。这些表在每个文件中都非常杂乱无章,因此您永远不知道该表在工作表中的位置。在某些工作表中,您可能有2或3个表。此外,这些表非常非结构化,因此您无法知道行索引或列索引的位置。我需要循环遍历所有表格并首先提取数据,然后为每个单元格计算单元格代码,该单元格代码是行索引,col索引和表格标题的组合。

所需的输出应如下所示:表示在表04.03.1中,row005,column010我有数据:132151300

{EF04.03.1,r005,c010}   132151300

我使用VBA和命名范围来做到这一点,但问题是每次收到新文件时,我都要为所有40个表再次定义命名范围。 新文件可能与我已定义的文件具有相同的结构,因此我无法简单地将范围从一个工作簿传输到另一个工作簿。

有关如何自动识别内容然后col索引/行索引的任何建议?还是其他任何解决方法?

1 个答案:

答案 0 :(得分:1)

这是一些代码,用于遍历工作簿中的每个工作表,然后遍历每个表中的每个单元格。消息框提供工作表名称,表格范围,表名称,单元格值,行和列。您没有说明您希望信息的去向,但这样可以获取信息,您只需要决定它的去向并根据您的要求进行格式化。

Sub FindAllTablesinWB()
    Dim oSh As Worksheet
    Dim oLo As ListObject
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    For Each oSh In wb.Worksheets

    For Each oLo In oSh.ListObjects
        For col = 1 To oLo.ListColumns.Count
            For rw = 2 To oLo.ListRows.Count
              MsgBox "Table: " & oSh.Name & ", " & oLo.Range.address & ", " & oLo.Name & ", " & oLo.Range.Cells(rw, col).Value & ", " & "Row " & rw & " Column " & col
            Next rw
        Next col
    Next oLo
    Next oSh
End Sub