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))
这有帮助,但不能完全解决我的问题。