Vba 使用数组填充相邻单元格

Vba 使用数组填充相邻单元格,vba,excel,Vba,Excel,我有一个工作表,每隔一列填充数字1-9,从不同的行开始。我编写了下面的子部分来填充每列中填充的单元格右侧的单元格中的“Test[number]” 我遇到了两个不同的问题,我就是搞不清楚。请参见下面的屏幕截图了解前后示例 1。H列的值从第1行开始,但代码从第2行开始填充 2。生成的“Test[number]”单元格没有一个超过第9行 代码: 之前: 之后: 预期结果: 我对在代码中使用数组非常陌生,所以如果我的方法被禁用,我也不会感到惊讶。尽管如此,我还是很困惑,UBound(rarr,1)

我有一个工作表,每隔一列填充数字1-9,从不同的行开始。我编写了下面的子部分来填充每列中填充的单元格右侧的单元格中的“Test[number]”

我遇到了两个不同的问题,我就是搞不清楚。请参见下面的屏幕截图了解前后示例

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

2。生成的“Test[number]”单元格没有一个超过第9行

代码:

之前:

之后:

预期结果:

我对在代码中使用数组非常陌生,所以如果我的方法被禁用,我也不会感到惊讶。尽管如此,我还是很困惑,
UBound(rarr,1)
rng
=
.Range(.Cells(r,j),.Cells(.Rows.Count,j).End(xlUp))时没有返回最后一个单元格

任何帮助或建议都将不胜感激


感谢

第2行中的H列开始,因为您要求在:=列(j)之后开始
。单元格(1,1)
。我将其更改为在列中最后一个单元格之后开始,以便它循环回到顶部

UBound(rarr,1)
是数组的上边界。and函数返回下边界和上边界或数组。它是“工作表中的位置”
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
虽然您已经实现了,但在整个代码中没有使用它来表示父工作表。每个和都必须使用前缀
,以继承工作表属性。参考。

由于所有这些常量(数字),我建议让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

这正是我想做的。谢谢你的详细解释
    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