【问题标题】:Excel VBA - Dynamic RangeExcel VBA - 动态范围
【发布时间】:2019-06-16 05:21:23
【问题描述】:

我在工作表上有一个数字列表,需要分批添加到数组中。所以我在 List 上有 150 个左右的数字列表,需要添加到一个数组中,但每批 5 个。每个新批次都将用于查询 SQL 数据库。

列表可以改变长度,不会是偶数,可以是20也可以是541。

编辑:这似乎可以满足我的需要,但我确信有更好的解决方案。

Dim i As Integer

Sheets("List").Select
lRow = Cells(Rows.Count, 1).End(xlUp).Row

Range("a1").Select


For i = 1 To lRow

    begrng = ActiveCell.Address
    ActiveCell.Offset(4, 0).Select
    endrng = ActiveCell.Address


    Set rng = Range(begrng, endrng)


    For Each cell In rng
        If Not IsEmpty(cell) Then
        mystring = mystring & "','" & cell.Value
        End If
    Next cell

    mystring = Right(mystring, Len(mystring) - 2)
    mystring = ""

Next

End Sub

【问题讨论】:

  • 显示你的代码,我们可以解决如何调整它
  • 为什么要连接范围内的值?这表明您最终会得到 30 列,每列 1 行。
  • @SJR - 我相信 Mike 正在使用 IN ('this', 'that', 'other') 为 SQL SELECT 构造一个逗号分隔的引号字符串列表。
  • @user10947436 ,是的,你是对的。我没有贴出我所有的代码,但我基本上是在尝试批量运行一条 SQL 语句,返回结果,然后再回到下一组。我无法运行整个列表,因为它在 SQL 中超时,所以我需要分批运行。

标签: sql excel vba loops


【解决方案1】:

试试,

Dim i As Long, lRow As Long, mystring As String, ayes As Variant

With Worksheets("List")

    lRow = .Cells(.Rows.Count, "A").End(xlUp).Row

    For i = 1 To lRow Step 5

        ayes = Application.Transpose(.Range(.Cells(i, "A"), .Cells(i + 4, "A")).Value2)

        mystring = Application.Trim(Join(ayes, Space(1)))
        ayes = Split(mystring, Space(1))
        mystring = Chr(39) & Join(ayes, "','") & Chr(39)

        Debug.Print mystring

    Next i
End With

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多