• ベストアンサー

Excel VBA 計算式を代入するには?

計算式が一部ミスっていまして、計算式を修正したいのですが、中々上手くいきません。結果は全部"0"で返ってきます。 ソースは以下になります。 Sub 全て修正() Dim ws As Worksheet k = 1 For Each ws In ActiveWorkbook.Sheets ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 k = k + 1 Next End Sub 計算式は 『 F15 * 3 / 256 』 となのですが、 F15 では関数処理をしており、更に元データは以下のような関数処理をそれぞれ行っている状態です。    C列        D列    E列   F列    データ      LIGHT()  LEFT() HEX2DEC() F50A0000000281  000281   0002    2 こんな場合はどんな方法で処理すればよろしいですか? アドバイスお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

(1)エクセルVBAでは数式はRange(1つのセル).Formula="=A1+1"のように、具体的(絶対的)に A1のようにいれます。 Range(2つ以上のセル)Formula=(何かの表現)も出来る。 値の場合 Sub test01() Range("A1: A5") = "abc" End Sub は可能。 式のな場合は Sub test01() Range("A1: A5") = "=B1+1" End Sub でA2には=B2+1のように変化させてくれる。 Sub test01() Range("A1: A5,A10:A15") = "=B1+1" End Sub の場合はA1:A5、A10:A15について、正しく式を変化させてくれる。 以上で複数セルへの同型の式の一度でセットと、セル変化 がOKであることをチェックしました。 >F15 では関数処理をしており、更に元データは以下のような関数処理をそれぞれ行っている状態です。 使っているセルの値が、直接入力されたものでの、関数で 計算されたものでも関係ありません。関数でF15と言うときのF15はそのセルの「値」だけを問題にしてます。 ○本件ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 とありますが、 (1)Formulaがない (2)関数式が””で囲まれていない が気になりますが、問題ではないでしょうか。

u-mesh12
質問者

お礼

ご指摘されている通りでした。 (2)関数式が””で囲まれていない → ””で囲む事により、 結果が得られるようになりました。 アドバイスありがとうございましたm(_ _)m

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

こう言う意味? ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256        ↓ ws.Range("G15:G32,G36:G53,G57:G74") = "=F15 * 3 / 256" あと、変数k は意味をなしてませんね。

u-mesh12
質問者

お礼

>あと、変数k は意味をなしてませんね。 ご指摘ありがとございます。 For文と変数の使用がまだまだ使いこなせて無いようです…。 もう少しがんばってVBA使いこなせるよう成りたいですね。 アドバイスありがとうございました。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.2

書式に問題があるのでは? 小数点以下の桁数が表示されていなかったりしませんか?

  • chupark
  • ベストアンサー率41% (90/218)
回答No.1

Excelのセルの名前とVBAで使用できる変数がごっちゃになっているのではないでしょうか? VBAの中で何の定義もなしにいきなり F15を登場させたのがまずいのではないでしょうか。 すなわち、F15はVBA上では何にも入っていないので0が帰ってくるのではないでしょうか。 ws.Range("F15").value * 3 / 256 などとやってみてはいかがでしょう?