- ベストアンサー
ExcelでVBAを利用してオートシェイプ情報取得
Excelのオートシェイプをテキストデータに変化するVBAを作成したいです ただし対象となるオートシェイプは複数のオートシェイプがグループ化された グループオブジェクトになっています それら特定のパターンを持つオートシェイプオブジェクトの一群があり 1つ1つには想定される名称が存在します 具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを 作成し、それらにそって対応するテキストを配置していきたいというものです このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか よろしくお願いいたします
- trotrotron
- お礼率32% (36/111)
- Visual Basic
- 回答数1
- ありがとう数2
- みんなの回答 (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
関連するQ&A
- エクセル オートシェイプ
こんばんは! エクセルのオートシェイプについての質問です。 会社の稟議書を作成していて、上のほうに、オートシェイプで部長や課長のハンコを押す欄を作ろうと思ったのですが、うまくいきません・・・ エクセルで罫線を引いて、セル内に文字を入れるのは簡単なのですが、オートシェイプで作成する場合は、どのようにしたらよいでしょうか・・・ 四角形を挿入して、縦に二本オートシェイプで直線を引いて、横にも一本オートシェイプで直線を引いて、それをグループ化したまではよかったのですが、テキストをどのように入れたらよいのか分かりません・・・ 右クリックしても、テキスト追加できず、悩んでいます・・・ どなたかお分かりでしたら、お願いいたします。
- 締切済み
- オフィス系ソフト
- excel VBA オートシェイプのテキスト段落
おはようございます。 【オートシェイプ内のテキスト行間を指定するプロパティ】 オートシェイプ内のテキスト行間を指定するプロパティはありますでしょうか? excel 2007で オートシェイプにテキストをいれた場合、 右クリックすると「段落」という項目がでてきて、 オートシェイプ内のテキストの行間を指定できたのですが、 オートシェイプ内のテキストの行間をVBAで指定することはできるのでしょか? (マクロを登録してもなにも記述されていないので、困っています。) 最終的にはアクティブブックの全シートのオートシェイプの行間を変更する VBAにしたいと思っています。 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 特定のオートシェイプだけ削除するVBA
エクセルで一枚のシートに複数のオートシェイプを使用したものがあります。 オートシェイプを使用しているセルの範囲は (A1:L22)と(M1:U22)の二箇所なのですが、 VBAで(A1:L22)の範囲にあるオートシェイプのみ削除する事は可能でしょうか? (A1:L22)内のオートシェイプは作業内容により毎回変わるので 形などは特定できません。 また、オブジェクトの選択で範囲指定をした後削除という方法もあるのですが この削除の作業の前後に他の作業のVBAを使用しているので VBAで削除が出来ればと思います。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAでのオートシェイプの整列機能について質問です。
VBAでのオートシェイプの整列機能について質問です。 VBAで複数のシェイプを作成しました。 それを水平方向や垂直方向に整列させたいと考えています。 各グループアイテムを選択後 水平方向(垂直方向)に整列 全て選択してグループ化 みたいな感じにしたいと考えています。 アドバイスよろしくお願いいたします。m(_ _)m
- ベストアンサー
- Visual Basic
- 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 オートシェイプの有無を条件にするにはどのような書き方をすれば良いでしょうか?
- ベストアンサー
- Excel(エクセル)
- エクセルのオートシェープについて
エクセルのオートシェープで「グループ化ではなく、図形の結合」って出来ないですか? (○と△を合体させて一つの金魚のような図形にすることです。) VBAを使う方法でもそのようなことが出来ればありがたいのですが、そのサンプルプログラムを探しても見当たりませんでした。 方法知ってる方いましたら教えてください。
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA オートシェイプナンバーのリセット
EXCEL2000 VBAの初心者です。 エクセル表の数字(位置座標や大きさ)に従い、数十個のオートシェイプの丸や四角を、何度も配置・消去させるプログラムを作っています。 一度に多くのオブジェクトを配置・消去しているので、自動発生するオブジェクトの番号が、現在20000程度になっています。 現状では問題ないのですが、自動発生番号に限りがあるとエラーが出ると思います。そこで、 1.オブジェクトの自動発生番号には限りがあるのか、 2.オブジェクトの発生番号を1にリセットすることは出来るのか。 を教えていただきたく、よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- エクセル2007のオートシェイプを使って作成した図をグループ化しようと
エクセル2007のオートシェイプを使って作成した図をグループ化しようとしても、書式タブの「配置」がアクティブにならないのですが何故でしょうか?
- ベストアンサー
- その他MS Office製品
お礼
丁寧な回答ありがとうございます 私がやりたかったことをほとんど実装していただけた感じで大変参考になりました テキストとの紐付けの箇所については、名前の定義を利用して、名前とテキストを リスト化して利用しました 返事が遅れてしまい申し訳ありません ありがとうございます