- ベストアンサー
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 こんな場合はどんな方法で処理すればよろしいですか? アドバイスお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(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)関数式が””で囲まれていない が気になりますが、問題ではないでしょうか。
その他の回答 (3)
- papayuka
- ベストアンサー率45% (1388/3066)
こう言う意味? ws.Range("G15:G32,G36:G53,G57:G74") = F15 * 3 / 256 ↓ ws.Range("G15:G32,G36:G53,G57:G74") = "=F15 * 3 / 256" あと、変数k は意味をなしてませんね。
お礼
>あと、変数k は意味をなしてませんね。 ご指摘ありがとございます。 For文と変数の使用がまだまだ使いこなせて無いようです…。 もう少しがんばってVBA使いこなせるよう成りたいですね。 アドバイスありがとうございました。
- keikan
- ベストアンサー率42% (75/176)
書式に問題があるのでは? 小数点以下の桁数が表示されていなかったりしませんか?
- chupark
- ベストアンサー率41% (90/218)
Excelのセルの名前とVBAで使用できる変数がごっちゃになっているのではないでしょうか? VBAの中で何の定義もなしにいきなり F15を登場させたのがまずいのではないでしょうか。 すなわち、F15はVBA上では何にも入っていないので0が帰ってくるのではないでしょうか。 ws.Range("F15").value * 3 / 256 などとやってみてはいかがでしょう?
お礼
ご指摘されている通りでした。 (2)関数式が””で囲まれていない → ””で囲む事により、 結果が得られるようになりました。 アドバイスありがとうございましたm(_ _)m