• ベストアンサー

(Excel VBA) セルを参照してオートシェイプの形を変える方法

(Excel VBA) セルを参照してオートシェイプの形を変える方法 Chartのように、セルを参照して動的に変わる図面を作ろうとしています。 シートのイベントプロシージャや、適当なセルに入れた関数の再計算で、 データセルの変更を検知すれば、実装は可能です。 ただ、シートから切り離せないのが気持ち悪く、ずっと考えています・・・ なにか、よい方法はないでしょうか?

  • ap_2
  • お礼率83% (5/6)

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

ちょっと思ってたのと違いました。 補足要求をしておきながら、お力になれずすみません。 別の方のアドバイスをお待ちくださいm(_ _)m 何か書けるとしたら。 >シート側に処理が入ることで、シートと密接に関係することになり... これは、例えばシートモジュールにイベントコードを書く事を回避できれば良かったりするなら '標準モジュール Option Explicit Dim cls As Class1 Sub test_on()   Set cls = New Class1 End Sub Sub test_off()   Set cls = Nothing End Sub 'Classモジュール Class1 Option Explicit Private WithEvents ws As Excel.Worksheet Private Sub Class_Initialize()   Set ws = ActiveSheet End Sub Private Sub Class_Terminate()   Set ws = Nothing End Sub Private Sub ws_Calculate()   MsgBox ws.Name & "_Calculate" End Sub Private Sub ws_Change(ByVal Target As Range)   MsgBox Target.Address(0, 0, , True) & "_Change" End Sub こんな感じの事をなさりたいという事なのでしょうか。 そんなに詳しくないのでどこまでの事ができるか定かでないですが 『汎用的』な『オブジェクトの定義』...という話になると、 いずれにしてもクラスを使う事になるかと思うのですが。

ap_2
質問者

お礼

そういえば、クラスモジュールでイベント登録できるんでしたね・・・ たしかに、思っていた以上に使えそうですね。 >いずれにしてもクラスを使う事になるかと思うのですが。 とは思い、調べてはいるのですが、調べるほどに分からないこと が増えて混乱しちゃってます。 本でも買って、まじめに勉強してみます^^; ありがとうございます。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

#補足要求です。 質問内容は、 『セルを参照してオートシェイプの形を変える方法』でしょうか。 それとも 『図形をシートから切り離す方法』でしょうか。 >シートから切り離せない.. の意味がちょっとわからないので補足説明お願いします。 最終的に、その「図面」をシート上の図形ではなくて何かのファイルで保存したいという事ですか?

ap_2
質問者

補足

そうですね、説明が足りなかったです。 Chartのように、セルを参照してオートシェイプの形を変えたいです。 作るだけなら作れますが、より汎用的に使える方法を探しています。 VBAは、Excelのオブジェクトを制御するだけで、オブジェクトの定義そのものは作れませんが、なんとかして、Chartのようなものを擬似的に作れないかと。 (ChartにできてVBAじゃ難しいこと)  1. 複数のシェイプが、ひとつのオブジェクトに格納されている  2. オブジェクトがパラメータをもつ  3. オブジェクトが再計算の契機をもつ 1はブロック化、2は見えないTextBoxに格納で代用すればよいかなと。 問題は3・・・、DrawingObjectのFormulaパラメータには計算式を登録できない。SeriesはVBAからじゃ生成できない(たぶん)。何か、できそーでできないんです。 データセルの変更を検知するための手段として、イベントを使うなどすれば、動的に図面を変えることはできますが、シート側に処理が入ることで、シートと密接に関係することになり、複製や削除、シートをまたいでの移動が面倒になります。 再計算のロジックがわからないですが、Range.Formula、Series.Formulaだけが対象なんですかねぇ・・・できそうでできないのがもどかしいです。

