- PR -

変数に""を入れたい

1
投稿者投稿内容
あるあるふぁ
会議室デビュー日: 2004/04/20
投稿数: 9
投稿日時: 2007-01-10 13:50
EXCELのVBAで以下のような文を書いて
連続したセルに計算式を代入したいと考えています。
例:B15のセルに「=IF(D15="",A15,0)」
  B16のセルに「=IF(D16="",A16,0)」

For i = 15 To lastRow Step 1
Cell_B = "b" & i
Range(Cell_B).Formula = "=IF(D" & i & "="",A" & i & ",0)"
Next

しかし、このまま動かしますと
「=IF(D15=",A15,0)」が代入されてしまいます。
""を区切り記号としてではなく
文字列として代入したいのですがどのようにすれば出来るのでしょうか?
色々探したりやってみましたが出来ませんでした。
もしかしてすごく単純なことをきいているのかもしれませんが
どなたかご教授お願いします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-10 14:00
VBで "〜" の中に " を書く場合、"" というように2個続けて書くことで " という文字
を認識させています。
よって、

>「=IF(D15="",A15,0)」
の場合、

Range("B" & i).Formula = "=IF(D" & i & "="""",A" & i & ",0)"

となります。

[ メッセージ編集済み 編集者: Blue 編集日時 2007-01-10 14:02 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2007-01-10 14:28
ちなみに、B15〜BlastRowまで同じような式を入れるのであれば、

Range("B15:B" & lastRow).FormulaR1C1 = "=IF(RC[2]="""",RC[-1],0)"

とすれば、文字列の結合もループ文もなくすっきりかけます。


追記:

Formulaでも出来ます。(ただ、同行であっても行の指定をしないといけない。)

Range("B15:B" & lastRow).Formula = "=IF(D15="""",A15,0)"

[ メッセージ編集済み 編集者: Blue 編集日時 2007-01-10 14:42 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-10 14:50
わかりにくいと感じるのであれば、

コード:

    Public Const DoubleQuote = """"


と定義して、

コード:

    str = DoubleQuote & "AAA" & DoubleQuote


のようにすれば良いでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
あるあるふぁ
会議室デビュー日: 2004/04/20
投稿数: 9
投稿日時: 2007-01-11 10:41
皆さんありがとうございます。
"が4つ必要なのですね・・・
非常に助かりました。
C#.NETや
VB.NETやら
WebアプリやらWindowsアプリやらで
それぞれ違う部分があるので
大変です。
そのうえあまりやりたくないエクセルでのVBAを作ってます。
皆さんのご協力に感謝します。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-11 10:54
蛇足だとは思いつつ・・

引用:

あるあるふぁさんの書き込み (2007-01-11 10:41) より:
皆さんありがとうございます。
"が4つ必要なのですね・・・
非常に助かりました。
C#.NETや
VB.NETやら
WebアプリやらWindowsアプリやらで
それぞれ違う部分があるので
大変です。


本来は言語仕様を確認すべきですが、二重引用符で括った中で二重引用符を表現するときに2つ重ねて書くのはポピュラーな仕様だと思いますし、「""」が「"」になったという時点で気付いて欲しいところです。
1

スキルアップ/キャリアアップ(JOB@IT)