質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

5960閲覧

セルに式を入れても値が反映されません。

skjdujr9djhf

総合スコア28

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/04/11 07:27

編集2018/04/12 00:10

前提・実現したいこと

Excelに(マクロファイル)おいてセルに式を入れても値が反映されません。

今、セルE6:G6とJ5:AD5はそれぞれセルが結合されています。
前者のセルの書式設定:その他
後者のセルの書式設定:日付(種類は*yyyy/m/dd)

前者にはExcleの式で「=C12」
後者にはExcleの式で「=Today()」を入力しています。

ですがどちらも0と表示され、セルの書式変更を行っても0のままです。
C12セルには「'TEST」という値(シングルクオーテション+文字列)が入っています。
F2+Enterを押すと値がどちらもでてきます。

上記の話はマクロを実行する前に既にそういう状態になっています。
元のマクロを実行させて、最後の処理でセルの書式を再定義するコードを追加(以下のソース)
して結果を見ると、E6:G6セルは0000と表示され、数式バーの値は0、J5:AD5は1900/0/0と
表示され、数式バーの値も1900/0/0となっています。

E6:G6は参照しているセル(C12)の値が文字列ではない何かになっているんでしょうか?
こうなる原因を教えて頂けないでしょうか。

該当のソースコード

VBA

1 '結合セルの書式を再定義する 2 Dim r1 As Range 3 Dim r2 As Range 4 5 Set r1 = Range("E6:G6") 6 Set r2 = Range("J5:AD5") 7 8 r1.Value = r1.Value 9 r2.Value = r2.Value

補足情報(FW/ツールのバージョンなど)

Office365のExcle2016 バージョン1803です。

数式タブの計算方法の設定は「自動」に設定しています。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2018/04/12 01:35

質問では「前者(にはExcleの式で「=C12」」と書かれていますが、コードでは”r1.Value = r1.Value”となっています。質問の内容とコードが、ずれていませんか?
skjdujr9djhf

2018/04/12 01:40

ExcleでC12にデータが入っている状態で、E6:G6の数式に「=C12」と入れているのですが値が参照されないので、VBAでr1をSetして「r1.Value = r1.Value」としていますが結果は変わらなかったということです。
coco_bauer

2018/04/12 03:10

”値が参照されないので”というのが、どうゆう状況なのか理解できません。=C12という数式をいれても、値は0のままなのですか? 質問のコードの「r1.value =r1.value 」を「r1.value = range("C12").value」に換えると、"E6:G6"に Test と表示されますか?
guest

回答2

0

自己解決

Sub test

Range("E6").Value = "=C12" Range("J5").Value = "=TODAY()"

End Sub

とModule1に記述して直接式を入れるようにしてマクロを実行したところ、
目的のセルに値が入るようになりましたので自己解決しました。

投稿2018/04/12 05:06

skjdujr9djhf

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ExcelVBAer

2018/04/12 05:27

本当に解決しましたか? マクロを実行した後、C12の値を変えると、E6の値も変わりますか? 日付が変わった後で該当ブックを開くと、Today関数が動いて日付けが今日の日付に変わりますか? もし数式を入れてから、.value =.value としているのであれば、 そもそも数式を入れる必要は無く、直接値を入れればいいのでは? 根本原因を解決しない限り、何かとバグに悩まされ続けますので。
skjdujr9djhf

2018/04/13 00:05

解決しています。 C12の値を変えると、E6の値も変わります。 またブックを開くと開いた時点の日付になります。
ExcelVBAer

2018/04/13 00:31

よかったですね! けど、そうなると、なぜ数式が0になっていたんだか。。。 再現しないことを祈ってます
guest

0

Excelには計算式の計算を「自動」「手動」と設定が出来るところがあります。
これが「手動」になっていることが原因です。
「数式」タブの中に「計算方法の設定」がありますので、これを自動にしてみてください。
この設定は、ファイル単位ではなく、Excelそのものの設定なので
ここが「手動」になっている限り、どのファイルを開いた時も
計算式の入ったセルには「最後に保存された時に表示されていた値」が表示されるのです。
例)計算方法が「手動」になっている場合
A1 に 「あいうえおあ」 と設定し、
B1 に 「=A1」 と入れたとします。
B1 は、「式の入力直後」は 「あいうえお」 と表示されますが、
このあとA1 の値をどんなに変更しても「再計算実行(これも数式タブにあります。F9でも実行できます)」を行わない限り、B1には「あいうえお」が表示されています。
ちなみに、「F2+Enter」はセルに式を入れ直したのと同じ動作なので、「式の入力直後」に値が表示されているだけです。


質問を勘違いしていたようなので、訂正と追記をします。

元々の計算式の結果が「0」になることは、別問題ですが
(計算式を、VBAで設定しているのであれば、そこらへんのコードとかを掲載してもらえたら原因が見つかるかもです)

とりあえず。

最後の処理でセルの書式を再定義するコードを追加(以下のソース)
して結果を見ると、E6:G6セルは0000と表示され、数式バーの値は0、J5:AD5は1900/0/0と
表示され、数式バーの値も1900/0/0となっています。

は、

vba

1r1.Value = r1.Value

で 値の入れ直しているからです。

コードには、'結合セルの書式を再定義する とコメントが書かれていますが、
r1.valueで取得できるのは「値」です(計算式でも、書式でもないです)
そして、r1.valueに設定できるのは「値」です(計算式は入れられますが、書式は入れられません)

元々の計算結果として表示されているのが「0」なので、
「入っていた計算式」を、「表示している値=0」で上書しているので、動きとしてはいたって通常です。

なお、「E6:G6」のセルが「0000」になるのは、書式設定「その他」でさらに細かい設定が選べるはずなので、それが0000と表示されるように作用しているのではないでしょうか?

「J5:AD5」は日付の初期を設定しているとのことですが、日付書式のセルに0を入れると「1900年1月0日」みたいな値になるのがExcelの仕様ですね。

投稿2018/04/11 10:35

編集2018/04/12 02:53
mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skjdujr9djhf

2018/04/12 00:09

画像の箇所ですよね? 最初はここが手動になっているのかと疑いましたが、自動になっていても上記のような状態となります。 そのセルに対して、再計算実行を押しても値が変わらない状態です。
skjdujr9djhf

2018/04/12 05:08

なるほど。 r1.Value = r1.Valueはあくまで値の入れ直しなので、元の値が0であるならば0が代入され、 0として表示されるのは当然ですね。 ちなみにE6:G6セルの書式を標準にしても0のままでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問