gpt4 book ai didi

arrays - 仅限 VBA - 是否有更简单的方法可以根据位置连接数组值?

转载 作者:行者123 更新时间:2023-12-04 21:12:24 28 4
gpt4 key购买 nike

我看了看,发现了类似的问题,但它们似乎都是如何将一个列表添加到另一个列表的末尾。

我最近用我在 Excel 中使用的一种技术回答了一个问题,该技术依赖于创建第三列,并使用公式填充来连接每一行的 col1 和 col2。我认为必须有更好的方法来做到这一点,所以在 VBA 中进行了一些尝试,并从我能找到的问题中提出了以下问题。但现在我有几个问题:

有没有办法摆脱使用 x 数量的任意值设置第三个数组,这些值无论如何都会被替换? ReDim something maybe
总体上是否有更好/更整洁的方法来根据它们的位置组合来自 arr1 和 arr2 的元素,而无需 骑自行车通过每一个? (使用内置数组命令或其他)

(抱歉,如果这在某处重复了任何线程,我确实看过,老实说!)

Private Sub CommandButton1_Click()
Dim arr1() As Variant
Dim arr2() As Variant
Dim arr3() As Variant
Dim element As Variant
Dim pos As Integer

arr1 = Array("ONE", "TWO", "THREE")
arr2 = Array("1111", "2222", "3333")
arr3 = Array("x", "x", "x")

For Each element In arr1
pos = Application.WorksheetFunction.Match(element, arr1, False) - 1
arr3(pos) = arr1(pos) & arr2(pos)
'MsgBox (arr1(pos) & arr2(pos) & arr3(pos))
Next

'Where arr3 will equal ("ONE1111", "TWO2222", "THREE3333")
End Sub

编辑 - 谢谢大家的回答,在接下来的几天里给了我大约 20 件事情要考虑和玩。

最佳答案

为了扩展我的评论,您可能为此使用的任何代码都将循环遍历数组元素。内置代码的唯一区别是您看不到循环代码。下面是一些代码,可让您进行简单的函数调用,并且支持任意数量的输入数组。 JoinArrayElements函数可以满足您的要求,您可以使用它而无需每次都编写代码来“循环遍历元素”。

Public Sub Main()
Dim arr1, arr2
arr1 = Array("ONE", "TWO", "THREE")
arr2 = Array("1111", "2222", "3333")
arr3 = Array("!@!@", "@#@#", "#$#$")

Debug.Print arrayToString(joinArrayElements(arr1, arr2))
Debug.Print arrayToString(joinArrayElements(arr1, arr2, arr3))
End Sub


Public Function arrayToString(arr As Variant) As String
Dim output As String
output = "["
If UBound(arr) - LBound(arr) > 0 Then
output = output & """" & arr(LBound(arr)) & """"
For index = LBound(arr) + 1 To UBound(arr)
output = output & ", " & """" & arr(index) & """"
Next
End If
output = output & "]"
arrayToString = output
End Function

Public Function joinArrayElements(ParamArray args() As Variant) As Variant
'Validation to add:
' Are all the passed parameters actual valid arrays?
' Are they all the same length?

Dim arrayNumber As Long
Dim index As Long
Dim arrOutput() As Variant

ReDim arrOutput(LBound(args(0)) To UBound(args(0)))

For arrayNumber = LBound(args) To UBound(args)
For index = LBound(args(0)) To UBound(args(0))
arrOutput(index) = arrOutput(index) & args(arrayNumber)(index)
Next
Next

joinArrayElements = arrOutput
End Function
这段代码的输出是:

["ONE1111", "TWO2222", "THREE3333"]

["ONE1111!@!@", "TWO2222@#@#", "THREE3333#$#$"]

关于arrays - 仅限 VBA - 是否有更简单的方法可以根据位置连接数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39649467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com