最近、いつ泣きましたか?

前任者がある資料を作成するためにExcelでセルに文字を書き込んでいたのですが、
資料はExcelである必要もなく、
今後もっと融通性のあるレイアウトが必要となり、
Excel内のテキストボックスに変えていこうと思うのですが
何しろ量が多く、ショートカットやマクロを利用したいと思います。

ひとつのセルを選択した後
(1)内容をすべて選択し、
(2)コピー(切り取り)し(Ctr-C,X)、
(3)新しいテキストボックスを作成し、
(4)貼り付ける(Ctr-V)

といった一連の作業を、効率よく行うために(1)や(3)のショートカットを行いたい
または、全てか一部をマクロにしたいと思います。

マクロに関しては、一から組む気はなく、マクロの記録でできる範囲で、と考えています。

効率的な方法を教えてください。

A 回答 (4件)

こんなカンジでマクロを作成し



Sub macro1()
 Dim h As Range
 For Each h In Selection
 If h.Text <> "" Then
 With ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, h.Left, h.Top, h.MergeArea.Width, h.MergeArea.Height).TextFrame
  .Characters.Text = h.Text
  .MarginLeft = 0
  .MarginRight = 0
  .MarginTop = 0
  .MarginBottom = 0
 End With
 h.MergeArea.ClearContents
 End If
 Next
End Sub


テキストボックス化したいセル範囲をアバウトに選択しておいて実行すると,テキストボックス化します。
    • good
    • 5
この回答へのお礼

ここまでかゆいところに手が届くコードをありがとうございます。

もしかしたら、一日覚悟していた操作が、一瞬でできてしまいそう。

今日はこの作業に手をつけず、質問の投稿だけにしてよかったです。

今から、一瞬にして、作業を終えることにします。

ありがとうございました。

お礼日時:2011/11/28 20:20

>できれば、元のセルデータを消した状態で、後任者に渡したいのです。



この場合はマクロを使うしかありません。

>「今後もっと融通性のあるレイアウトが必要となり、Excel内のテキストボックスに変えていこうと思うのですが

そもそもテキストボックスにすると逆に不便になるような気がするのですが、どうしてもテキストボックスに文字列を移動したいなら、以下のようなマクロを利用することになります。
シート名部分を右クリックして、「コードの表示」で表示される画面で、以下のコードをコピー貼り付けして、移動したいセルをダブルクリックすると、そのセルの右に文字列が移動したテキストボックスが作成されます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Shapes.AddTextbox( _
Orientation:=msoTextOrientationHorizontal, _
Left:=Target.Offset(, 1).Left, Top:=Target.Offset(, 1).Top, _
Width:=Target.Offset(, 1).Width, Height:=Target.Offset(, 1).Height).Select
With Selection
.Characters.Text = Target
.AutoSize = True
End With
Target.ClearContents
End Sub
    • good
    • 1
この回答へのお礼

すばらしいです。これこそやりたかったことです。
一からは自分で作れませんが、ちょっと改造して利用できそうです。
大変ありがとうございました。
ところで、テキストボックスにするメリットは、
テキストボックス同士をコネクタで結びたいという理由が一番大きいです。
セルでもできるならば、別にセルのままでもよいかもしれないのですが、テキストボックスの拡大、縮小、などの更新が頻繁にあるので、やはりセルでは厳しいように思っています。

お礼日時:2011/11/28 14:46

マクロの記録をやってみれば良いじゃない。

せずに質問する「のはおかしい。
テキストボックスを選択して、数式バー部で =A2 など入れる操作をする。
Sub Macro4()
ActiveSheet.Shapes("TextBox1").Select
Selection.Formula = "A2"
ActiveSheet.Shapes("TextBox2").Select
Selection.Formula = "A3"
End Sub
--
(1)上記は2つのテキストボックスと2つのセルの場合だが、テキストボックスは、手動で増やしている。この点、数が多いと大変だが、プログラムでやる手もあるが初心者向けではない。
テキストボックスは何個ぐらい予想されるのか?
(2)上記マクロの記録ははForNextやFoe Eachで簡単に繰り返し作業に変えられる。
(3)>今後もっと融通性のあるレイアウトが必要となり、Excel内のテキストボックスに変えていこうと思うのですが
テキストボックスのテキストにすると融通性がある、という根拠はさっぱり判らない。
「テキストファイル」の間違いならある面で納得する。
テキストファイルとテキストボックスは別物ですよ。
(4)>一から組む気はなく、
VBAで組むとコードが長くなるとかの目算があるのか。現状はVBAの勉強をしておらず、組めないだけでは。
(5)テキストボックスも、エクセルでは(1)フォーム上に(2)ワークシート上に、設置する方法がある。どちらかも明示してないのは、余りこのような券で経験して無い証拠。
ーーー
以上読んで、お礼欄にでも、後続の読者のために追加補足しておいたら。
    • good
    • 0
この回答へのお礼

早々にありがとうございました。
マクロの記録はやってみましたが、先の方に説明したとおり、数式バーに入れることは試していませんでした。

(1)300個くらいです。
手作業でも30個まとめてコピーすればそれほど苦ではありません。
(2)はい。
(3)質問に書いたとおり、Excelである必然性のない資料です。データ処理は行わず
 「絵」として印刷物を配布することを目的とします。
(4)はい。勉強する暇は趣味的には欲しいですが、今回は一からコードを書くならば、手作業の方が早いと判断しています。
(5)データ処理を行うものでもなく、印刷物として使うので、フォームは使いません。

お礼日時:2011/11/28 13:10

セル内のデータをテキストボックスに表示したいなら、テキストボックスを選択し、数式バーに「=」と入力し、コピーしたいセルを選択してEnterするのが最も簡単な操作です。



より効率的な作業をしたいなら、1つのテキストボックスを作成し、Ctrlキーを押しながらドラッグして必要な数だけテキストボックスを作成しておいて、それらのテキストボックスに対して上記の操作を行って下さい。
    • good
    • 0
この回答へのお礼

さっそくの回答をありがとうございます。
数式バーで「=」を使うと、リンクとなりますよね。
できれば、元のセルデータを消した状態で、後任者に渡したいのです。

おっしゃる方法の後、内容だけコピーなどできるとよいのですが、
それもうまくできず...

PowerPointにもっていくとできるの(但しフォントの設定やいろいろ設定し直すのが
大変そうなので、まずExcelのままがよいと思っています)で
何らかの方法があると思うのです。

どうしたらよいでしょう?

お礼日時:2011/11/28 10:18

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

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