EXCEL2003を使用しています。シートに大量にテキストボックスが張られており、テキストボックスには数字が入力してあるため何とか取り出したいと考えています(可能であればセルに1つずつ入れ込んでいきたい)。

テキストボックスの中の値をセルに1つずつコピペしていく以外に何か良い方法はないでしょうか?
よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:2008/09/25 23:21:44
  • 終了:2008/10/02 23:25:02

回答(2件)

id:airplant No.1

airplant回答回数220ベストアンサー獲得回数492008/09/26 00:25:48

ポイント35pt

シェープがテキストボックスかどうか調べて、中身を順次セルへ入れていくマクロで簡単に取出しができます。


同じシート内のA2から入れるようにしてありますので、別シートにしたかったり、別な場所にするときは、適宜マクロを変更してください。

なお、オートシェープ内のテキストに改行が入っていても問題なく動作します。

Option Explicit

Sub GetTextBoxStr()

    Const iOutCol As String = "A"
    Dim oTextBox As Shape
    Dim iOutRow As Integer
    
    iOutRow = 2
    For Each oTextBox In ActiveSheet.Shapes
        If oTextBox.Type = msoTextBox Then
            oTextBox.Select
            Cells(iOutRow, iOutCol).Value = Selection.Characters.Text
            iOutRow = iOutRow + 1
        End If
    Next

End Sub

P.S. もしマクロ使ったことなければ、ツール→マクロ→新しいマクロの記録で適当なものを記録し、その後で、このテキストをコピー&ペーストすれば、OKです。

id:fester No.2

fester回答回数124ベストアンサー獲得回数202008/09/26 00:45:07

ポイント35pt

アクティブなシート上のテキストボックスの値をセルに転記するVBAサンプル

標準モジュールに以下を記述して実行


Option Explicit

Public Sub Hoge()

    Dim shp As Shape
    
    ActiveSheet.Cells(1, 1).Activate
    
    For Each shp In ActiveSheet.Shapes
        If shp.Type = msoOLEControlObject Then
            If shp.OLEFormat.progID = "Forms.TextBox.1" Then
                ActiveCell.Value = shp.OLEFormat.Object.Object.Text
                ActiveCell.Offset(1, 0).Activate
            End If
        End If
    Next shp

End Sub

  • id:fester
    「テキストボックス」というのは、オートシェイプのもの(前者)と、コントロール(後者)のものとがあるのですね。
  • id:airplant
    そうですね、二つあることを忘れていました。
    どちらのテキストボックスかは、後でわかりそうですね。
    festerさんのほうが合っていそうな気がします。
  • id:ardarim
    行とテキストボックスが関連づいている場合はiOutRow = oTextBox.TopLeftCell.Rowとでもした方がたぶん便利です。
    インポートしたHTMLのテーブルからバナーURLを抜いてリストにしたい時とかに重宝しますw

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません