1

我有一个名为 Shipper VP 的源 Excel 表。Shipper VP 的 B4、C4、D4 单元格中有三个人的姓名,列中有相应的数据。我正在为每个人提取他们的数据,并为每个人创建单独的 Excel 选项卡并将其重命名为各自的名称。另外还有很多其他的计算。这是代码:(一切正常)

Sub Test()
    Dim wsSource As Worksheet, ws As Worksheet
    Dim rg As Range, c As Range
    Dim n As Integer 

    Set wsSource = Sheets("Shipper VP")
    Set rg = wsSource.Range("B4:D4")
    n = 1
    For Each c In rg
         'add sheet and rename
        Set ws = Sheets.Add
        ws.Name = c.Text

         'other calculations
         '...

        n = n + 1
    Next c
End Sub

但是,目前我知道源表(ws.Source)中有三个人,我想为“n”个人循环同样的事情。对于每个人,它从 B4 开始,一直到 C4、D4、E4 等,直到 Source Sheet 中的人数。最后一列是总计,但我只提取上一列的数据,而不是总计列。

现在在上面的代码中,而不是 rg 范围内的 ("B4:D4"),我希望 D4 单元格是一个变量,以便它可以是 Z4 或 AK4 等任何东西。它有三个人,它需要的单元格地址从源表(wsSource)是从B4:D4,如果有10个人,从B4:K4。如果再次有 100 人,它将变为 B4:x4,其中 x 将是源 excel 表 (wsSource) 的第 (100+1) 列。

我无法将此变量传递给以下代码: Set rg = wsSource.Range("B4:D4")

所以,如果源表中有“n”个人(我可能不知道人数)应该怎么办,应该有一个变量检查​​直到从 B4 开始的单元格值为空,然后在下一个代码它应该自动设置 rg = wsSource.Range(“B4:x4”) 的范围,其中 x 是第 (100+1) 列。

但是在三个人搜索的时候,会在源表(Shipper VP)的F4列而不是E4列得到空值,因为人的名字是从B4到D4,所以多了一个E4 中的总计列。但是在 rg 的范围内,我只想要从 B4 到 D4 而不是直到 E4 列。对源表中的“n”个人也要做同样的事情。

如果 B4 也是一个变量,那么它就像 'y' 之类的要好得多。然后我可以将'y'设置为 B4 作为起始单元格编号。之后,它将从 B4 循环到源工作表(ws.Source)中第 4 行的倒数第二列值,因为第 4 行的最后一列值将是总计。

如果有人可以帮助我,我将不胜感激。

谢谢。问候,蘸

4

1 回答 1

4

您可以修改代码以使用基于单元格编号而不是其字母参考的范围,并使用以下代码获取倒数第二列。

Sub Test()
    Dim first As Long
    Dim last As Long
    Dim row As Long
    Dim wsSource As Worksheet, ws As Worksheet
    Dim rg As Range, c As Range
    Dim n As Integer 

    Set wsSource = Sheets("Shipper VP")
    first = 2
    row = 4

    With wsSource
        ' This returns the last column with data.  There could be empty cells along the way.
        'You could look into converting the column reference into the letter so that you could use a string in the range such as "B4:E4"
        last = .Cells(row, .Columns.Count).End(-4159).Column - 1 'xlToLeft
    End With

    Set rg = wsSource.Range(Cells(row, first), Cells(row, last))

    n = 1
    For Each c In rg
         'add sheet and rename
        Set ws = Sheets.Add
        ws.Name = c.Text

         'other calculations
         '...

        n = n + 1
    Next c
End Sub
于 2013-06-07T17:33:17.267 回答