VBA宏合并用逗号分隔的单元格并忽略空白单元格

时间:2014-01-16 16:45:41

标签: excel excel-vba vba

我需要一个vba宏来将用逗号分隔的一行中的单元格合并到一个新单元格中并忽略空白单元格,因为有时我会得到例如。图像1,图像2,图像3 ,,,,,

以下是一个例子:
| IMAGE_1 | IMAGE_2 | MERGED_IMAGES |
| myimage1.jpg | myimage2.jpg | myimage1.jpg,myimage2.jpg |
| myimage1_b.jpg | myimage2_b.jpg | myimage1_b.jpg,myimage2_b.jpg |
| myimage1_c.jpg | myimage2_c.jpg | myimage1_c.jpg,myimage2_c.jpg |

1 个答案:

答案 0 :(得分:0)

最后我找到了一个使用这个公式的解决方案:

=IF(A1=0;"";A1&",") & IF(B1=0;"";B1&",") & IF(C1=0;"";C1)

好的,这是有效的新宏:

    Columns("AD:AD").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Range("AD2").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-10]=0,"""",RC[-10]&"","") & IF(RC[-9]=0,"""",RC[-9]&"","") & IF(RC[-8]=0,"""",RC[-8]&"","") & IF(RC[-7]=0,"""",RC[-7]&"","") & IF(RC[-6]=0,"""",RC[-6]&"","") & IF(RC[-5]=0,"""",RC[-5]&"","") & IF(RC[-4]=0,"""",RC[-4]&"","") & IF(RC[-3]=0,"""",RC[-3]&"","") & IF(RC[-2]=0,"""",RC[-2]&"","") & IF(RC[-1]=0,"""",RC[-1])"
Selection.AutoFill Destination:=Range("AD2:AD" & Range("A" & Rows.Count).End(xlUp).Row), Type:=xlFillDefault
Range("AD2:AD" & Range("A" & Rows.Count).End(xlUp).Row).Select

Selection.Copy
Range("AE2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Application.CutCopyMode = False

Range("AD:AD,AC:AC,AB:AB,AA:AA,Z:Z,Y:Y,X:X,W:W,V:V,U:U,T:T").Select
Selection.Delete Shift:=xlToLeft

<强>信息

  

此宏合并列T,U,V,W,X,Y,Z,AA,AB,AC到AD列并用逗号分隔值并忽略空白单元格。之后,它将结果复制到AE列并删除不必要的列。因此,当宏完全执行时,您将所有这些列合并到T列

以下是一个例子:
| IMAGE_1 | IMAGE_2 | MERGED_IMAGES |
| myimage1.jpg | myimage2.jpg | myimage1.jpg,myimage2.jpg |
| myimage1_b.jpg | myimage2_b.jpg | myimage1_b.jpg,myimage2_b.jpg |
| myimage1_c.jpg | myimage2_c.jpg | myimage1_c.jpg,myimage2_c.jpg |

<强> PS !!!
我发现了第二个问题,在宏执行后,我发现一些单元格在单元格值的末尾有一个不需要的逗号。 所以我创建了第二个宏来解决宏录制器和这个公式的问题

=IF(RIGHT(J2;1)=",";LEFT(J2;LEN(J2)-1);J2)

您可以将公式更改为您想要的任何值,例如,如果您想删除A2单元格值末尾的“w”字符,您可以像这样更改公式:

=IF(RIGHT(A2;1)="w";LEFT(A2;LEN(A2)-1);A2)