• ベストアンサー

ExcelでVBAを利用してオートシェイプ情報取得

Excelのオートシェイプをテキストデータに変化するVBAを作成したいです ただし対象となるオートシェイプは複数のオートシェイプがグループ化された グループオブジェクトになっています それら特定のパターンを持つオートシェイプオブジェクトの一群があり 1つ1つには想定される名称が存在します 具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを 作成し、それらにそって対応するテキストを配置していきたいというものです このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか よろしくお願いいたします

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

質問の意味をとらえきれていないかと思いますが参考にしてください。 まず、表題の「ExcelでVBAを利用してオートシェイプ情報取得」と最初にある「Excelのオートシェイプをテキストデータに変化するVBAを作成したいです」が異なることを言っているように思えます。『情報取得』と『変化』です。「テキストデータに変化する」がどんな意味なのか分からないからかもしれません。テキストデータに「円」と書かれていたら「図形の円」にする? >このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか これは、  1.オートシェイプの情報をうまく拾う方法  2.テキストデータと紐づける方法 の2つでしょうか 「1.オートシェイプの情報をうまく拾う方法」については参考にモジュールを作ってみました。 「2.テキストデータと紐づける方法」については、  オートシェイプの情報がどのようなものか分からないですが、オートシェイプのテキストをセルを参照する形式にしてみてはどうでしょうか。添付図の場合、「楕円」のテキストは「=A11」で「明日は」になります。オートシェイプのテキストの算式を使った登録は「セル参照」のみで、複雑な計算式は登録できないのでこのようにしています。複雑な内容を登録したい場合はセル側で整形したりしています。 登録内容を変えたいときはセルの内容を変更します。 >Excelのオートシェイプをテキストデータに変化するVBAを作成したいです。ただし対象となるオートシェイプは複数のオートシェイプがグループ化されたグループオブジェクトになっています  「テキストデータに変化する」がどんな意味なのか分かりませんが、「オートシェイプの情報をうまく拾う方法」として、グループ化された複数のオートシェイプから左から順にテキストを取り出して1行目に表示してみました。VBAでテキストを拾ってくる例です。オートシェイプの位置を変えれば再度マクロを実行すれば出力が変わります。 >具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを作成し、それらにそって対応するテキストを配置していきたいというものです  この説明から、先にグループ化された複数のオートシェイプ(テキスト入力済み)があり、そのテキストを順に表示するのかなと考えた次第です。 「シートのコードウィンドウ」 グループ化されたオートシェイプを選択して実行します。 添付図にはコマンドボタンがありますが、ボタンから実行する場合は、コマンドボタンの「TakeFocuusOnClick」プロパティを「False」にしてください。 Sub オートシェイプのテキスト出力()   Dim shp As Shape 'オートシェイプ   Dim i As Integer, j As Integer 'カウンタ   Dim n As Integer  'オートシェイプの個数   Dim potLeft() As Single 'オートシェイプの左位置   Dim Sort() As Integer  'オートシェイプの左位置の順   On Error GoTo ErrorTrp      With Selection.ShapeRange     If .Type = msoGroup Then 'グループ化されていたら       n = .GroupItems.Count       ReDim potLeft(n), Sort(n)              For i = 1 To n         potLeft(i) = .GroupItems(i).Left         Sort(i) = 1         For j = 1 To i - 1 '左位置を取り込んでソート           If potLeft(j) >= potLeft(i) Then             Sort(j) = Sort(j) + 1           Else             Sort(i) = Sort(i) + 1           End If         Next       Next     End If        For i = 1 To n       For j = 1 To n  'ソート順に出力する         If Sort(j) = i Then           Exit For         End If       Next       '1行目に順に出力       Cells(1, i) = .GroupItems(j).DrawingObject.Characters.Text     Next   End With   Exit Sub ErrorTrp: End Sub

trotrotron
質問者

お礼

丁寧な回答ありがとうございます 私がやりたかったことをほとんど実装していただけた感じで大変参考になりました テキストとの紐付けの箇所については、名前の定義を利用して、名前とテキストを リスト化して利用しました 返事が遅れてしまい申し訳ありません ありがとうございます

