2016-04-07 17 views
0

Çalışma sayfasındaki belirli senaryoları işlemek için uzun bir formül oluşturmak zorunda kalmadan mükemmel şekilde çalışan bir makro vardı. Formül temel olarak metinden bir isim oluşturur, ben devam edip hücrenin sekmesini bu isimle yeniden adlandırıyorum. Ben dize arada kullanabilirsiniz bir yolu yokturUzun formül dizesi alma

=IF(A1="Facility Variance Report",IF(MID(A2,FIND(":",A2)+2,20)="Baptist Memorial Hos",MID(A2,FIND("_",A2)+1,2)&"-"&TRIM((MID(A2,FIND(":",A2)+2,17)))&IF(IFERROR(FIND("West",A2),0)>0," W","")&" "&MID(A2,FIND(CHAR(1),SUBSTITUTE(A2,"-",CHAR(1),2))+1,3)&" -FVar",MID(A2,FIND("_",A2)+1,2)&"-"&MID(A2,FIND("_",A2)+1,2)&"-"&TRIM((MID(A2,FIND(":",A2)+2,20)))&IF(IFERROR(FIND("West",A2),0)>0," W","")&"-FVar"),IF(MID(A2,FIND(":",A2)+2,20)="Baptist Memorial Hos",MID(A2,FIND("_",A2)+1,2)&"-"&TRIM((MID(A2,FIND(":",A2)+2,17)))&IF(IFERROR(FIND("West",A2),0)>0," W","")&" "&MID(A2,FIND("-",A2,FIND("-",A2)+1)+1,3)&"-LTM",MID(A2,FIND("_",A2)+1,2)&"-"&MID(A2,FIND("_",A2)+1,2)&"-"&TRIM((MID(A2,FIND(":",A2)+2,20)))&IF(IFERROR(FIND("West",A2),0)>0," W","")&"-LTM")) 

Ben yardım gerekir: Burada

Sub Tab_Name_Creation() 
Dim s As Worksheet 
Dim formula As String 
For Each s In ActiveWorkbook.Worksheets 

    s.Activate 
    With ActiveWindow 
     .View = xlNormalView 
    End With 

Next s 
Call UnhideRows 
formula = "= IF(R[-3]C=""Facility Variance Report"",IF(MID(R[-2]C,FIND("":"",R[-2]C)+2,20)=""Baptist Memorial Hos"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,17)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&"" ""&MID(R[-2]C,FIND(""-"",R[-2]C,FIND(""-"",R[-2]C)+1)+1,3)&""-FVar"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&MID(R[-2]C,FIN" & _ 
    "R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,20)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&""-FVar""),IF(MID(R[-2]C,FIND("":"",R[-2]C)+2,20)=""Baptist Memorial Hos"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,17)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&"" ""&MID(R[-2]C,FIND(""-"",R[-2]C,FIND(""-" & _ 
    ")+1)+1,3)&""-LTM"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,20)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&""-LTM""))" 

For i = 5 To ThisWorkbook.Worksheets.Count 
    Worksheets(i).Range("A4").NumberFormat = "General" 
    Worksheets(i).Range("A4") = formula 
Next i 

Call RenameFromA4 
Call SortWorkBook 
Call listsheets 
MsgBox "Report Has Been Updated" 
End Sub 

formül şu şekildedir: İşte vba kodu? Ya da formülü yoğunlaştırmanın bir yolunu bulmak zorunda mıyım?

+1

ile formula değişkene ekleyerek Neden kodunun içinde bir levha üzerine bir formül düşeceği? XD Edit: Bu kodu kopyaladın mı yoksa kendin mi yazdın? İkincisi ise, nasıl kodlanacağını biliyorsunuz! – findwindow

+0

Birbirinden benzersiz sekme adı oluşturmak için diseksiyon işlevselliği için formül oluşturdum. Formülü oluşturduktan sonra sadece kendimi girdiğimi kaydediyorum, böylece dizeleri birleştirmek için tüm çalışma kitabında – user3666237

cevap

1

Tut basitçe sadece ihtiyacınız olanı kod ve neticeyi bırakabilirsiniz zaman formula = formula + "text"

Sub Tab_Name_Creation() 
Dim s As Worksheet 
Dim formula As String 
For Each s In ActiveWorkbook.Worksheets 

    s.Activate 
    With ActiveWindow 
     .View = xlNormalView 
    End With 

Next s 
Call UnhideRows 
formula = "=IF(R[-3]C=""Facility Variance Report"",IF(MID(R[-2]C,FIND("":"",R[-2]C)+2,20)=""Baptist Memorial Hos"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,17)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&"" ""&MID(R[-2]C,FIND(""-"",R[-2]C,FIND(""-"",R[-2]C)+1)+1,3)&""-FVar"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&MID(R[-2]C,FIN" 
formula = formula + "R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,20)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&""-FVar""),IF(MID(R[-2]C,FIND("":"",R[-2]C)+2,20)=""Baptist Memorial Hos"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,17)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&"" ""&MID(R[-2]C,FIND(""-"",R[-2]C,FIND(""-" 
formula = formula + ")+1)+1,3)&""-LTM"",MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&MID(R[-2]C,FIND(""_"",R[-2]C)+1,2)&""-""&TRIM((MID(R[-2]C,FIND("":"",R[-2]C)+2,20)))&IF(IFERROR(FIND(""West"",R[-2]C),0)>0,"" W"","""")&""-LTM""))" 

For i = 5 To ThisWorkbook.Worksheets.Count 
    Worksheets(i).Range("A4").NumberFormat = "General" 
    Worksheets(i).Range("A4") = formula 
Next i 

Call RenameFromA4 
Call SortWorkBook 
Call listsheets 
MsgBox "Report Has Been Updated" 
End Sub 
+0

çoğaltabilirim ve ampermet operatörünü kullanır ... i.e. formül = formül & "metin" – Rosetta