2016-08-18 1 views
0

VBAを使用して数式をセルM2に貼り付けようとすると、動作しなくなり、エラーが明らかになりません。 Excelの数式は以下の通りです:ActiveCell.Formulaを使用してVBAから数式を移動して仕様ごとに連結

=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &";"& D2),IF(F2="",CONCATENATE(C2&";"&D2&";"&E2),IF(G2="",CONCATENATE(C2&";"&D2&";"&E2&";"&F2),CONCATENATE(C2&";"&D2&";"&E2&";"&F2&";"&G2))))) 

VBAの中で、私は以下を使用しようとしています:

Range("M2").Select 
ActiveCell.Formula = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2" & "&""; """ & "&D2"),IF(F2="",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2",IF(G2="",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2" & "&""; """ & "&F2",CONCATENATE(C2" & "&""; """ & "&D2" & "&""; """ & "&E2" & "&""; """ & "&F2" & "&""; """ & "&G2")) 

でも、これは動作しません。

ActiveCell.FormulaR1C1 = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &"";""& D2),IF(F2="",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" 

を全体のコードのようにあります次のとおりです。

Sub PutBackTogether() 
' 
' PutBackTogether Macro 
' 

' 
Range("M2").Select 
ActiveCell.FormulaR1C1 = "=IF(D2="",C2,IF(E2="",CONCATENATE(C2 &"";""& D2),IF(2="",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" 
Range("M3").Select 
Columns("M:M").EntireColumn.AutoFit 
Range("M2").Select 
Selection.AutoFill Destination:=Range("M2:M147248") 
Range("M2:M147248").Select 
Columns("M:M").ColumnWidth = 17.29 
Selection.Copy 
Range("C2").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Application.CutCopyMode = False 
Columns("D:M").Select 
Selection.Delete Shift:=xlToLeft 
ActiveWorkbook.Save 
End Sub 

Can so私のエラーの文脈を簡単に特定できますか?

+0

あまりにもあなたがそこに持っている他のすべてのために

Range("M2").Formula = ... 

作品をお試しください& '' 'ではなく' '両方で動作するはずですが、前者はマッチングをより明白にするかもしれません。 – pnuts

+0

最後に 'D:M'列を削除していますが、数式は' M'列にあります – Slai

+0

正解ですが、式を取得したい場合は、コピーして列に貼り付けることを心配できますC.私は基本的にコードのすべての部分をチェックアウトしています。助けてくれてありがとう。 –

答えて

4

文字列をVBAに直接貼り付けることはできません。D2=""の周りの引用符は、数式に入れるのではなくVBAで解析されています。彼らはそのように、文字列に滞在するため

あなたは引用符でダブルアップしなければならない

ActiveCell.Formula = "=IF(D2="""",C2,IF(E2="""",CONCATENATE(C2 &"";""& D2),IF(F2="""",CONCATENATE(C2&"";""&D2&"";""&E2),IF(G2="""",CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2),CONCATENATE(C2&"";""&D2&"";""&E2&"";""&F2&"";""&G2)))))" 

範囲を使用して、直接の代わりに、あなたは、建物のマクロを選択/アクティブセルを継続したい場合は、まずそれを選択する検討します物事はすぐにあなたにうんざりし、下になるでしょう。

代わりの

Range("M2").Select 
ActiveCell.Formula = ... 

たぶん `&chrです(34)と` "`エスケープしてみてください

Range("M2").AutoFill Destination:= Range("M2:M147248") 
+0

範囲( "M2")。数式はうまくいきました! –

関連する問題