arrays - Excel VBA 连接函数

标签 arrays excel vba join concatenation

我尝试在 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/

相关文章:

c - 骨架代码 : character pointers struggles

javascript - 如何在javascript中获取对象数组中的值

vba - excel中的数组改变字符串的格式

excel - 有没有办法在 Excel 中对 "Everything other than"进行条件格式设置

excel - VBA 填充整个表格而不是定义的单元格

python - python中两个numpy数组之间的区别

javascript - 我被困在一个 JavaScript 函数中,该函数应该计算数组中的所有唯一项

excel - VLookUp 将一列的前 3 个字符与另一列匹配

vba - Excel从文件复制到文件宏不起作用

使用 ODBCConnection.RefreshDate 的 VBA 结果出现错误 1004