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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelVBAで自動調整できますか? 3 2023/08/25 22:59
- Excel(エクセル) excelのオートシェイプを使って 1 2023/01/03 16:54
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- 画像編集・動画編集・音楽編集 medibang での文字の整列の仕方 1 2023/06/02 06:38
- Visual Basic(VBA) VBA アドインについて お詳しい方 ご教授をお願いします。 相談事項 現在以下の対応を実施した所、 1 2022/11/02 16:53
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Excel(エクセル) 「Excelのオプション」の「ユーザーインターフェイスのオプション」の設定値をVBAで取得したい 1 2022/07/31 23:49
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- Excel(エクセル) 重複したデータ(空白は除く)のVBA表記について 4 2022/08/15 07:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ドラッグ&ドロップからの取得
-
VS2008 C# ボタンのテキストを...
-
テキストボックスの中身をリセ...
-
PythonのTkinterイベントについて
-
変数に256文字以上のテキストを...
-
テキストボックスにセルの値を...
-
テキスト内の重複文字検索
-
VBAからPDFのテキストフィールド
-
RPG(AS400)の本、サイトってあ...
-
stringのデータ型はメモ型とテ...
-
Flashのテキストボックスの「単...
-
VBAでホームページからコピーし...
-
漢字入力した値のカタカナ変換...
-
ホームぺージ制作で間違って重...
-
タイトルタグとアンカーテキス...
-
photoshopで書いた四角の枠の中...
-
YOASOBI
-
【Photoshop】レイヤー効果の境...
-
python ボタンを押すと複数の関...
-
VBScriptでMsgBoxのYesNoボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
RPG(AS400)の本、サイトってあ...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
ホームぺージ制作で間違って重...
-
テキストボックスにセルの値を...
-
コモンダイアログのshowopenに...
-
全てのテキストボックスをセル...
-
漢字入力した値のカタカナ変換...
-
変数に256文字以上のテキストを...
-
VB6.0 でメニューを作りたいん...
-
VB.NET2005 DataGridViewでレコ...
-
DelphiのRichEditでカーソル位...
-
VBSでMid関数を使ったらエラー...
-
MFCのスタティックテキストのコ...
-
改行含むテキストの表示の仕方
-
テキストエリア内の文字列にリ...
-
チェックボックスのテキストを...
-
VB.NETで数十行のプログラムを...
-
HTMLのtextbox類に文字を残す
-
VBのチェックボックス
おすすめ情報