出産前後の痔にはご注意!

エクセルのマクロで数式を入力したい

エクセルのマクロでシート1のA1に
シート2のA1の値を表示させる数式を入力したいと思って

Sub tamesi()
Sheet1.Activate
Range("a1") = "=sheet2!a1"
End Sub

と書くと動作します

ここにIF文をいれてシート2のA1に値がないときは
シート1のA1には空白で返したいと思い
Sub tameshi2()
Sheet1.Activate
Range("a1") = "=if(sheet2!a1= 0,"",sheet2!a1)"
End Sub

と打つと動作しませんでした
アプリケーションの定義またはオブジェクトの定義のエラーです
と返ってきます。

いろいろやってみたのですが、なにせ勉強し始めで
よくわかりませんでした。

教えてください
よろしくお願いします

A 回答 (3件)

" の使い方の問題です。


Range("a1") = "=if(sheet2!a1= 0,"""",sheet2!a1)"

また、Rangeオブジェクトのプロパティを省略するとValueプロパティの意になります。
Range("a1").Formula = "=if(sheet2!a1= 0,"""",sheet2!a1)"
    • good
    • 0
この回答へのお礼

いろいろなマクロの組み合わせの中でこの問題がクリアできたことで
大きく前進することができました。
この通りの構文をうたせてもらいました
ありがとうございました

お礼日時:2010/02/07 22:10

["]の使い方を知らないからです。


"abc" なら文字列 abc。
"abc"" なら、"の使用方法に誤り。(文字列が閉じられていない)
"abc""" なら、文字列 abc" 。
2つ連打することで、先頭の"が打ち消されて有効な文字として認識されます。

数式を使用する場合は、Formula とする方がコードが解りやすくなります。.Value等でも記入は可能ですが作業を明示する事も大切です。
Range("a1").Formula
    • good
    • 0
この回答へのお礼

formulaを追加しないといけないですね。
そこらあたりも勉強になりました。
回答ありがとうございました

お礼日時:2010/02/07 22:07

空白を意味しているダブルクォート "" の前置された一方が数式の終了と解釈されているからです。



ダブルクォートの入った文字列は、4つ並べることでダブルクォート自身が文字列の一部にあると認識されるので、

Range("a1") = "=if(sheet2!a1= 0,""""""""",sheet2!a1)"

ならうまく行くはずです。自宅PCの Excel 2003 はこれで動作しました。

あと意識して数式扱いで入力したい場合は、

Range("a1") = ...

でなく

Range("a1").Formula = ...

を用いた方がいいでしょう。
    • good
    • 0
この回答へのお礼

わざわざ動作確認までしていただいてありがとうございました。
私も動作確認できました。
とても困っていたので助かりました
ありがとうございました

お礼日時:2010/02/07 22:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング