代码之家  ›  专栏  ›  技术社区  ›  Akshay Kumar

在Vba中增加For循环中的变量?

  •  0
  • Akshay Kumar  · 技术社区  · 7 年前

    This is the input table for which I want to perform some action #

    Public Sub mac()
    
      Dim RangeOfChild As Range
    
     For i = 1 To 10000
     ActiveCell.Range("A" & i).Activate
    
     Dim DirArray As Variant
    
     Dim temp As Variant
    
     Set RangeOfChild = Range(ActiveCell.Offset(0, 1),ActiveCell.End(xlToRight))
     childCount = RangeOfChild.count
     temp = ActiveCell.Value
     ActiveCell = Null
    
     DirArray = RangeOfChild.Value
     RangeOfChild.ClearContents
    
     ActiveCell.EntireRow.Resize(childCount - 1).Insert Shift:=xlDown
     ActiveCell.Value = temp
    
     Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(RangeOfChild.count - 1, 1)) = Application.Transpose(Array(DirArray))
    
     i = i + (childCount)
    
    Next i
    
    End Sub
    

    我想要一个类似下图的输出

    enter image description here

    但是编写for循环只对其中两行执行操作,而不是对其余行执行操作,如果有人能帮我解决这个问题,那将是一个很大的帮助。

    2 回复  |  直到 6 年前
        1
  •  0
  •   GSD    7 年前

    Option Explicit
    
    Public Sub mac()
    Dim wsData As Worksheet, wsOutput As Worksheet
    Dim rngInput As Range, RangeOfChild As Range, rngOutput As Range
    Dim childCount As Long
    
        Set wsData = ThisWorkbook.Worksheets("SheetInput")
        Set wsOutput = ThisWorkbook.Worksheets("SheetOutput")
        Set rngInput = ThisWorkbook.Worksheets("SheetInput").Cells(1, 1)
        Set rngOutput = ThisWorkbook.Worksheets("SheetOutput").Cells(1, 1)
    
        While Not (IsEmpty(rngInput))
            Set RangeOfChild = Range(rngInput.Offset(0, 1), rngInput.End(xlToRight))
            childCount = RangeOfChild.Count
            rngInput.Copy
            rngOutput.PasteSpecial Paste:=xlPasteAll
            RangeOfChild.Copy
            rngOutput.Offset(0, 1).PasteSpecial Paste:=xlPasteAll, Transpose:=True
            Set rngInput = rngInput.Offset(1, 0)
            Set rngOutput = rngOutput.Offset(childCount, 0)
        Wend
    
    End Sub
    
        2
  •  0
  •   Dy.Lee    7 年前

    激活方法不好。使用变体数组。

    Sub test()
        Dim rngDB As Range, rngCnt As Range
        Dim rng As Range, rng2 As Range
        Dim vCnt, vR()
        Dim i As Integer, c As Integer, n As Long, s As Long
    
        Set rngDB = Range("a1", Range("a" & Rows.Count).End(xlUp))
        For Each rng In rngDB
            Set rngCnt = Range(rng.Offset(, 1), rng.End(xlToRight))
            s = n + 1
            vCnt = rngCnt
            c = rngCnt.Columns.Count
            n = n + c
            ReDim Preserve vR(1 To 2, 1 To n)
            vR(1, s) = rng
            For i = 1 To c
                vR(2, s + i - 1) = vCnt(1, i)
            Next i
        Next rng
        Sheets.Add
        Range("a1").Resize(n, 2) = WorksheetFunction.Transpose(vR)
    
    End Sub