関連するQ&A

  • EXCEL2007のオートシェイプについて

    EXCEL2003以前のバージョンで作成した図面フォーマットで、 枠線をオートシェイプで作成しているファイルがあるのですが、 EXCEL2007で一度開き保存し、 再度EXCEL2003以前のバージョンで開くと枠線のオートシェイプがテキスト属性を持ってしまい、 枠内をクリックしようとしても、 枠線オートシェイプのテキストを選択してしまい、 枠内のセルをマウスで選択する事が出来ない現状が発生しています。 暫定回避方法としてカーソルキーで変更したいセルまで移動する、 または、枠線を引き直すの2つの方法は発見しましたが、 どちらも作業効率が悪く非常に困っているので、打開策ありましたら教えてください!!!

  • エクセルのセルにオートシェイプを参照したいのですが

    エクセルのセルにオートシェイプの図形を参照したいのですが何か方法はあるのでしょうか? 出来ればいくつかのオートシェイプをVLOOKUPで呼び出すような方法が理想です。 良い方法ご存知の方宜しく御願いします。

  • Excel2003 オートシェイプにハイパーリンクは?

    いつもお世話になっております。 またまたどなたかお知恵をお貸し下さい。 今Excel2003で資料作成中なのですが、Sheet1のオートシェイプからSheet2のオートシェイプでジャンプするようなハイパーリンクを貼りたいと思っているのですが、ハイパーリンクの設定画面だとリンク先がセルしかできないようで・・オートシェイプ同士のリンクはできないのでしょうか? よろしくお願いします。

  • Excelを2つ起動してセルを参照する方法

    ご質問させていただきます。 Excel2007を2つ起動して、他方のシートのセルを参照したいのです。 具体的に説明いたしますと、1つ目のExcel2007をExcel(1)と呼び、2つ目のExcel2007をExcel(2)と呼ぶことにします。Excel(2)のsheet1のA1セル~A48セルまでcalculateイベントでリアルタイムに変化する値が入っています。それらの値をExcel(1)のsheet2のB1セル~B48セルで参照したいのです。 できるのでしょうか? どなたか教えていただけないでしょうか? よろしくお願いいたします。 もしVBAを使わなくてもできるようでしたら、そちらの方法も教えてください。 よろしくお願いいたします。

  • ExcelVBA オートシェイプについて

    セルの選択した場所のとなりにオートシェイプを移動させるマクロを組みたいと思っています 見かけがまったく同じシートが4枚あり、そのシート全てに同じマクロを指定したいのですが、オートシェイプの名前の指定の仕方が分からなく困っています SelectionChangeイベントでオートシェイプ移動のマクロを動かしているので、同じ名前のボタンならよいのですが・・・ なにかよい方法はないでしょうか?

  • 特定のオートシェイプだけ削除するVBA

    エクセルで一枚のシートに複数のオートシェイプを使用したものがあります。 オートシェイプを使用しているセルの範囲は (A1:L22)と(M1:U22)の二箇所なのですが、 VBAで(A1:L22)の範囲にあるオートシェイプのみ削除する事は可能でしょうか? (A1:L22)内のオートシェイプは作業内容により毎回変わるので 形などは特定できません。 また、オブジェクトの選択で範囲指定をした後削除という方法もあるのですが この削除の作業の前後に他の作業のVBAを使用しているので VBAで削除が出来ればと思います。 よろしくお願いします。

  • Excel2000VBAでのセル参照について

    Excel2000のVBA自動記録である構文をつくりました。 その中で、セルやレンジを特定しているのですが (A1)や(A1:B10)とか.. その後シートの行や列を追加あるいは削除した時に、この部分を自動的に対象のセルやレンジに書き換わる方法というのはあるのでしょうか? (関数式なんかは、自動で参照するよう書き換わるのですが、そのようなイメージです) 初心者です。何卒よろしくお願いします。

  • エクセルVBAオートシェイプがあったら、の書き方

    皆さんこんにちは。 エクセルVBAの初心者です。 IFを使った条件分岐が私には難しかったので SELECTCASEを用いてみようと思うのですが条件の書き方が分かりません。 やりたい事は セルA1が「文字が入っていない且つオートシェイプが入っていない場合」のみ アクション(オートシェイプ☆を貼る)を起こしたい、です。 イメージ的にこうなるかな?と思いコードを作成しましたが ケース2の「オートシェイプがあったら」という条件の書き方が分かりません。 Sub オートシェイプ貼り付け()   With ThisWorkbook.Worksheets("Sheet1")   Select Case True     Case .Range("A1").Value <> ""     Exit Sub     Case オートシェイプがあったら     Exit Sub     Case Else       オートシェイプ☆を貼る   End Select End Sub オートシェイプの有無を条件にするにはどのような書き方をすれば良いでしょうか?

  • EXCEL:オートシェイプの値をセルに表示

    EXCELのオートシェイプの値を他のセルに反映させる事は可能でしょうか? セルの値をオートシェイプに反映する方法は知っているのですが、 逆の方法がわかりません。 どなたかご教授願います。

  • Excel2007以降 オートシェイプの不具合?

    Excel2003(WindowsXP)で作った書式をExcel2007(Windows7)で開くと、オートシェイプの書式が変わってしまいます。 あるセルに入力した文字をイコールでオートシェイプに表示し、そのオートシェイプを別に作成したボタンで表示・非表示(VBA処理)できるように作成しました。 この時、フォントは”MS P明朝”で赤字表示に設定しています。 Excel2003で作成し数人に配布して使用しようとしたところ、Excel2007以降のPCでのみフォントが”MS Pゴシック”で黒字表示に勝手に変わってしまいます。 Excel側の不具合なのでしょうか? 何かご存知の方がおられましたら教えてください。 宜しくお願いします。