我尝试在 vba 中加入向量的元素。
首先,我使用 for 循环特定的字符串进行搜索。
CE_addr = FindAll(Workbooks("raw_data.xlsm").Worksheets("IQ_Key_Dev_Type").Cells(k, (p - 1)).Value, _
Worksheets("Sheet1").Range("O:O"), xlValues, xlWhole).Address
之后,我使用地址对象来获取右侧一列的相应值。
rn = Split(CE_addr, ",")
n = UBound(rn, 1) - LBound(rn, 1)
For w = 0 To n
ReDim CE_cod(n) As Variant
CE_cod((w)) = Workbooks("raw_data.xlsm").Worksheets("CE_List").Range(rn(w))
Next w
所以在 CE_cod 向量中我保存了所有对应的值(有时它只是一个值,有时不止一个)
现在我想用“;”连接所有包含的(文本)值作为分隔符:
Cells(j, 3) = Join(CE_cod, ";")
假设 CE_cod 在第一个循环中有两个条目: ["XXX", "YYY"]
在第二个循环中只有一个:[“XXX”]
由于某种原因,第一种情况下 Cell(j,3) 中的结果(CE_cod 中的多个值)是:“;YYY”(注意添加了分隔符,但没有添加表达式本身)。
在第二种情况下,结果是:“XXX”
我检查了向量 CE_cod 是否包含所有值:
Cells(j, (10 + w)) = CE_cod((w))
确实,当我这样做时,包含“XXX”和“YYY”。
那么,当有多个条目时,为什么join函数会跳过向量的第一个条目呢?
PS:我在这里找到了“FindAll”功能:
http://www.tushar-mehta.com/publish_train/xl_vba_cases/1001%20range.find%20and%20findall.shtml#_The_FindAll_function
最佳答案
我认为你的 CE_cod 填充循环应该更接近这个。
Dim CE_cod As Variant
ReDim CE_cod(LBound(rn) to UBound(rn))
For w = LBound(rn) to UBound(rn)
'if you want to put a redim here, use Preserve
'ReDim Preserve CE_cod(w)
CE_cod(w) = Workbooks("raw_data.xlsm").Worksheets("CE_List").Range(rn(w))
Next w
rn 数组是通过拆分操作填充的,因此它是一个从零开始的一维数组。
此外,如果您想保留您的值,则不应在没有 Preserve 参数的循环内使用 ReDim。无论如何,由于您事先知道目标边界,因此无需在循环内进行 ReDim。
关于arrays - Excel VBA 连接函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194043/