プロが教える店舗&オフィスのセキュリティ対策術

初めて質問させて頂きます。
簡単な地域地図を作成中で、地図自体は複数のオートシェイプで作成しております。
その中に人の名前をそれぞれ入力し、さらにその名前を同シート内でセルに抽出し、一覧にしたいと考えております。

オートシェイプ自体は全てまとめてグループ化した状態です。

色々検索し、考えて見ましたが八方塞がり状態です。
マクロ初心者なので、どなたかご教授頂けると幸いです。
よろしくお願いいたします。

A 回答 (5件)

こんにちは。


#3の回答者です。

#4さんのは、再帰というテクニックを使って十分すぎるご解答です。
その後では、くすんでしまって、出しづらいものがあるのですが、Shapes の中身の振り分けを厳しくしました。簡単にいうと、フォーム・ボタンなどはカウントしないということです。

出力先は、ご自身でお決めください。Range("A1")になっている所を書き換えれば済みます。


'//標準モジュール
Sub TextinShapeOut1()
 Dim shp As Object
 Dim TF2 As TextFrame2
 Dim txtRng As TextRange2
 Dim nms() As Variant
 Dim i As Long, j As Long
 For Each shp In ActiveSheet.Shapes
  If TypeName(shp) = "Shape" And shp.OnAction = "" Then
   On Error Resume Next
   Set TF2 = shp.TextFrame2
   If Err.Number <> 0 Then Exit For
   On Error GoTo 0
   Set txtRng = TF2.TextRange
   For i = 1 To txtRng.Count
    ReDim Preserve nms(j)
    nms(j) = txtRng.Item(i)
    j = j + 1
   Next
  End If
 Next
 '出力先
 For i = 0 To UBound(nms)
  Range("A1").Offset(i, 0) = nms(i) '先頭セル
 Next
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
拙い質問に真摯に応えてくださり、感謝しております。
vbaの仕様もとても理想に近いものでした!色々なやり方があると勉強させて頂きました。
2度ご回答くださった事もあり、ベストアンサーにさせて頂きました。ありがとうございました!

お礼日時:2017/12/11 22:53

仮にSheet2に書き出すとして


Dim r
Sub test()
Dim shp As Shape
r = 1
For Each shp In ActiveSheet.Shapes
表示 shp
Next
End Sub

Sub 表示(s As Shape)
Dim shp2 As Shape
If s.Type = msoGroup Then
For Each shp2 In s.GroupItems
表示 shp2
Next
Else
Worksheets("Sheet2").Cells(r, 1).Formula = s.TextFrame2.TextRange
r = r + 1
End If

End Sub

で如何でしょう?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
ほぼ理想通りのことが可能になり感動しております。
これから中身を噛み砕いて、次回に応用出来るよう精進します。ありがとうございました!

お礼日時:2017/12/11 22:42

私は、ご質問がよく分からないです。



>地図自体は複数のオートシェイプで作成しております。
【この部分が分かりません】>その中に人の名前をそれぞれ入力し、
>さらにその名前を同シート内でセルに抽出し、
>一覧にしたいと考えております。

名前を、マクロで入れて、マクロで出す?

一体、その名前は、どういう状態・オートシェイプにどういう対応があるのですか?
マクロ自体を理解していないと、オートシェイプとセルとを結びつけることは不可能だと思うのです。オートシェイプには、Index(いわゆる順番) が存在しますが、それをグループ化してしまうと、Index は生きているのですが、新たにつけ変わったり、その順番が変わってしまった可能性もあります。

別に、マクロで、オートシェイプから名前を抽出し、一覧にするなら、造作もないことですが、質問の文章からは、その肝心の名前が、どこにどのように存在するのか、私には読み取れません。
    • good
    • 0
この回答へのお礼

がんばります

ご返答ありがとうございます。
状況が解りづらく申し訳ないです。図形が無造作に20個くらい散らばっていて、その図形内の文字はそれぞれ直打ちです。
抽出後の順番はこだわっておりません。

無知な質問で大変恐縮ですが、名前を抽出し、一覧にするマクロを教えて頂けないでしょうか?
どうぞ宜しくお願い致します。

お礼日時:2017/12/11 08:49

回答ではないのですが…。


考え方を逆にして、シート上に一覧を作って、それをオートシェイプに表示させると云うのはどうでしょう。
オートシェイプを選択した状態で、数式バーに、=A1 と入力するとオートシェイプにA1セルの内容を表示することができます。
こうすると一覧の名前を変えるだけで、オートシェイプの表示を変更することができます。
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
もう少し考えてみようと思います。

お礼日時:2017/12/10 23:25

セルにまとめるくらいなら、オートシェイプのテキストをセルから参照する


ようにしてはいかが。
そのほうが管理も簡単ですし、修正も簡単なので。
http://excel.ohugi.com/100531_04012607.htm
http://www.relief.jp/docs/002519.html
オートシェイプのテキスト入力状態で、数式バーに参照するセルを指定
すれば、セルの内容がオートシェイプ上に表示される機能なので。
この方法ならグループ化していても問題ありません。

すでに入力したものを使うことが前提だと、マクロになります。
この場合は他の回答者からのアドバイスをお待ちください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
地図上での編集→一覧が理想なので、もう少し待ってみようと思います。

お礼日時:2017/12/10 23:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A