Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用多个恒定条件VBA执行循环_Excel_Vba_Loops - Fatal编程技术网

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开始将它们写入固定目标
在这两种情况下,您都可以预先填充数组,并将其写入A列中定义的目标。在数组中循环具有一些速度优势,而通过VBA在范围中循环可能会很耗时

根据总范围大小的不同,@jacklebson所示的整个块的直接(未测试)复制可以改善这种行为

案例1

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