- エクセルの吹き出し文字、検索できなくて最悪><
- 吹き出し、そんなとこにあったのかよ・・・
そんな悩みを解消します。
エクセルを使う方であれば、一度は感じたことがある上記の解決方法をご紹介します。
エクセルの吹き出し(オートシェイプ)機能、仕事でもよく使うシーンがあります。
ただ、難点として「文字列検索できない」「他の吹き出し等の裏に隠れる場合がある」ことが挙げられます。
Excelマクロを活用することで、このオートシェイプの情報(文字含めて)を一括取得できる方法があります。仕事でぜひ活用してみてください!
早速手順についてご紹介します。
ちなみに、同様の悩みがエクセルの「コメント」機能でもよくあります。
コメントの一括取得についてはこちらの記事からどうぞ!
目次
エクセルVBAマクロを使って吹き出しを一括で取得する手順①:準備
実際には仕事で扱っているドキュメントがあればよいので準備は不要ですが、今回もシンプルな例を用意しました。
吹き出しやオートシェイプに指摘、メモ、検討状況など何でも書いてしまう例です。
このExcelから、オートシェイプの情報のみを抽出します。
エクセルVBAマクロを使って吹き出しを一括で取得する手順②:実行
準備ができたら早速実行しましょう。以下の手順で、マクロのプログラムを実行してみてください。
「コードの表示」を開く
(知っている方は読み飛ばしてください)
エクセルのシート名を右クリックすると、「コードの表示」という項目があるので開きましょう。
ここまで来たらもう少しです。
VBAマクロエディタにプログラムを貼り付けて実行する
「コードの表示」を行うと、次の画面になります。ここに、コメントを取得するプログラムを貼り付けて実行しましょう。
今回貼り付けるプログラムコードは以下のとおりです。
そのままコピーして貼り付けるだけでOKです。
Sub ブック内のオートシェイプ情報を取得する()
Dim obj As Object
Dim R As Long
Dim objSheet
Application.ScreenUpdating = False
With Worksheets.Add
.Cells(1, 1).Value = "シート名"
.Cells(1, 2).Value = "オートシェイプ名称"
.Cells(1, 3).Value = "文言"
R = 2
For Each objSheet In ThisWorkbook.Worksheets
For Each obj In objSheet.Shapes
'シート名
.Cells(R, 1) = objSheet.Name
'オートシェイプ名称+簡易リンク作成(オートシェイプの左上セルへ移動)
.Cells(R, 2) = obj.Name
.Hyperlinks.Add Anchor:=.Cells(R, 2), Address:="#" & objSheet.Name & "!" & obj.TopLeftCell.Address(False, False)
'オートシェイプの内容(文言)
.Cells(R, 3) = obj.TextFrame.Characters.Text
R = R + 1
Next obj
Next
End With
End Sub
エクセルVBAマクロを使って吹き出しを一括で取得する手順③:結果確認
さて、先ほどのプログラムを実行すると、エクセル上に新しいシートができていますね。
オートシェイプの取得結果が表示されますので、確認しましょう。
左から、「シート名」「オートシェイプ名称(リンクになっています)」「文言」が出力されます。
あれ?コメント取得のときと同様に、最初の図では吹き出しは3つでしたが、他のシートにもう1つありましたね。今回使ったプログラムでは、ファイル内のすべてのシートのオートシェイプを取得するため、取得漏れがないようにしています。
吹き出しの内容を一覧で確認したら、あとは本文と併せて検索するもよいですし、参考として残しておくもよいです。皆さんの用途に合わせて活用してみてください!
まとめ
ExcelのVBAマクロを使った、すべてのシートのオートシェイプを一括で取得する、VBAマクロの使い方をご紹介しました。
エクセルをまだまだ仕事で使っている方は多いです(僕も毎日使っています)。今回のVBAマクロを覚えておけば大量の吹き出しやオートシェイプがあっても平気です!
VBAを使うとこのように、面倒な作業を効率化・自動化できます!
ぜひみなさんの仕事効率化にお役立てください!