For Loop VBA中的迭代变量值分配

时间:2018-10-02 16:25:36

标签: excel vba

我坚持使用VBA代码,急需您的帮助。这是我想要达到的目标-

第1步:我必须迭代地捕获D列中的字符串(C2中提到的字符串数将根据数据集而变化)

第2步:将根据“ _”对每个字符串进行分割,由于我只需要第二,第一,第三,第五部分(以该特定顺序),因此我不得不重新组合它们-在下面进一步表示“输出”下的D列

第3步:我必须将D列中新创建的字符串和F列中的字符串连接起来,并创建所有可能的组合-在F列的“输出”下进一步表示

第4步:将所有创建的组合提供到不同工作表中的范围C(在此步骤中卡住):(

下面是我尝试创建的代码,由于某些原因,该代码未遍历i。它只是一直给我提供值4。是因为我们不能在循环中动态分配和刷新变量的值吗?在我的情况下是temp_string。我尝试了循环的所有其他变种,但没有帮助。我认为我从根本上错过了一些东西。任何建议都将受到高度赞赏!

Sub Test()
Dim a_count As Integer, i As Integer
Dim temp_string As String, temp_substring As String
Dim o_array() As String

a_count = Sheet7.Range("C2")

For i = 2 To a_count
   temp_string = Sheet7.Range("D" & i)
   o_array = Split(temp_string, "_")
   temp_substring = o_array(1) & "_" & o_array(0) & "_" & o_array(2) _
   & "_" & o_array(4)
Next i

Debug.Print i, temp_substring
End Sub

Input & Output

1 个答案:

答案 0 :(得分:1)

这就是我要做的。

Sub Test()

    Dim a_count As Long
    Dim iet As Range
    Dim fet As Range
    Dim rCell As Range
    Dim rCell1 As Range
    Dim array_size As Long
    Dim o_Array() As String
    Dim o_FinalOutput() As String
    Dim temp_substring As String
    Dim x As Long

    With Sheet7

        'Change so it returns the last row with data, not the count of data.
        a_count = .Range("C2")
        'or
        'a_count = .Cells(.Rows.Count, 4).End(xlUp).Row

        'These two variables will reference the full range of figures
        'in column D and column F.
        Set iet = .Range("D4", .Cells(a_count, 4))
        Set fet = .Range("F4", .Cells(.Rows.Count, 6).End(xlUp))

    End With

    'Figure out the size of the final array.
    array_size = iet.Cells.Count * fet.Cells.Count
    ReDim o_FinalOutput(1 To array_size)

    'Step through each cell in column D.
    For Each rCell In iet
        o_Array = Split(rCell, "_")
        temp_substring = o_Array(1) & "_" & _
                         o_Array(0) & "_" & _
                         o_Array(2) & "_" & _
                         o_Array(4) & "_"

        'Step through each cell in column F and stick it to column D text.
        For Each rCell1 In fet
            x = x + 1
            o_FinalOutput(x) = temp_substring & rCell1
        Next rCell1

    Next rCell

    'Dump the whole array into Sheet2 starting at cell C1.
    With Sheet2
        .Range("C1", .Cells(array_size, 3)) = WorksheetFunction.Transpose(o_FinalOutput)
    End With

End Sub  

您可能想要阅读Cells,该内容与Range基本上相同,只是它查看单个单元格并使用行号和列号。

您还需要调整一些数字以将数据放置在正确的行上。

例如
.Range("C1", .Cells(array_size, 3))-array_size仅在从第1行开始时起作用。要从第2行开始,您需要在array_size中添加1:.Range("C2", .Cells(array_size+1, 3))