使用分隔符连接变长行的Excelmacros

我正在开发一个工作表,用户可以填写生成一个可以上传到SAP的文件。

工作表将生成单个条目的批量上传。 用户将被要求提供他们正在请求的每个行项目的属性,这可能会根据所做的select而有所不同(即一行可能有5个属性,而下一个可能有7个属性)。

我想写一个macros,它将从顶部开始查看每一行,并且只连接属性列(在每个实例中由两个其他列分隔),这些列不是空白的,并在每个字段之间使用分隔符。

我已经能够使用我通过微软发现的一些代码来完成循环(见下文),但是我无法弄清楚当一个列是空白的时候如何让连接停止,然后移动到下一行。

Sub Submit() Range("C2").Activate Do While ActiveCell <> "" ActiveCell.Offset(0, 21).FormulaR1C1 = _ ActiveCell.Offset(0, 0) & "-" & ActiveCell.Offset(0, 3) & "-" & ActiveCell.Offset(0, 6) & "-" & ActiveCell.Offset(0, 9) & "-" & ActiveCell.Offset(0, 12) & "-" & ActiveCell.Offset(0, 15) & "-" & ActiveCell.Offset(0, 18) ActiveCell.Offset(1, 0).Select Loop End Sub 

现在,这个代码将会有五个属性的input,当我真的想把它显示为“1-2-3-4-5”时,给我留下“1-2-3-4-5–”。

任何想法,我怎么能做到这一点? 最终,我希望能够存储这些string,并将它们填充到新的工作簿中,并从原始工作簿中复制一些其他信息。

未经testing:

 Sub Submit() Dim c As Range, c2 As Range, v as String Set c = Range("C2") Do While c.Value <> "" Set c2 = c v = "" Do While c2.value <> "" v = v & IIf(v <> "", "-", "") & c2.value Set c2 = c2.offset(0, 3) Loop c.offset(0, 21).Value = v Set c = c.Offset(1, 0) Loop End Sub 

这是一个快速的答案,所以可能没有你以后的一切:

 Public Function Submit(Target As Range) As String Dim sFinalOutput As String Dim rCell As Range 'Cylce through each cell in your range. For Each rCell In Target 'Look at the column number divided by 3 - if it's 0 then carry on. If rCell.Column Mod 3 = 0 Then If rCell.Value2 <> "" Then 'Grab the value from the cell and add it to the final output. sFinalOutput = sFinalOutput & "-" & rCell.Value2 End If End If Next rCell Submit = sFinalOutput End Function 

在一个公式中使用它: =submit(C4:L4)