Excel For循环VBA中的迭代变量赋值

Excel For循环VBA中的迭代变量赋值,excel,vba,Excel,Vba,我被VBA代码卡住了,急需你的帮助。以下是我努力实现的目标- 步骤1:我必须迭代捕获D列中的字符串(C2中提到了该列的计数,它将根据数据集的不同而变化) 步骤2:这些字符串中的每一个都将根据“u”进行拆分,我必须重新组合它们,因为我只需要第2、第1、第3、第5部分(按特定顺序)-在“输出”下的D列中进一步表示 步骤3:我必须将新生成的字符串连接到D列和F列,并创建所有可能的组合-在F列的“输出”下进一步表示 步骤4:将所有创建的组合以不同的表格形式提供给范围C(卡在该步骤中):( 下面是我试图创

我被VBA代码卡住了,急需你的帮助。以下是我努力实现的目标-

步骤1:我必须迭代捕获D列中的字符串(C2中提到了该列的计数,它将根据数据集的不同而变化)

步骤2:这些字符串中的每一个都将根据“u”进行拆分,我必须重新组合它们,因为我只需要第2、第1、第3、第5部分(按特定顺序)-在“输出”下的D列中进一步表示

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

步骤4:将所有创建的组合以不同的表格形式提供给范围C(卡在该步骤中):(

下面是我试图创建的代码,由于某种原因,它没有循环通过I。它只是不断地给我值4。这是因为我们不能在循环中动态分配和刷新变量值吗?在我的例子中是temp_字符串。我尝试了所有其他类型的循环,但没有任何帮助。我认为我基本上缺少了一些东西。任何adv非常感谢您

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
我就是这样做的

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  
您可能希望读取与
范围基本相同的数据,只是它查看单个单元格并使用行号和列号

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

例如

.Range(“C1”,.Cells(数组大小,3))
-
数组大小
仅在从第1行开始时有效。要从第2行开始,需要将1添加到数组大小:
.Range(“C2”,.Cells(数组大小+1,3))

您的
DEBUG
在循环之外,因此它在整个循环中运行,并将最终值打印到即时窗口。将
DEBUG.Print i…
放在
Next i
之前。范围
C2
中的值是多少?如果它小于2,我想循环根本不会运行,如果它等于2,它会运行只循环一次……我想。天哪,facepalm!非常感谢@DarrenBartrup Cook!:)嘿@DarrenBartrup Cook!关于这件事,我需要进一步的指导。我能够使用for循环重新创建迭代。例如,F列“输出”中存储在2D数组temp(1,1)、temp(1,2)、temp(2,1)、temp(2,2)、temp(3,1)和temp(3,2)中的6个变量。但是我需要一个接一个地分配这些值,比如在G范围内。第三个循环与两个循环冲突,因为迭代次数因第三个变量而变化。有什么想法吗?这是我使用的代码,用于j=1到adset_count到k=1到creative_count iet_string=Sheet7.Range(“D”&j+1)oet_数组()=Split(iet_string,”),assub_string=oet_数组(2)和“”&oet_数组(3)和“”&oet_数组(4)和“”&oet_数组(5)和“”&oet_数组(6)&oet_数组(7)ic_string=Sheet7.范围(“F”&k+1)a_string=csub_string&&assub_string&&ic_string temp(j,k)=a_string Debug.打印j,k,temp(j,k)Next k Next j'列可能会有所不同,因为这是对最终数据集的引用。请帮忙这是伟大的@Darren Bartup Cook!非常感谢您的帮助:)