• ベストアンサー

ワードアートをテキスト(セル)に変換

こんにちは。上手く説明できないかもしれませんが。。 エクセルの表データをテキストデータへ 変換したいのですが、 そのエクセルデータが、 一つ一つのセルの上にワードアートで文字が入っている状態で、列や行毎のコピーが出来ずに困っています。 かなりの数があるので、一つ一つコピペするのは 大変な時間がかかるので どうにか解決方法はあるでしょうか? どなたかご存じであればよろしくおねがいいたします。 OSはwindowsxp office2003に 他はMacOS 10.3/9.2で それぞれオフィス98、x があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

もしも、きちんと、ワードアートが並んでいるものでしたら、以下のマクロで動きます。 最初に、写したい「ワードアートのあるシート」を開いておいて、 ツール-マクロ-Visual Basic Editor で、挿入-標準モジュールで、開いた白い画面に、以下を貼り付けて 上のメニューのツールに、「▲ 〓 ■」があったら、「▲」をクリックしてみてください。(三角は横になっています) ない場合は、メニューの実行-Sub/..の実行 をクリックしてみてください。 '注意:以下は、Sheet2 になっていますので、必要な場合は、任意の場所に書き換えてください。 Sub textEffectCopy() Dim shp As Shape For Each shp In ActiveSheet.shapes  If shp.Type = msoTextEffect Then  'コピー先   Worksheets("Sheet2").Range(shp.TopLeftCell.Address).Value = _      shp.TextEffect.Text  End If Next End Sub ただし、重なり合っている場合は、上書きされることがあります。

kuragemama
質問者

補足

ご回答ありがとうございます。 すいません、確認してみたら、ワードアートではなく、テキストボックスでした。。 その場合でも上記と同じような設定でも大丈夫でしょうか? また、微妙に重なりあっているものが多数あるのですが、その場合回避法などはありますか? もし、よろしければ御教授願えたらと思います。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

kuragemamaさん、こんばんは。 >マクロを実行すると >abcd01200345efgh1220ijklme0002020jikme00020 >と1つのセルに表示されるので、 区切りの空白が入りませんでしたか?入れたつもりでしたけれど。 もし、空白の代わりに、「,」(コンマ)を入れるのでしたら、 If .Exists(KeyAddress) = False Then    .Add KeyAddress, myItem    Else    .Item(KeyAddress) = .Item(KeyAddress) & myItem   End If   End If そこに、コンマ(,) 入りなど入れるのでしたら、   .Item(KeyAddress) = myItem & "," & .Item(KeyAddress) とします。 今回、どのぐらいの列になるのか予想できなかったせいでもあるのです。 その後で、コンマや空白区切りを、その行の横のセル列に割り当てる方法も考えています。ただし、その元の出力したデータの列数がいくつになるか教えていただいたほうが、うまく行きます。

kuragemama
質問者

お礼

すぐにお返事をさしあげたのですが、お礼がきちんと反映されていなかったみたいで、私も確認しておらず、申し訳ありませんでした。 列数は1日1列の1ヵ月なので、30列か31列になります。 細かく確認してみたところ、「,」区切りなどを入れてみても、重なっているテキストボックスには、きちんと反映されないようです。 空白は、テキストボックス内の改行に空白が設けられるようです。 それでもかなり便利になって、なんとか締切りに間に合いました!ありがとうございます。 時間ができたので、VBAの本を買ってきました!こちらのほうでも色々と試行錯誤しながら頑張ってみたいと思います。本当に感謝しています。ありがとうございます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

