我刚刚创建了一个全新的宏。从Internet下拉至下方功能(所有功劳归于trumpexcel.com),下方至此进行编码
Function CONCATENATEMULTIPLE(Ref As Range, Separator As String) As String
Dim Cell As Range
Dim Result As String
For Each Cell In Ref
Result = Result & Cell.Value & Separator
Next Cell
CONCATENATEMULTIPLE = Left(Result, Len(Result) - 1)
End Function
然后我继续从不同的列中提取数据并合并到其中(我的表是20行x 10列)
Sub conact_data()
Dim i As Integer
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(i, "M").Value = Cells(i, "A").Value & " " & _
Cells(i, "B").Value & " / " & Cells(i, "D").Value & "; "
Next i
End Sub
由于我已经从A,B和D列合并了数据,所以它有20行。我现在要做的就是使用CONCATENATEMULTIPLE函数将M2:M21中的数据连接起来,因此我尝试了各种方法(我想要P2单元格中的这一行):
Cells(2, 16).Value = CONCATENATEMULTIPLE (M2:M21, " ")
或
Range("P2") = "CONCATENATEMULTIPLE (M2:M21, " ")"
我真的不知道该如何应用
其次,我想提取Cells(i, "B").Value
作为百分比。我可以像Cells(i, "B").NumberFormat="0.00%".Value
这样的一行来执行此操作吗(显然对我不起作用),否则我需要将B列复制到数字格式的另一列中,然后合并格式正确的新列而不是B列? / p>
预先感谢
答案 0 :(得分:1)
百分比格式: Range("B" & i).NumberFormat = "0.00%"
CONCATENATEMULTIPLE
在VBA中,CHR(32)
= " "
在Excel中,CHAR(32)
= " "
话虽如此...
'Value
Range("P2").Value = CONCATENATEMULTIPLE(Range("M2:M21"), CHR(32))
'Formula
Range("P2").Formula = "=CONCATENATEMULTIPLE(M2:M21, CHAR(32))"
您应该真正使用工作表来限定所有范围
说您的工作簿有10张纸。当您说Range("P2")
时,我们(VBE)如何知道您的意思?对象需要适当地限定。有时这不是一个大问题,但是当您处理多个工作表时,没有达到合格范围会导致一些意外结果。
您可以通过几种方式来限定工作表。
直接:
ThisWorkbook.Sheets("Sheet1").Range("P2").Copy
或者使用像这样的变量
Dim ws as Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") ws.Range("P2").Copy
对于Range("P2")
答案 1 :(得分:0)
首先,删除您的ConcatenateMultiple()代码,而使用Excel工作表函数CONCAT(),该函数将范围和定界符作为参数。
在这里,您可以处理百分比问题并为非数字项目提供默认值。我还清理了您引用数据范围的方式。
Sub concat_data()
Dim rngRow As Range, vResult As Variant
Const DEFAULT = 0 'Can also be set to a text value, eg. "Missing"
For Each rngRow In [A2].CurrentRegion.Rows
If IsNumeric(rngRow.Cells(, 4)) Then vResult = rngRow.Cells(, 4) * 100 & "%" Else vResult = DEFAULT
Range("M" & rngRow.Row) = rngRow.Cells(, 1) & rngRow.Cells(, 2) & "/" & vResult & ";"
Next
[M2].End(xlDown).Offset(1).Formula = "=CONCAT(M2:M" & [M2].End(xlDown).Row & ",TRUE,"" "")"
End Sub
我不喜欢[A2]或Range(“ M”)之类的硬编码范围引用,但是会再保留一段时间。