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