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

丁寧な回答ありがとうございます
私がやりたかったことをほとんど実装していただけた感じで大変参考になりました
テキストとの紐付けの箇所については、名前の定義を利用して、名前とテキストを
リスト化して利用しました
返事が遅れてしまい申し訳ありません
ありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA セル間のリンク修正につい...
-
VBAでCOPYを繰り返すと、処理が...
-
vba textboxへの入力について教...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】開いているブックの...
-
testファイル内にある複数のpng...
-
vbs ブック共有を解除
-
エクセルVBAコードで教えて下さ...
-
複数のExcelファイルをマージす...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Vba セルの4辺について罫線が有...
-
vb.net(vs2022)のtextboxのデザ...
-
Excelの数式について教えてくだ...
-
エクセルvbaの対象セルに色をつ...
-
VBA 入力箇所指定方法
-
pdfファイルの複数添付 引数の型
-
[vb.net] 起動したFrom2を閉じ...
-
[VB.net] ボタン(Flat)のEnable...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数に256文字以上のテキストを...
-
全てのテキストボックスをセル...
-
テキストボックスの中身をリセ...
-
別のアプリケーションのテキス...
-
RPG(AS400)の本、サイトってあ...
-
テキストボックスにセルの値を...
-
POIでのテキストボックス作成に...
-
VB6.0 でメニューを作りたいん...
-
VBからPDFファイルの埋め込みテ...
-
VBAからPDFのテキストフィールド
-
漢字入力した値のカタカナ変換...
-
フォームのテキストの入力数字...
-
delphi6を使ってます。
-
時計の:を点滅させたい
-
ホームぺージ制作で間違って重...
-
ただただ無駄な
-
Flashで恋愛ゲームを作りたいの...
-
空白で入力フォームのボタンを...
-
VB.NET2005 DataGridViewでレコ...
-
コモンダイアログのshowopenに...
おすすめ情報