gpt4 book ai didi

vba - 引用表的 .DataBodyRange 的特定范围

转载 作者:行者123 更新时间:2023-12-02 19:13:56 24 4
gpt4 key购买 nike

假设我有以下示例表

enter image description here

我有一个 for 循环,贯穿整个 ListColumn(2) (C/3 列)并根据谁拥有最多的苹果对“用户”进行排名(例如,迈克尔为 1,罗伯特为 2,等等)

但是,假设我只想引用表格的特定范围
(例如,假设 Range("C7:C9") <=> ListRows(3,4,5) )
我怎样才能做到这一点?

我有以下代码:

    Private Sub CommandButton1_Click()

Dim tbl As ListObject: Set tbl = Sheets("Sheet1").ListObjects("Table1")
Dim my_range As Range

For Each my_range In tbl.ListColumns(2).DataBodyRange
' ^ this runs through entire column instead of the specified range I want!
my_range.Offset(0, 1) = WorksheetFunction.Rank(my_range, tbl.ListColumns(2).DataBodyRange)
' ^ again, isntead of entire DataBodyRange we should be rather referencing the specific Range
Next my_range
End Sub

基本上,我需要以某种方式限制 .DataBodyRange本身进入一个特定的范围,问题是,.DataBodyRange指定为从整个 ListObject 中获取整个列/行或仅 1 个单元格,如 .DataBodyRange([row index], [column index]) .

因此,在选择 Robert、Michael、Laurel ListRows(3, 4, 5) 的假定示例中预期结果是:

enter image description here

有什么建议吗?

最佳答案

我知道我迟到了,但为了后代......

使用.Offset.Resize执行 tbl.Range 中几乎所有操作的方法或tbl.DataBodyRange ...

仅迭代选定的行:

...
Set my_range1 = tbl.Listcolumns(2).DataBodyRange
For LoopControl = StartRow To EndRow
my_range1.Resize(1).Offset(LoopControl - 1).Value2 = 'your code here
'Alternate code
tbl.ListRows(LoopControl).Resize(, 1).Offset(, 2).Value2 = 'your code here
'Or even:
tbl.DataBodyRange.Resize(1, 1).Offset(2, LoopControl).Value2 = 'your code here
Next LoopControl

请注意,您可以使用 .ListColumns("Apples")以防事后重新排列列。另外,您可以.Offset(, tbl.ListColumns("Apples").Index)以适应不断变化的表结构。

或者将行的子集引用为单个范围:

Set my_range = tbl.ListColumns(2).DataBodyRange.Offset(StartRow - 1).Resize(EndRow - StartRow + 1)
'Alternately:
Set my_Range = tbl.ListColumns(2).Range.Offset(StartRow).Resize(EndRow - StartRow + 1)

关于vba - 引用表的 .DataBodyRange 的特定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50410539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com