VBA – 计数空的cols,search和replace

我正在学习VBA,并试图为我做一些复杂的事情。 这是交易:

我的Excel文件

在我的“H”列中,我使用“CONCATENATE”公式来获取我所需要的所有元素的关键字。 正如你所看到的,一些元素没有填充,我有不需要的“ – ”分隔符。 我想有一个macros,search和replace我不想要的双,三(…)分隔符,如果有一行只填充分隔符(即我的H5单元格),我希望它改为没有任何反而。

事情是,我想在将来添加一些列/行,我不想每次添加一列或一行时更改macros。 因此,如果有一种方法可以对我的macros观说:“只要有一行只有分隔符,就把它换成空白”。

这是我不知道如何处理的部分。 你们能给我一个提示吗?

感谢和抱歉,这是一个卡哇伊土豆

potato - Hi 9gag users!

TEXTJOIN(分隔符,ignore_empty,text1,[text2],…)

= TEXTJOIN(“ – ”,TRUE,A2:G2)

在这里输入图像说明

更新:如果您的Excel版本没有TEXTJOIN

 Function UDFTextTJoin(delimiter As String, ignore_empty As Boolean, ParamArray Text()) As String Dim s As String Dim v As Variant Dim x As Long For x = 0 To UBound(Text) If TypeName(Text(x)) = "Range" Then For Each v In Text(x) If Not ignore_empty Or v <> "" Then If Len(s) Then s = s & delimiter s = s & v End If Next Else If Not ignore_empty Or Text(x) <> "" Then If Len(s) Then s = s & delimiter s = s & Text(x) End If End If Next UDFTextTJoin = s End Function 

肯定有一些方法可以从一开始就避免这种模式,但这是一个用来做(后期)清理的macros:

 Sub Cleanup() Dim cel As Range, i As Long With Worksheets("Products").UsedRange.Columns("J") For i = 1 To 5 .Replace "- - ", "- " Next For Each cel In .Cells If Trim(cel.Value) = "-" Then cel.Clear Next End With End Sub 

编辑

既然你我没有TextJoin,而且这是一个很好的解决scheme,那么让我们把它作为UDF吧。 您可以将以下代码添加到任何非类代码模块,并将其用作用户定义的公式(UDF):

 Public Function TextJoin(ByVal sep As String, ByVal ignoreEmpty As Boolean, ByRef ar As Variant) As String Dim cel As Range For Each cel In ar If Trim(cel.Text) <> "" Or Not ignoreEmpty Then If TextJoin <> "" Then TextJoin = TextJoin + sep TextJoin = TextJoin + cel.Text End If Next End Function