Excel 使用多个恒定条件VBA执行循环
我试着做一个循环,但我有点卡住了Excel 使用多个恒定条件VBA执行循环,excel,vba,loops,Excel,Vba,Loops,我试着做一个循环,但我有点卡住了 Sub Macro() Range("A392: A401").Value = Range("N2") Range("A402: A411").Value = Range("N3") Range("A412: A421").Value = Range("N4") Range("A422: A431").Value =
Sub Macro()
Range("A392: A401").Value = Range("N2")
Range("A402: A411").Value = Range("N3")
Range("A412: A421").Value = Range("N4")
Range("A422: A431").Value = Range("N5")
....
我需要重复这个逻辑(在A列上为每10行设置一个值),这个值将从N列的1到1,直到它找到一个空行
我不能用这些倍数的条件做循环,你能帮我吗
非常感谢 是操纵范围的好方法。使用它,我们可以自动化范围,以便在每个循环中沿图纸向下移动
Sub宏()
我想我会坚持多久
而量程(“N2”)。偏移量(i)”
'偏移量将使N2每循环向下移动一个
'偏移量将使每个循环上的10个单元格范围下移10
范围(“A392:A401”)。偏移量(i*10)。值=范围(“N2”)。偏移量(i)
i=i+1
温德
端接头
我不太清楚您的实际意图:
- 重复列
N2:N5中的所有值10次,并将整个数据块附加到列A中的第一个空闲单元
- 将N列中的所有非空值重复10次,并从单元格A392开始将它们写入固定目标
Sub Example1()
Const RowsCount As Long = 10
With Sheet1 ' << change to your project's sheet (Code)Name
'get values to repeat & count them
Dim vals: vals = .Range("N2:N5")
Dim cnt As Long: cnt = UBound(vals)
'provide for 1-based 2-dim results array
Dim results
ReDim results(1 To RowsCount * cnt, 1 To 1)
'fill array with repeated values
Dim i As Long, j As Long
For i = 1 To cnt
For j = 1 To RowsCount
results((i - 1) * RowsCount + j, 1) = vals(i, 1)
Next j
Next i
'append above data block
Dim nxtRow As Long
nxtRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & nxtRow).Resize(UBound(results), 1) = results
End With
End Sub
子示例1()
Const ROWSCONT长度=10
对于Sheet1’,您打算将列N
中的每个非空单元格值重复10次,从固定顶部单元格开始A392
?小而易懂的代码。升级为块复制可能是一种有用的方法,但有时会被忽略:+)-你可能也对我的答案感兴趣。@Hector Octavio请允许我说一句话,因为你已经得到了两个答案:在你认为最有用的帖子附近勾选绿色复选标记,接受你的首选答案-c.f。
Sub Example2()
Const RowsCount As Long = 10
With Sheet1 ' << change to your project's sheet (Code)Name
'get values to repeat & count them
Dim lastRow As Long
lastRow = .Range("N" & .Rows.Count).End(xlUp).Row
Dim vals: vals = .Range("N2:N" & lastRow)
Dim ValsCount As Long: ValsCount = UBound(vals)
'provide for 1-based 2-dim results array
Dim results
ReDim results(1 To RowsCount * ValsCount, 1 To 1)
'fill array with repeated values
Dim i As Long, j As Long, ii As Long
For i = 1 To ValsCount
If Len(vals(i, 1)) > 0 Then ' check if non-empty value in column N
ii = ii + 1
For j = 1 To RowsCount
results((ii - 1) * RowsCount + j, 1) = vals(i, 1)
Next j
End If
Next i
'write data block to fixed target starting with A392
.Range("A392").Resize(UBound(results), 1) = results
End With
End Sub