2

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

(1,1) = "1"

(2,1) = 空

(3,1) = "2"

(4,1) = 空

(5,1) = "3"

(6,1) = 空

(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

我哪里错了?

4

3 回答 3

0

尝试:

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

    Set oRange = ThisWorkbook.Worksheets(1).UsedRange

    For lCount = 1 To oRange.Rows.Count
        oRange.Cells(lCount, 1).Value = oRange.Cells(lCount, 1).Row
    Next
End Sub
于 2013-10-01T02:13:30.267 回答
0

我是这样理解您的担忧的:

Option Explicit

Sub IterateAndWrite()
    Dim oRange As Range
    Dim oRow, range_to_write As Range

    Set oRange = ThisWorkbook.Worksheets(1).UsedRange

    'you need to set the range where you want to write as in below
    Set range_to_write = oRange.Offset(, -1).Resize(, 1)

    'here instead of rows, use cells since you are to iterate cells
    For Each oRow In range_to_write.Cells 
        oRow.Value = oRow.Row 'oRow is now a range pertaining to a Cell
    Next oRow

End Sub

希望这是你需要的。

于 2013-10-01T02:43:09.307 回答
0

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

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

或者,这也应该有效:

oRow.Cells(1,1).Value = oRow.Row

为什么?

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

例如,Range("B2").Cells(2,1)is 等价于Range("B2").Offset(1,0)which is 等价于Range("B3"), 所以,通过使用行本身之外的行索引,你会导致它“跳到”下一行:)

通过 Chip Pearson 的网站可以了解更多信息:

为了以这种方式引用,单元格不必在范围内。...没有记录的是这种引用方法在工作表中继续存在;例如,Range("A1:B2")(5) 指的是单元格 A3,Range("A1:B2")(14) 指的​​是单元格 B7,等等。

于 2013-10-01T03:49:18.697 回答