如何添加每250个单元的循环并偏移数组?

时间:2019-01-25 15:19:57

标签: excel vba

我有这段代码可以查看A列并循环创建一个粘贴到另一个目标的数组,但是我想操纵它遍历250个单元格的集合并创建一个串联的数组并将其打印到单元格B1。在那250个集合之后,我进入单元格a251-a501,依此类推,直到到达列表的末尾,并让每250个并置ID集合(用“;”分隔)打印到下一个目标行(B1> B2> B3,等等。)

Sub JC_Fill()

Dim varArray() As Variant
Dim x As Long, i As Long

i = 0
x = 1

With ThisWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count

    ReDim varArray(1)                        'resize array

    Do Until Cells(x, 1).Value = ""

        If Cells(x, 1) <> "" Then
            varArray(i) = Cells(x, 1).Value
            i = i + 1
            ReDim Preserve varArray(i)
        End If

        x = x + 1
    Loop



    ReDim Preserve varArray(i - 1)

End With

ThisWorkbook.Worksheets("Sheet1").Range("B1").Value = varArray



End Sub

我该如何编辑我的Do While/Loop以每250个单元格重复一次该过程,然后将阵列连接到一个由;分隔的单元格中,然后偏移下一批,直到没有更多ID可以循环通过?

2 个答案:

答案 0 :(得分:1)

尝试以这种方式更改代码:

Sub JC_Fill()

Dim OutString
Dim x As Long, i As Long

Dim out_row As Long

i = 0
x = 1
out_row = 1


With ThisWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count

    OutString = ""

    Do Until Cells(x, 1).Value = ""

        If Cells(x, 1) <> "" Then
            If (x > 1) Then OutString = OutString & ";"
            OutString = OutString & Cells(x, 1).Value
        End If


        If (x Mod 250) = 0 Then
          ThisWorkbook.Worksheets("Sheet1").Range("B" & out_row).Value = OutString
          OutString = ""
          out_row = out_row + 1
        End If

        x = x + 1

    Loop

End With

ThisWorkbook.Worksheets("Sheet1").Range("B" & out_row).Value = OutString



End Sub

答案 1 :(得分:1)

有兴趣的是,您无需循环250个单元中的每个单元就可以做到这一点。

Sub x()

Dim n As Long, v As Variant, r As Range, n2 As Long

n = 5 '250 for you
n2 = Range("A" & Rows.Count).End(xlUp).Row

Set r = Range("A1").Resize(n)
Do While Len(r(1)) > 0
    If n2 - r(1).Row < n Then Set r = r.Resize(n2 - r(1).Row + 1)
    If r.Count = 1 Then
        v = r.Value
    Else
        v = Join(Application.Transpose(r), ";")
    End If
    Range("B" & Rows.Count).End(xlUp)(2).Value = v
    Set r = r.Offset(n)
Loop

End Sub

enter image description here