gpt4 book ai didi

excel - 迭代 Excel 范围时,值每隔一个单元格写入一次

转载 作者:行者123 更新时间:2023-12-04 21:05:57 24 4
gpt4 key购买 nike

我在由.UsedRange() 确定的范围内遍历每一行的“A”列,并将行号写入单元格。我看到的奇怪行为是当行号写入单元格时,连续的行号只写入每隔一个单元格:

(1,1) = "1"

(2,1) = empty

(3,1) = "2"

(4,1) = empty

(5,1) = "3"

(6,1) = empty

(7,1) = "4"

...



工作表有 10 行,在“A”列中有空单元格,在“B”和“C”列的每个单元格中都有一个单词。当我单步执行代码时,我可以看到行数 (oRow.Row) 像我期望的那样连续迭代,但这些值写在其他地方。我尝试重置 .UsedRange() ,如此处所述: http://www.j-walk.com/ss/excel/tips/tip73.htm但结果没有改变。

我正在使用的代码是:
Option Explicit

Sub IterateAndWrite()
Dim oRange As Range
Dim oRow As Range
Dim lCount As Long

Set oRange = ThisWorkbook.Worksheets(1).UsedRange

For Each oRow In oRange.Rows
oRow.Cells(oRow.Row, 1).Value = oRow.Row
' Reset the range
'lCount = ActiveWorkbook.Worksheets(1).UsedRange.Rows.Count
Next oRow
End Sub

我哪里错了?

最佳答案

尝试使用其中一种方法在循环中分配值,从而避免使用索引/计数器变量。

For Each oRow In oRange.Rows 
oRange.Cells(oRow.Row, 1).Value = oRow.Row
Next

或者,这也应该有效:
oRow.Cells(1,1).Value = oRow.Row

为什么?

因为 oRow是表示 Row 的范围对象,例如, $B$1:$C$1等。当您使用 .Cells方法,您传递给它的行参数( oRow.Row )在 oRow 之外对象/范围。当以这种单索引方式使用时,它似乎有点等价于 Offset方法。

例如, Range("B2").Cells(2,1)相当于 Range("B2").Offset(1,0)相当于 Range("B3") ,因此,通过使用行本身之外的行索引,您会导致它“跳”到下一行:)

有一些关于此的更多信息 via Chip Pearson's website :

It is not necessary for the cell to be within the range in order to be referenced this way. ... What is not documented is that this method of referencing continues down the worksheet; e.g., Range("A1:B2")(5) refers to Cell A3, Range("A1:B2")(14) refers to Cell B7, etc.

关于excel - 迭代 Excel 范围时,值每隔一个单元格写入一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106823/

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