使用数组来填充相邻的单元格

我有一个工作表,每个其他列填充数字1-9,从不同的行开始。 我编写了以下子文件,在每列中填充的单元格右侧的单元格中填充“Test [number]”。

我遇到了两个不同的问题,我只是无法弄清楚。 请参阅下面的示例之前和之后的截图。

1.列H的值从第1行开始,但代码从第2行开始填充

2.由此产生的“testing[编号]”单元格都没有通过第9行

码:

Sub test() Dim i As Long Dim j As Long Dim c As Long Dim r As Long Dim rng As Range Dim crng As Range Dim carr() As Variant Dim rarr() As Variant With ThisWorkbook.ActiveSheet c = .Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column For j = 1 To c If Not Columns(j).Find(what:="*", after:=Columns(j).Cells(1, 1), LookIn:=xlValues) Is Nothing And Columns(j).Find(what:="test", after:=Columns(j).Cells(1, 1), LookIn:=xlValues) Is Nothing Then r = Columns(j).Find(what:="*", after:=Columns(j).Cells(1, 1), LookIn:=xlValues).Row Set rng = .Range(.Cells(r, j), .Cells(.Rows.Count, j).End(xlUp)) rarr = rng.Value For i = r To UBound(rarr, 1) Cells(i, j + 1).Value = "test " & (i - r) + 1 Next i End If Next j End With End Sub 

之前: 在这里输入图像说明

后: 在这里输入图像说明

预期结果: 在这里输入图像说明

我在代码中使用数组相当新,所以如果我的方法closures,我不会感到惊讶。 这就是说,我很难过,当rng = .Range(.Cells(r, j), .Cells(.Rows.Count, j).End(xlUp))时, UBound(rarr,1) .Range(.Cells(r, j), .Cells(.Rows.Count, j).End(xlUp))

任何帮助或build议表示赞赏。

谢谢

列H从第2行开始,因为您要求Range.Find方法在以下位置启动after:=Columns(j).Cells(1, 1) 。 我已经改变了在列中的最后一个单元格之后开始,以便它回到顶部。

UBound(rarr,1)是数组的上边界。 LBound和UBound函数返回下边界和上边界或数组。 这是' rng内的位置,而不是工作表上的实际行。

 Sub test() Dim i As Long Dim j As Long Dim lc As Long Dim lr As Long Dim r As Long Dim rng As Range Dim crng As Range Dim carr() As Variant Dim rarr() As Variant With ThisWorkbook.ActiveSheet lc = .Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column lr = .Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row For j = 2 To lc Step 2 If CBool(Application.CountA(.Columns(j))) Then r = .Columns(j).Find(what:="*", after:=.Cells(lr, j), LookIn:=xlValues).Row Set rng = .Range(.Cells(r, j), .Cells(.Rows.Count, j).End(xlUp)) rarr = rng.Value For i = LBound(rarr, 1) To UBound(rarr, 1) .Cells(i + (r - 1), j + 1).Value = "test " & i Next i End If Next j End With End Sub 

虽然您已经实现了With … End With语句 ,但在整个代码中并未使用它来表示父级工作表。 每个Range.Cells , Range对象和Range.Columns都必须使用前缀. 以inheritance.Parent工作表的property.reference。

作为所有这些常数(数字),我build议让Excel为我们工作…

  Option Explicit Sub test() With ActiveSheet.Cells.SpecialCells(xlCellTypeConstants).Offset(, 1) .FormulaR1C1 = "=CONCATENATE(" & """" & "test" & """" & "&" & "COUNT(R1C[-1]:RC[-1]))" .Value = .Value End With End Sub