2014-01-16 108 views
0

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

下面有一个例子:
|           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 |

回答

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 

信息

这台Mac ro将列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) 

,如果你想删除的的字母“W”可以更改配方,任何你想要的,如A2单元格的值的末尾,你可以像这样改变这个单元格:

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