
No.2ベストアンサー
- 回答日時:
こんにちは
既に回答が出ているので、ご参考までに。
#1様との違いは、以下の点です。
・マウスポインタの位置にテキストボックスを追加します
(#1様の回答はセル位置に追加されますが、ボックスの左上がマウス位置になるように追加します)
・自動的にナンバリングします(1~100)
(現状のままだと使い易いのか、使いにくいのかわかりませんが(笑)、自動ナンバリングのヒントとして…)
※ テキストボックスのサイズ、色等は適宜調整願います
※ 「クリックに反応」だと他のマウス操作ができなくなってしまうので、ひとまず、ダブルクリックにしてありますが、#1様ご提案のコマンドに追加する方式が使いやすそうな気がしますので、そのようにする方が良いかもしれません。
標準モジュールに
Private counter As Integer
Const ratio = 72 / 96
Private Type POINTAPI
X As Long
Y As Long
End Type
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Sub TextBoxWithNumber()
Dim p As POINTAPI
Dim X As Single, Y As Single, Z As Single
Dim tbx As Shape
GetCursorPos p
Z = ActiveWindow.Zoom / 100
X = (p.X - ActiveWindow.PointsToScreenPixelsX(0)) * ratio / Z
Y = (p.Y - ActiveWindow.PointsToScreenPixelsY(0)) * ratio / Z
Set tbx = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, X, Y, 22, 22)
counter = (counter Mod 100) + 1
tbx.Fill.ForeColor.RGB = RGB(255, 255, 255)
tbx.Line.ForeColor.RGB = RGB(125, 125, 125)
tbx.Line.Weight = 0.25
With tbx.TextFrame2
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
.MarginBottom = 0
.VerticalAnchor = msoAnchorMiddle
.HorizontalAnchor = msoAnchorCenter
.TextRange.Font.Size = 10
.TextRange.Characters.Text = str(counter)
End With
End Sub
シートモジュールに
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call TextBoxWithNumber
End Sub
この回答へのお礼
お礼日時:2018/06/06 18:56
ありがとうございます。
回答ありがとうございます。
ほとんど、思い通りの動きになっております。実際は、図面データ(画像)の任意の位置へテキストボックスへプロットしていく使用方法となります。
ダブルクリックに拘らず、他にいい方法はないでしょうか??
No.4
- 回答日時:
No2です
>実際は、図面データ(画像)の任意の位置へテキストボックスへ
>プロットしていく使用方法となります。
あれっ!?
それって、エクセルに貼り付けた画像の上にテキストボックスを置いていくって意味ですよね?
もしそうだとすると、クリックやダブルクリックではセルのイベントが発生しないので、No2のコードではうまくいかないように推測しますけれど?(セルの背景として画像を入れ込むようなことはできなかったように思いますので…)
基本的にNo1様のコードとNo2のコードの処理内容はほとんど同じですし、はからずも構成も似たものになってます。
(イベントあるいはコマンド取得部分と、実際の処理部分を分けた構成になっている)
違いはNo2にも示しましたが、トリガー(きっかけ)が異なることと、挿入位置を決めるのにマウス位置/セル位置のどちらから求めているかだけと言ってもよいくらいでしょう。(内容の違う部分はコードも異なりますが)
>ダブルクリックに拘らず、他にいい方法はないでしょうか??
シート上では(No2にも記したように)操作のためのクリックイベントは直接は拾えないと思いますが、挿入した画像上であればクリックイベントを拾うことが可能ですので、クリックで動作するように変えてあげれば、そのまま使えるはずと思います。
あるいは、キーボードとの併用になりますが、ショートカットを割り当てておいてキーの押下げでテキストボックスを追加するようにしておくとか、いろいろ方法はあるものと思います。
実際にどのような使い方になるのかがわかりませんので、質問者様(あるいは使う方)の使いやすい方法に設定しておくのが宜しいかと思います。
(上でも述べましたが)たまたまとは言え、No1、2ともトリガー部分と実処理部分が別構成になっているので、トリガー部分をを入れ変えるだけで組み換えが可能なはずと思います。
ところで、自動ナンバリングに関しては、No2のままだと番号を変えたい時や、途中から作業継続したい時などに開始番号を指定できないので、実際の使用に供するには不十分ではないかと想像します。
ですので(多分)、最低でも開始番号をセット可能なようにしておいた方がよさそうに思います。
とはいっても、counter変数に値をセットするだけの簡単な処理なので、別に作成しておいて、必要な時に実行すれば済みますね。(頻度が多いわけではないでしょうから)
いっそのこと、counter変数の代わりにシート上の固定セルを利用するようにしてしまえば、そのセルの値を直接編集することで番号を指定できるようにもなるので、そちらの方が良いのかも知れません。

No.3
- 回答日時:
画像にということなら、No.2さんの回答でいいと思いますが、
ダブルクリックがいいのか右クリックがいいのかは、あなたが選択することです。
プロットするということは、テキストボックスではなく、本当は「吹き出し」を描きたいのでは?
あとは、マクロをどこに書くかですね。
エクセルで他の作業をする場合に邪魔にならない様にする為にどうしたいか?

No.1
- 回答日時:
個人用マクロブックに作ってみました。
ThisWorkbook に以下を。
Option Explicit
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add _
(Type:=msoControlButton, ID:=2950, Temporary:=True)
.Caption = "テキストボックスの貼り付け"
.FaceId = 3143
.OnAction = "テキストボックスの貼り付け"
End With
End Sub
標準モジュールに以下を。
Option Explicit
Sub テキストボックスの貼り付け()
With ActiveWindow.RangeSelection
ActiveSheet.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal _
, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
End With
With Selection.ShapeRange(1).TextFrame2
.MarginTop = 0
.MarginBottom = 0
.MarginRight = 0
.MarginLeft = 0
.VerticalAnchor = msoAnchorMiddle
.HorizontalAnchor = msoAnchorCenter
End With
End Sub
この回答へのお礼
お礼日時:2018/06/06 18:52
回答ありがとうございます。
私の知識不足のため、これをベースに思い通りの動きを得られませんでした。勉強していきます。ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel ハイパーリンクのURLを別...
-
Excel内での検索結果をシート...
-
Excel2007 色のカウント (VBA)
-
太字に設定されているセルの個...
-
エクセル 数字をすべて○などの...
-
EXCEL プルダウンから指定セル...
-
クリックすると文章が表示され...
-
Excelで、図形内の文字をセルに...
-
エクセルマクロ 赤色の文字を検...
-
セルから取得したURLをwebクエ...
-
ページ内ハイパーリンクの表示...
-
エクセルのセル内の行の並び替...
-
エクセル 行列を入れ替えてオ...
-
エクセルでの検索ボックスの作...
-
セルの値が変ると自動でマクロ...
-
エクセルで複数セルの文字を一...
-
エクセルでページ数をあるセル...
-
Excel VBのComboBoxで横一列の選択
-
EXCELのセルや文字色の反映
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
Excel2007 色のカウント (VBA)
-
クリックすると文章が表示され...
-
マクロを実行すると画像がズレ...
-
太字に設定されているセルの個...
-
Excelでセルをクリックす...
-
エクセルでPDFリンクを大量...
-
アポストロフィーの一括挿入 ...
-
エクセル 未入力セルがあると...
-
エクセルでページ数をあるセル...
-
シート保護とグループ化機能を...
-
ページ内ハイパーリンクの表示...
-
フォントの色を指定して削除出...
-
空白セルを空セルに置き換える...
-
Excel:セルの値(文字列)を数...
-
現在のセルの位置を返す関数は...
おすすめ情報