【问题标题】:VBA Compare Arrays different in size and build a new oneVBA比较大小不同的数组并构建一个新数组
【发布时间】:2018-11-30 22:03:45
【问题描述】:

我有一个由字符串列表框生成的一维数组,我想用它来匹配主二维数组,其中第一列中的字符串和所有其他列中的数字。目标是创建第三个数组,其中包含匹配的字符串和来自 master 的相关数据。尽管主题不是未知的,但无法从此处搜索找到更好的解决方案。猜猜我在构建新数组时迷失了方向。

Private Sub ImportSelection()
    Dim i, j, k, m, ListSize As Integer
    Dim arr2() As String
    Dim pArr As variant     
    Dim Size As Integer

    Size = List2.ListCount
    ReDim ListBoxContents(0 To Size) As String

    For i = 1 To Size
        ListBoxContents(i) = List2.list(i)
    Next i

    On Error GoTo eh
    ReDim arr2(1 To List2.ListCount, 1 To 16)

    For i = LBound(ListBoxContents) To UBound(ListBoxContents)
        For j = LBound(pArr, 1) To UBound(pArr, 1)
                If ListBoxContents(i) = pArr(i, 1) Then
                    arr2(k, m) = pArr(i, j)
                    k = k + 1
                    m = m + 1
                End If
            Next j
        Next i
eh:
    MsgBox Err.Description
End Sub

【问题讨论】:

  • 您的代码有什么问题?
  • pArr 从未被赋值。
  • 为什么是私有的?为什么将 i, j, k, m 声明为变体?为什么没有声明 ListBoxContents?为什么在开发时使用 On Error?为什么没有将任何数据放入 pArr?为什么没有为 k 和 m 赋值?提供 List2 和 pArr 的一些示例数据,其中包含您尝试匹配的一些值,以便有人可以编写工作代码。
  • 看起来你有很多问题要回答,OP :P
  • VBasic2008 仔细阅读:i、j、k、m 被声明为整数而不是变体。 pArr 在用户表单中保持为私有,以保留模块中的数据并将其从列表框传递到列表框。来自 donPablo 的关于循环的提示解决了所有问题。谢谢

标签: arrays vba compare


【解决方案1】:

将代码中间部分改为-->

k = 0  ' need to initialize (and also add headings to row zero)
For i = LBound(ListBoxContents) To UBound(ListBoxContents)
    For j = LBound(pArr, 1) To UBound(pArr, 1)
            If ListBoxContents(i) = pArr(J, 1) Then  ' pArr needs to be J
                k = k + 1   ' got a match, ergo increment the output row
                For m = 0 To UBound(pArr, 2) - 1
                    arr2(k, m) = pArr(J, m)  ' move into col m, from pArr J row
                Next m                
            End If
    Next j
Next i
Exit Sub  ' do not drop thru

同样作为 Comintern sez --> pArr 永远不会被赋值。

另外,你得到你想要的东西了吗

Dim i, j, k, m, ListSize As Integer

【讨论】:

  • 效果很好,我终于理解了嵌套循环。刚刚将 m- 循环纠正为 for m= 0 Ubound(pArr, 2) 以使其工作。还要感谢您注意到 pArr 未分配值,它实际上是在代码中的其他地方作为私有属性分配的。 Dim i, j, k, m, ListSize 工作也很好。再次感谢并希望在我有更强大的 VBA 基础后对其他用户有所帮助。
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 2016-02-24
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2012-09-08
相关资源
最近更新 更多