- 締切済み
エクセルに挿入した図に連番を付けたいのですが
エクセルに絵として挿入した地図上で、クリックした位置に連番(1~100)のテキストボックスを挿入したいのですが、またフォントや大きさも変えることができればうれしいのですが、教えていただけるでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- HohoPapa
- ベストアンサー率65% (455/693)
VBAをある程度扱えたとしても、 シート上の画像の任意個所をクリックすることで クリックした位置(縦方向、横方向のアドレス)は特定できるものの、 それは画像上の位置ではなくデスクトップ上の位置ですので、 エクセルのフォームのデスクトップ上の位置、 更に、エクセルが縦方向、横方向にスクロールしている場合を考慮する必要があります。 加えて、画像を右クリックしたときのイベントがありません。 つまり、VBAでは事実上困難です。 C#やDelphiなど、プロ専用の言語が必要です。 VBAでとのことであれば、 添付画像のように、予め必要な数の図形を後記VBAで用意し これを手作業で必要な個所に移動する。 という対応が落としどころと思います。 Option Explicit Sub ZuUp() '角が丸い四角形を100個配置 Dim Sh As Worksheet '作成先シート Dim MyText As String Dim Nm As String '図形名 Dim Bx As Double '開始横位置 Dim By As Double '開始縦位置 Dim Hi As Double '高さ Dim Wi As Double '幅 Dim Fs As Long '文字サイズ Dim Fn As String 'フォント名 Dim Cr As Long '文字色 Dim BCr As Long '背景色 Dim curve As Double Dim i As Long Dim j As Long Set Sh = ThisWorkbook.Sheets("Sheet1") By = 0 Hi = 16 Wi = 30 Fs = 9 Fn = "MS Pゴシック" Cr = rgbRed BCr = rgbAqua curve = 0.2 For j = 1 To 10 For i = 1 To 10 MyText = Format(i * j, "000") Nm = Format(i, "000") & Format(j, "000") Bx = Wi * i By = Hi * j MakeEgg Sh, MyText, Nm, Bx, By, Hi, Wi, Fn, Fs, Cr, BCr, curve Next i Next j End Sub '// サブルーチン Sub MakeEgg(Sh As Worksheet, MyText As String, Nm As String, _ Bx As Double, By As Double, Hi As Double, Wi As Double, _ Fn As String, Fs As Long, Cr As Long, BCr As Long, curve As Double) Dim shp As Shape On Error Resume Next Set shp = Sh.Shapes(Nm) shp.Delete On Error GoTo 0 Set shp = Sh.Shapes.AddShape(msoShapeRoundedRectangle, Bx, By, Wi, Hi) shp.Name = Nm shp.Line.Visible = True '外枠の有無 shp.TextFrame.Characters.Text = MyText shp.TextFrame2.VerticalAnchor = msoAnchorMiddle shp.TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter shp.Fill.ForeColor.RGB = BCr shp.Adjustments.Item(1) = curve With shp.TextFrame2.TextRange.Font .NameComplexScript = Fn .NameFarEast = Fn .Name = Fn .Size = Fs .Bold = msoFalse .Fill.ForeColor.RGB = Cr End With End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
・回答もまだ出ない。平凡な質問(FAQ)なら、普通はすぐ回答がつく。 ・Google照会で「エクセル 図表番号」などでもWEB記事が上位には見つからない。 ワードの記事ばかり。 ・今までのOKWAVEの質問回答の出現の記憶にない。 などからエクセルに、この機能を期待するのは無理ではないですか。 後続の回答を期待してください。 ーー 以下参考にしてください。 そこでエクセルVBA(ワードVBAではない)で、真似事のようなことを やってみた。VBAに関心があれば、やってみてください。 写真とグラフの場合ではテスト済み。 図がすべて挿入し終わった段階で実行する。 ーー 図のあるシートは、Sheet1。 標準モジュールに Sub Test01() For i = 1 To Worksheets("Sheet1").Shapes.Count Worksheets("Sheet1").Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 60, 100.5, _ 22.5).Select Selection.Left = Worksheets("Sheet1").Shapes(i).Left + Worksheets("Sheet1").Shapes(i).Width * 0.5 Selection.Top = Worksheets("Sheet1").Shapes(i).Top + Worksheets("Sheet1").Shapes(i).Height + 10 Selection.Text = "図表番号" & i Next i End Sub ーー (1)図の追加には対応してない (2)図の種類の多様性混在に不安あり。 (3)同種の写真など単一の種類の図(Shapes)である。 (4)「図表番号 XX」という文句や表示位置は、少々の修正で対応できる。 テキストボックスの枠線を消すのは簡単。 (5)図の下には、シートにおいて、適当な空白部を採ること。 図をマウスなどでクリックしたときの、イベントとそのオブジェクトを捉まえる方法がわからず 断念した。 小生の情報収集力が弱いのかも。
お礼
いろいろ調べていただき、またVBAを作成してくださりありがとうございます。確かにワードの情報はたくさん出てきましたが、1つの図面上にクリックしたらナンバリングするものはワードにもありませんでした。VBAとマクロの違いも判らずトライしようとしたのがそもそも間違いかもしれませんでした。貴殿のVBAはエクセル上で動作を確認いたしました。VBAとは何かが少し理解できました。ありがとうございます。
お礼
図まで添付いただき、わかりやすくご説明いただき大変感謝いたします。クリックした場所に連番を付けることが難しいこともわかりました。他方、作成頂いたプログラムをエクセル上で実行し同じようにできたことに感激しております。(貴殿にとっては当たり前のことでしょうけど) ありがとうございました。