関連するQ&A

  • エクセル オートシェイプ

    こんばんは! エクセルのオートシェイプについての質問です。 会社の稟議書を作成していて、上のほうに、オートシェイプで部長や課長のハンコを押す欄を作ろうと思ったのですが、うまくいきません・・・ エクセルで罫線を引いて、セル内に文字を入れるのは簡単なのですが、オートシェイプで作成する場合は、どのようにしたらよいでしょうか・・・ 四角形を挿入して、縦に二本オートシェイプで直線を引いて、横にも一本オートシェイプで直線を引いて、それをグループ化したまではよかったのですが、テキストをどのように入れたらよいのか分かりません・・・ 右クリックしても、テキスト追加できず、悩んでいます・・・ どなたかお分かりでしたら、お願いいたします。

  • excel VBA オートシェイプのテキスト段落

    おはようございます。 【オートシェイプ内のテキスト行間を指定するプロパティ】 オートシェイプ内のテキスト行間を指定するプロパティはありますでしょうか? excel 2007で オートシェイプにテキストをいれた場合、 右クリックすると「段落」という項目がでてきて、 オートシェイプ内のテキストの行間を指定できたのですが、 オートシェイプ内のテキストの行間をVBAで指定することはできるのでしょか? (マクロを登録してもなにも記述されていないので、困っています。) 最終的にはアクティブブックの全シートのオートシェイプの行間を変更する VBAにしたいと思っています。 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。

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

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

  • VBAでのオートシェイプの整列機能について質問です。

    VBAでのオートシェイプの整列機能について質問です。 VBAで複数のシェイプを作成しました。 それを水平方向や垂直方向に整列させたいと考えています。 各グループアイテムを選択後 水平方向(垂直方向)に整列 全て選択してグループ化 みたいな感じにしたいと考えています。 アドバイスよろしくお願いいたします。m(_ _)m

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

    基本的なことをお聞きします・・・ WORDなどは、文字の上にオートシェイプを重ねたとき テキストとの関係の設定(背面・前面)ができますよね。 EXCELの場合は、セルに入ってるデータの上に オートシェイプを置いた時、テキストがオートシェイプの前に来るという概念はありませんよね? それはやはり「セル」というものが特殊なものだからですか? オートシェイプの塗りつぶしをなしにするか、 透明度を高くして、セルの文字が見えるようにする しか方法はないんですよね? 「なぜ??」と理由を聞かれたら どう説明してあげるのが適当ですか?

  • パワポで作ったオートシェイプをワードへ

    パワーポイントでオートシェイプを作成し、それをワードへと貼り付けたいんです。 パワポのほうが作成しやすいので。 複数のオートシェイプを組み合わせたりテキスト挿入したりやや複雑なやつです。 ですがそれをワードへと貼り付けようとすると、テキストやオートシェイプの位置が微妙にズレてしまい、図が崩壊してしまうんですが、そうならないように貼り付ける方法は無いんでしょうか? ちなみにオートシェイプはグループ化しています。 オートシェイプってオフィス系で共通なのでそのまま貼り付けれるはずだと思うんですが・・。 ちなみに、「図として保存」したのち、その図を貼り付けようとすると、真っ暗な図になってしまいます・・。 しょうがないのでいつもはプリントスクリーンしてトリミングしてやるっていうすごい原始的な方法をやっているんですが、それだと図やフォントの画質が劣化してしまいますんで・・。 ご存知の方がいましたらお願いします。

  • エクセル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 オートシェイプの有無を条件にするにはどのような書き方をすれば良いでしょうか?

  • エクセルのオートシェープについて

    エクセルのオートシェープで「グループ化ではなく、図形の結合」って出来ないですか? (○と△を合体させて一つの金魚のような図形にすることです。) VBAを使う方法でもそのようなことが出来ればありがたいのですが、そのサンプルプログラムを探しても見当たりませんでした。 方法知ってる方いましたら教えてください。

  • EXCEL VBA オートシェイプナンバーのリセット

    EXCEL2000 VBAの初心者です。 エクセル表の数字(位置座標や大きさ)に従い、数十個のオートシェイプの丸や四角を、何度も配置・消去させるプログラムを作っています。 一度に多くのオブジェクトを配置・消去しているので、自動発生するオブジェクトの番号が、現在20000程度になっています。 現状では問題ないのですが、自動発生番号に限りがあるとエラーが出ると思います。そこで、  1.オブジェクトの自動発生番号には限りがあるのか、  2.オブジェクトの発生番号を1にリセットすることは出来るのか。 を教えていただきたく、よろしくお願いいたします。

  • エクセル2007のオートシェイプを使って作成した図をグループ化しようと

    エクセル2007のオートシェイプを使って作成した図をグループ化しようとしても、書式タブの「配置」がアクティブにならないのですが何故でしょうか?

専門家に質問してみよう