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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

7078閲覧

エクセルVBAにてテキストボックスの参照値を再計算したいです。

masa246

総合スコア17

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2017/04/15 11:53

編集2017/04/15 15:08

エクセル2007において、オートシェイプと参照式の入ったテキストボックスをグループ化したものを多数配置しており、そのシートを別のブックにコピーしたところテキストボックスの参照値が同期されず、調べたところ2007でのバグのようでした。

対策として、テキストボックスの数式欄に入りそのままENTERすると再度参照値が同期されるようになるのですが、すべてのテキストボックスにこの作業をコピーの度に行うのは現実的ではないのでVBAを用いて数式欄を更新できる状態にしようとしています。

グループ化されていないテキストボックスを全て一つずつ認識することができるところまではできたのですが、肝心な数式に入りそのまま更新する方法がわかりません。
下記コードの※の部分に入れるコードをお教えいただけると幸いです。
下記コードでは削除を行い存在するグループ化されていないテキストボックスが全て削除されることを確認しました。

また、このコードをチェックしている環境はエクセル2003であることが原因だと考えているのですが、グループ内のテキストボックスは下記コードでは削除されませんでした。
この部分に関してもエクセル2007でも明らかに不可能な場合はご享受いただきたいと思います。

エクセル2007は職場での環境で、2003は自宅の環境です。
テキストボックスの参照先は同じシート内です。
シートのコピー後にリンクの設定でコピー元のリンクとなっているのをコピー先のリンクに変更もしています。

よろしくお願いします。

<追記1>

再計算ボタンは試しましたがシートのコピーで同期されなくなったテキストボックスは変わらず同期されないままでした。
また、設定で自動計算になっていることも確認しました。

VBA

1Sub test() 2 Dim i As Long 3 Dim s As Long 4 With ActiveSheet.Shapes 5 For i = .Count To 1 Step -1 6 If .Item(i).Type = msoTextBox Then 7 .Item(i).Delete※※※※※※※※※※※※ 8 ElseIf .Item(i).Type = msoGroup Then 9 For s = .Item(i).GroupItems.Count To 1 Step -1 10 If .Item(i).GroupItems(s).Type = msoTextBox Then 11 .Item(i).GroupItems(s).Delete※※※※※※※※※※※※ 12 End If 13 Next s 14 End If 15 Next i 16 End With 17End Sub

<追記2>

下記コードで解決できるかもしれません。手元にエクセル2007がないので確認できないのですが、確認出来次第こちらに報告させていただきます。
また、どなたか2007をお持ちの方がいらっしゃいましたらご確認していただけると幸いです。

VBA

1Sub test() 2 Dim i As Long 3 Dim s As Long 4 With ActiveSheet.Shapes 5 For i = 1 To .Count Step 1 6 If .Item(i).Type = msoTextBox Then 7 .Item(i).Select 8 Selection.Formula = Selection.Formula 9 ElseIf .Item(i).Type = msoGroup Then 10 For s = .Item(i).GroupItems.Count To 1 Step -1 11 If .Item(i).GroupItems(s).Type = msoTextBox Then 12 .Item(i).GroupItems(s).Select 13 Selection.Formula = Selection.Formula 14 End If 15 Next s 16 End If 17 Next i 18 End With 19End Sub 20

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

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

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

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

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

guest

回答2

0

自己解決

本文の最後に追記させていただいたコードで無事に再同期することができました。
ありがとうございます。

投稿2017/05/01 05:50

masa246

総合スコア17

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

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

0

課題がいまいち掴めておらず、具体的なコードの提示でなく申し訳ないのですが、もしこれが解決に繋がればと思い回答致します。
解決に繋がらなければ申し訳ありません。

Excelには数式の再計算を実行するボタンがあります。
参考リンク→http://incloop.com/excelで計算結果が自動再計算されないとき/

都度再計算を実行する必要はないのであれば、上記で解決には繋がりませんでしょうか。

投稿2017/04/15 12:11

akabee

総合スコア1947

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

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

masa246

2017/04/15 13:33 編集

ご回答頂きありがとうございます。 再計算ボタンは試しましたがシートのコピーで同期されなくなったテキストボックスは変わらず同期されないままでした。 また、設定で自動計算になっていることも確認しました。 コピーしたシートのテキストボックスの参照を再度同期させるには今のところ、数式欄に入って数式をもう一度決定するといった方法しか見つかっておりません。 よろしくお願いします。
akabee

2017/04/15 13:51

解決に至りませんでしたか・・。残念ながらこれ以上は私では力になれそうにありません。 ポイントはこの作業の頻度だと思うのですが、1オペレーション毎に数式の更新を実施する必要があるのですかね。私なら、初回だけやればいいのであれば最悪の選択肢として全部手作業で数式を選択するということも視野に入れます。 次にこの事象がVBAで回避できるのかどうかですが、「肝心な数式に入りそのまま更新する方法がわかりません」とおっしゃっているように、私自身も回避可能かどうかが分かりません。同様の問題に悩んでいる方も多いようですね・・・。
masa246

2017/04/15 14:45

ご回答ありがとうございました。 ちなみになのですが、 ActiveSheet.Shapes.Item(i).Formula ができれば解決するかもしれないのですが、この「ActiveSheet.Shapes.Item(i)」には.Formulaが使えないようなのです。 「ActiveSheet.Shapes.Item(i)」から数式を参照/更新する方法はご存じありませんか?
masa246

2017/04/15 15:03

申し訳ありません。自己解決できたかもしれません。 エクセル2007で試してみないとわからないのですが、シートをコピーした後にリンクをコピー先のブックに変更して、本文追記のコードを実行すれば解決かもしれないです。 現在手元に2007がない為確認できないのですが確認できたらまたお返事させていただきます。 ありがとうございます。
akabee

2017/04/15 15:08

(おそらく参照されたかと思いますが)Shapes.item(i)の戻り値はShapeで、そのメンバにFomulaは無いので無理でしょうね。https://msdn.microsoft.com/ja-jp/library/office/ff835842.aspx 通常の使い方としてはオートシェイプから数式を参照する、しかもVBAからというのは想定されていないと思われます。 ここからは課題解決に直結はしないのですが、実はそこが良く分かっていないところです。 オートシェイプということは図形ですよね?「オートシェイプ」「参照式の入ったテキストボックス」「参照元?の数式」「リンク」「グループ化」がどう関係しているのか。。。 事象として「数式を再度ENTERしないと反映されない」ということには出くわしたことがあるため回答はしてみたのですが。 解決かもしれないようですね。何もできていませんが、もしお時間あれば結果お聞かせください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問