Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在传递到另一个公式之前,将公式(处理)应用到范围_Vba_Excel_Substitution_Textjoin - Fatal编程技术网

Vba 在传递到另一个公式之前,将公式(处理)应用到范围

Vba 在传递到另一个公式之前,将公式(处理)应用到范围,vba,excel,substitution,textjoin,Vba,Excel,Substitution,Textjoin,我试图在其中一个单元格中应用TEXTJOIN公式。 但当我需要对范围内的每个单元格进行预处理时,问题就出现了。 例如,数据如下所示。 ╔══════╦══════════════╦═════════╦═════════╦═════════╗ ║ 试验║ 休息║ 额外费用1║ 额外费用2║ 额外费用3║ ╠══════╬══════════════╬═════════╬═════════╬═════════╣ ║ ║ 英语考试║ 角落║ ║ ║

我试图在其中一个单元格中应用
TEXTJOIN
公式。 但当我需要对范围内的每个单元格进行预处理时,问题就出现了。 例如,数据如下所示。

╔══════╦══════════════╦═════════╦═════════╦═════════╗
║ 试验║     休息║ 额外费用1║ 额外费用2║ 额外费用3║
╠══════╬══════════════╬═════════╬═════════╬═════════╣
║      ║ 英语考试║ 角落║         ║         ║
║      ║ 中文考试║ 角落║ 看法║         ║
║      ║ 韩国测试║ 角落║ 房间║ 2号房间║
╚══════╩══════════════╩═════════╩═════════╩═════════╝

在Test专栏中,我试图在将单词-Test替换为Extras中的每个单词后,将文本加入Rest。我所期望的是以下几点。

╔═════════════════════════════════════════╦══════════════╦═════════╦═════════╦═════════╗
║                  试验║     休息║ 额外费用1║ 额外费用2║ 额外费用3║
╠═════════════════════════════════════════╬══════════════╬═════════╬═════════╬═════════╣
║ 英语角║ 英语考试║ 角落║         ║         ║
║ 中国角|中国观║ 中文考试║ 角落║ 看法║         ║
║ 韩国角|韩国房|韩国房| 2║ 韩国测试║ 角落║ 房间║ 2号房间║
╚═════════════════════════════════════════╩══════════════╩═════════╩═════════╩═════════╝

我使用的基本公式是
TEXTJOIN(“|”,TRUE,Extras1:Extras3)
,但是如果可能的话,我想要类似
TEXTJOIN(“|”,TRUE,replacement(Rest,“-test”,Extras1:Extras3))
。使用范围中的值在Rest列中重新保存“-test”,从而生成范围

我也尝试过VBA,但在输入函数之前,我找不到任何可以处理范围的东西。
手动过程可以工作,但需要更长的时间。

这可能是一个很好的解决方案,可以使用VBA中的用户定义函数来完成:

Public Function someTest(firstVal As String, ParamArray otherVal() As Variant) As String

    Dim someVal As Variant
    Dim delim As String:    delim = "|"
    Dim splitVal As String: splitVal = "-"

    For Each someVal In otherVal
        someTest = someTest & Split(firstVal, splitVal)(0) & delim & someVal
    Next someVal

End Function
这就是你所说的:

该函数使用
ParamArray()
,循环遍历其中的每个元素,并与第一个参数的第一部分连接。因此,从
英语测试
中,只取
英语


只需稍作更改,就可以将第二个参数作为范围传递。因此,这将更容易:

Public Function someTest2(firstVal As String, otherVal As Range) As String

    Dim someVal As Range
    Dim delim As String:    delim = "|"
    Dim splitVal As String: splitVal = "-"

    For Each someVal In otherVal
        someTest2 = someTest2 & Split(firstVal, splitVal)(0) & delim & someVal
    Next someVal

End Function


这里第二个参数作为一个范围给出。每个区域至少有一个单元格,因此函数在单元格中循环。

使用公式求解;可扩展性不如UDF:

=替换(替换(替换(剩余,“测试”,额外1和“|”,1),“测试”,额外2和“|”,1),“测试”,额外3和“|”,1),“|”,COUNTA(额外1:额外3))


这有帮助,但不能完全解决我的问题。