>コンパイルエラー そこに出てくるのは、私のコードではありませんね。(^^; そのコードを見た限りでは、同じことをしていたようですね。 それですと、一列に、ずっと下に出てきてしまいます。 そういう形を望んでいたとしたら、ちょっと私のほうは、不安になりますね。 私のは、もっと手の込んだことをしていますから。 >プロシージャの外では無効です。とメッセージが出て それは、何かの残骸のようです。Sub ~End Sub の外にあるもので、構文は全てエラーになります。それで、当面、「'」をつけてくださればよいかと思います。不要でしたら、削除してください。 'Dim ws As Worksheet 'Dim c As Shapes 'Dim s As Shape '---------------ここから以下がエラーの元ですが、 私としては、プロシージャ外にある宣言(Dim)も、同じ、モジュール内にそういうものがあると、誤動作の元になりますので、すべて処理してください。ただ、私のは、すべてローカル変数で行っていますので大丈夫のはずです。 もし、ツールバーの上に、白い手のマーク、水色の「〓」のマーク、「〓←マーク付き」がありましたら、 不要範囲をマウスで選択して、真中の水色の「〓」マークをクリックすれば、いっぺんに「'」がつきます。 そうすると、一行が全部緑色の文字になり、影響を及ぼさなくなります。

kuragemama
質問者

お礼

すいません。よくわからないまま色々なコードで試していたせいのようです。 改めて、試してみたところ、問題なく実行ができました。詳しい御説明していただき、私には難しいことだらけですが、この作業を終わらさないといけないので、落ち着いたら、しっかりと勉強する意欲がわいてきました!とても感謝しています。本当にありがとうございます!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

>テキストボックス自体もテキストが隠れていたりする部分も多く、印刷して確認すら出来ず、これもまた一つ一つ大きさを調整するとなるとかなり厄介です。 それはやっかいですね。 今回、「印刷して確認」ということができるレベルではないし、そのセルに入っているテキストボックス群のひとつひとつが、独立した存在なのか、それとも、ひとつのセルに入れるべきかの判断に迷います。 もしかして、電車やバスの時刻表のようなものなら、あれは、ひとつのセルに入れますね。とりあえず、その線で進めてみました。 前回できあがったものに、細かい部分を手直ししました。 できれば、これは、標準モジュールに貼り付けてください。 ツール-マクロ-Visual Basic **メニュー-挿入-標準モジュール テキストボックスの入っている場所のシートで起動してください。コピーする先のシートを聞いてきますので、入力してください。 とりあえず、これで様子をみてください。 '------------------------------------------ Option Explicit Sub TextBoxExtract() Dim strSH As String Dim shp As Shape Dim KeyAddress As String Dim myItem As String Dim i As Variant 'Dic のItem Dim j As Long Dim objDic As Object Dim mySh As Worksheet ' On Error GoTo ErrHandler strSH = Application.InputBox("シート名を入力" & vbCr & _ "出力されるシートは、コピー前に全て消去されます。", _ "Sheet名", "Sheet2", Type:=2) ' If Len(strSH) = 0 Then  MsgBox "シートが選択されていません。", 16  Exit Sub ElseIf strSH = "False" Then  Exit Sub End If Set mySh = Worksheets(strSH) ' With mySh 'コピー先のデフォルト化と消去  '文字列は消す  .Cells.ClearContents  '書式標準  .Cells.NumberFormat = "General"  '折り返し表示をなくする  .Cells.WrapText = False  '連結はさせない  .Cells.MergeCells = False  'セルの高さ幅を標準にする  .Cells.Rows.RowHeight = .StandardHeight  .Cells.Columns.ColumnWidth = .StandardWidth End With '   Set objDic = CreateObject("Scripting.Dictionary") ' With objDic  For Each shp In ActiveSheet.shapes   If shp.Type = msoTextBox Then   KeyAddress = shp.TopLeftCell.Address   myItem = VBA.Trim(shp.DrawingObject.Text)   If .Exists(KeyAddress) = False Then    .Add KeyAddress, myItem    Else    .Item(KeyAddress) = .Item(KeyAddress) & myItem   End If   End If  Next  For Each i In .keys  '書式は文字列にします   mySh.Range(i).NumberFormatLocal = "@"   mySh.Range(i).Value = Replace(.Item(i), vbLf, " ")  Next i  For j = 1 To mySh.UsedRange.Columns.Count   'セル幅のオートフィット   mySh.Columns(j).EntireColumn.AutoFit  Next End With ErrHandler:  If Err.Number > 0 Then   MsgBox "Err: " & Err.Number & "(" & Err.Description & ")"   Else   mySh.Select   MsgBox "終了しました。", 64  End If Set objDic = Nothing Set mySh = Nothing End Sub '------------------------------------------

kuragemama
質問者

お礼

他のデータで試してみたらちゃんと出来ました! 一つのセルに ([]=テキストボックス) [00][abcd012] [12][345efgh] [20][20ijklme000] などと入っていて マクロを実行すると abcd01200345efgh1220ijklme0002020jikme00020 と1つのセルに表示されるので、テキストボックスが隠れているため、判断がつきにくいのですが それでもここまでテキストに変換することができてとてもとても感激です。 ありがとうございます!

kuragemama
質問者

補足

こんにちは。本当にお世話になっております。 試してみたところ コンパイルエラー プロシージャの外では無効です。とメッセージが出て 下記のコードが現れます。 Dim ws As Worksheet Dim c As Shapes Dim s As Shape Set ws = ActiveSheet Set c = ws.Shapes For i = 1 To c.Count c.Item(i).Select ws.Cells(i, 1) = Selection.Characters.Text Next 何かしら原因がおわかりでしたら度々恐縮ですがよろしくおねがいいたします。。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

補足説明します。 #なぜ、そうテキストボックスが増えたのか、元の原稿に、空白(スペース)などがあるのではないでしょうか?もしそうだとすると、スペースを入れなくてはなりません。 この説明わかりにくいですよね。 つまり、 ひとつのセルに、 「abc」 「defg」 「123」 のabc,defg,123 が、それぞれテキストボックスがあるとすれば、取り出すときは、  abc defg 123 のように戻してあげなくてはならないってことです。 それとも、  abcdefg123 でよいのか、こちらでは判断がつかないのです。 セルの番地は、そのまま写していきます。 一応、コードは完成しています。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

やっと全ての状況が飲み込めました。 もしかして、スキャナーで撮ってOCRで貼り付けたものではありませんか? 本来は、仮にOCRで貼り付けたものであってもなくても、一旦、印刷して、もう一度、ちゃんとしたやり方でやれば、Excelには張り付くのですが、それは、ここでは別の話ですから、それ以上は言いません。 要するに、 >一つのセルの中に多いところだと3~4組分(6~8個)程入っています。 重なり合ったテキストボックスだとしても、中に見えているものは、一まとめにできるわけではありませんか?グループ化などされていませんよね。 '------------------------- コードを作っちゃう前に、ちょっと確認です。 なぜ、そうテキストボックスが増えたのか、元の原稿に、空白(スペース)などがあるのではないでしょうか?もしそうだとすると、スペースを入れなくてはなりません。 たぶん、列は列に、まとまってあるものは一つのセルに、テキストとして変更できればよいわけですね。 私の、思い違いでないと良いのですが……。

kuragemama
質問者

補足

こんにちは。お返事遅くなってすいません。 データはクライアントからでどういう風に制作をしているのかわからないのですが、これ以外のデータはないとのことで、このデータでやらければいけず、困っている状態です。 また、テキストボックス自体もテキストが隠れていたりする部分も多く、印刷して確認すら出来ず、これもまた一つ一つ大きさを調整するとなるとかなり厄介です。セル一つ一つに入っていれば問題はなかったのですが、セルの一つが30分という単位になっていて、そのなかに細かい分(15、05、20など)名前などが複数組入っている形です。 私もなぜ、こういう作り方をしているのか疑問ですが、名前の部分が字数が多く、複数行になっている場合が多いのでテキストボックスを使用しているものと思われます。 一つのセルに00(時間)横のセルに名前 とできればセル一つ一つに入っていけばベストですが 最終的にテキストデータが欲しいので 時間 名前  時間 名前... と時間通りに続いていることが希望です。 説明が下手で恐縮ですがご理解いただけたでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

テキストボックスというのは、オートシェイプで書かれたものですか? それを選択すると、左上隅の白い四角に、「四角形」とでますか? テキストボックスの左上の角が、同じセルに入っている場合は、新たなコードを考えなくてはなりません。とりあえず、以下を試してみてください。 注意事項は、#1 と同じです。 '以下の「Sheet2」 は、任意です。 '------------------------------------ Sub DrawingObjectTextCopy() Dim shp As Shape For Each shp In ActiveSheet.shapes  If shp.Type = msoShapeRectangle Then  'コピー先   Worksheets("Sheet2").Range(shp.TopLeftCell.Address).Value = _      shp.DrawingObject.Text  End If Next End Sub '------------------------------------

kuragemama
質問者

補足

オートシェイプでつくられているものです。 が、右上隅の白い四角というのはnameboxのことでしょうか? それだと、テキスト1、2、などとでてきます。 膨大な数なので全部をチェックはできていませんが、 列の上から下にかけて テキスト1.2.3...と並んでいるようです。 小さいテキストボックス 00(時間)を覆うようにして●●●●(名前)が入っていて 2つで一組という感じですがそれが 一つのセルの中に多いところだと3~4組分(6~8個)程入っています。 一列は日にち毎に分けられていてそれが1ヵ月(30列) 最終的には 1日 00 ●● 00 ●● というようなスケジュールをテキスト形式にしたいと思っています。 下手な説明ですが、また何か解決策がありましたらどうぞよろしくおねがいいたします。

関連するQ&A

  • WordからExcelへの変換(1文1セル)

    WordとExcelについて、質問をさせていただきました。 Wordの文書をExcelにしたいのです、Wordで打った文章のワンセンテンス(マル(。)まで)をExcelの1つのセルに入れたいのですが、 なかなかうまくいきません。 Word→Text形式で保存→拡張子をCSVに変換→エクセル という工程を経てWordをExcelにする事はできるのですが、こうやって変換すると Wordの1段落がExcelの1セルに落ちてしまい、マル(。)で区切ってセルに移す事ができません。 イメージとしては <Word> あいうえお。かきくけこ。さしすせそ。たちつてと。 <Excel> A列1行目:あいうえお。 A列2行目:かきくけこ。 A列3行目:さしすせそ。 WordからTextに変換するときに「行の挿入」が出てきて「CR」とか「LF」等選べるようになっていて いろいろ試してみたのですが、Wordの文章内で自然に折り返されたところで、Excelでは2行目のセルに変換されてしまい、 なかなかうまくいきません。 何かよい方法があれば、アドバイス頂ければ幸いです。 どうぞ、よろしくお願いいたします。

  • WORDの表でのセル操作

    わけあって、WORDで表を作成しています。 1)EXCELの操作での「コピーしたセルの挿入」、「切り取ったセルの挿入」の様に表のある行をコピーあるいは切り取って、別の行に挿入する操作って出来るのでしょうか? 2)また、EXCELでの行番号としてよく=ROW()を使用しますが、これと同等にシーケンシャルな番号を表に簡単に挿入する事は出来ますでしょうか? 以上、Office2000を使用しています。 よろしくお願いします。

  • WordからExcelへ変換しデータを揃える方法は?

    Word文書で複数のセル内にテキストデータがあります。 セル内で改行をしているものも混ざっています。 Excelに変換し、1つのWordファイルにつき、1行でデータベースをつくらねばなりません。 今、地道にしている作業は以下の通りです。 <Word> 全て選択 → コピー  <Excel> →テキストで貼り付け → 行列を入れ替えて貼り付け それでも、セル内で改行をしているものとしていないものでExcelのセルがずれてきます。 Wordのセル内で改行していても、一つのセルとして変換する方法はないでしょうか? また、うまい方法はないでしょうか?? 1300件ほど処理しなければならず、困っています。 どなたか助けてくださいっ!!

  • エクセル ワードアートのテキストにセルの値を表示

    ワードアートのテキストの内容に例えばA1のセルの値を表示したいです。 A1を変更すればワードアートもかわるように。 テキストボックスならできますよね それをワードアートで・・・できますか? マクロでもよいです。 よろしくおねがいします。

  • Wordの表(セルの結合あり。)に貼り付けると、左右凸凹に貼り付く

    質問自体は、実際に見れば簡単なことなんですが、 言葉で書くので煩わしくなってしまいます。 Wordで作っている文章の中に表があります。 ただし、その表は単純な表ではなくて、 セルの分割や結合が行われています。 表自体は長方形をしていますが、セルの結合によって、行によりセルの数が違います。 詳しく書くと、 表は4列で、 列をエクセルのように假に左からA、B、C、Dとすると、 D列はどの行も結合されていません。 1行目は、A1・B1・C1が結合されている状態。 2行目と3行目は、A2とA3が結合されていて、 B2とC2、B3とC3が結合されている。 4・5・6行目は、A4・A5・A6が結合されていて、 B4・C4が結合、B5・B6が結合。 7行目は、(1行目と同じく)A7・B7・C7が結合。 (多分、表を作るときは分割も使ったと思いますが、 説明が面倒になるので、分割という言葉は使いませんでした。) さて、結合がされていないD列に、 エクセルのある列のデータを貼り付けたいと思います。 貼り付けたいデータをコピーして、 上記のWordの表のD列を選んで貼り付けます。 すると、意図に反して、うまくD列に貼り付きません。 どの行でも、必ず、左から2つめのセルに貼り付いてしまいます。 上記のようにセルの結合が行われているために、 左右に凸凹に貼り付いてしまいます。 例えば、 3列になっている2行目や3行目は、結合されている (左から)2つめのセル(B2・C2、B3・C3)に、 4列になっている5行目や6行目は2つめのセル(B列)に貼り付いてしまいます。 このように、行のセルの数にしたがって凸凹に貼りつくのではなく、 行のセルの数にかかわらず縦一直線に貼り付けたいのですが、 どうすればよいでしょうか。 Wordは2000

  • EXCELでワードアートからセル参照

    EXCELでワードアートを沢山使っています。ワードアートでなければ、文字幅を自由に扱えないからそうしているのですが、内容を変更する場合、一つ一つワードアートを指定してはテキストの編集を行う必要があり、大変手間が掛かっています。これをワードアートの中からセル参照を使えれば作業が楽になるのにと思っているのですが、そんなことは可能でしょうか? よろしくお願いします。

  • セルの値をワードアートに

    セルの値をワードアートに A1に入力した値をワードアートに反映させていますが、 A1の値を複数のワードアートに反映させる場合は下記のコードの 3行目を数分だけ入れないとダメでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Address <> "$A$1" Then Exit Sub  ActiveSheet.Shapes("WordArt 1").TextEffect.Text = Target.Value End Sub コピーしてワードアートオブジェクトの名前を一緒にしても 最初の1個しか反映されませんでした。 よろしくお願いします

  • アドベのPDFのデータをエクセルに変換したい。

    アドベのPDFで作られているデータをエクセルに変換して使いたいのです。元のデータは、表の形式になっており、セル内の文字は、データとしてPDFには組み込まれています。ですから、コピー&ペーストで、データとして認識させて、一部をエクセルに移すことは可能です。しかし、表全体をエクセルに移そうとすると、行や列が整列せず、ぐちゃぐちゃなデータになってしまいます。せめて、1列ずつでも認識できれば作業は楽になるのですが、1行ずつは可能でも、1列ずつは、私には無理でした。 このような場合、アドベのアクロバット7などの編集できるものを使うと、これらのデータを編集しなおして、エクセルに変換したりできますか?たとえば、表のうち1列を空白セルにしたり、特定の文字に入れ替えたりできますか?もしできれば、試行錯誤して、エクセルの表に直すことは可能だと思うのです。

  • Excelからテキストへの変換に際して

    Excelからテキストへの変換に際して 一つのセルに改行を含むデータがあり、それをテキストに1行として 出力したいです。 何か良い方法はありますでしょうか?

  • セルに「0」から始まる数値を入力すると欠けてしまう

    たとえばWordで表を作成し、セル内に「01234567」と入力したものをExcelのセルにコピーすると「1234567」となってしまいます。 Excelのセルの書式設定を文字列にしても同じでした。 どうすれば「01234567」と貼り付け出来るでしょうか? よろしくお願いいたします。 Office2003です。

専門家に質問してみよう