
No.3ベストアンサー
- 回答日時:
#2、cjです。
#2への補足、追加レスです。ちょっと説明が足りてなかったのですが、
テストする際の要件として、
最初に、シートモジュールにSub 準備()だけを貼り付けて
一度だけ実行します。
それが済んだら、他のプロシージャを貼り付けて、
ブックを保存します。
ここまでが準備、で、
"最初に、シートモジュールにSub 準備()だけを"
という説明が抜けていました。すみません。
回答していただき、ありがとうございます。
サンプルプログラムを改造して、ほぼ思っていたものを作ることができました。
また何かありましたら、宜しくお願いします。
No.2
- 回答日時:
こんにちは。
"セルをダブルクリック"というタイミングは、Excel VBA に用意されていますが、
"編集モードで セルに付随した入力領域や数式バー をダブルクリック"というのは、
捉えようがありません。納得いかないかも知れませんが、仕方ないです。
なので、提案になりますが、
・事前に(ActiveXコントロールの)テキストボックスコントロールをシート上に配置しておく。
・編集したいセルをダブルクリックしたら、直下にテキストボックス(淡い黄色)を再表示し、
編集したいセルの文字列をテキストボックスの値として表示する。
・テキストボックス内で任意の桁位置(文字間)をダブルクリックしたら、
その桁位置を基準に、そのセルと右隣りのセル(の先頭)とに、文字列を分ける。
・テキストボックスをダブルクリックして処理を終えるか、
セル範囲の選択を変更したら、テキストボックスを非表示に戻す。
という内容を書いてみました。
Worksheet_BeforeDoubleClick イベントを契機にして、
ダブルクリック本来の機能をキャンセルし、代りにテキストボックスを再表示します。
注意点として、直接セル値を編集する場合は、数式バーを使うようにします。
また、処理する範囲を予め限定しておいた方が、他への影響を与えない意味があるので、
例示では、仮に、Range("A2:E31")を対象にしています。
この"A2:E31"の部分を運用に合わせて書き換えるようにしてください。
テストする際の要件として、
・処理対象のシートに既存の(ActiveXコントロールの)テキストボックスコントロール
が無いことを条件としています。お困りなら相談してください。
・必ず、処理対象のシートモジュールに下記コードを貼り付けてください。
・処理対象のシートモジュールに既存の記述がある場合は、
プロシージャ名が重複することの無いようにしてください。
・Sub 準備() を最初に一度だけ実行してください。
テキストボックスは様々カスタマイズできます。
応用例として、例えば、セル内改行にも対応させたいとか、横幅を大きくしたいとか、、、
テキストボックスのプロパティを設定変更することで対応可能です。
とりあえず、試してみてください。
' ' 以下、シートモジュール
' ' ===================================
Sub 準備() ' TextBoxを配置。一度だけ実行し、ブックを保存したら不要。
With Me.OLEObjects.Add(ClassType:="Forms.TextBox.1")
MsgBox "TextBoxを追加しました。TextBoxを非表示にします。"
.Object.BackColor = &HCCFFFF
.Visible = False
End With
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("A2:E31")) Is Nothing Then Exit Sub
Cancel = True
With TextBox1
.Text = Target(1).Text
.Top = Target(1).Offset(1).Top
.Left = Target(1).Offset.Left
.Visible = True
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If TextBox1.Visible Then TextBox1.Visible = False
End Sub
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim sBuf As String
Dim nPos As Long
With TextBox1
sBuf = .Text
nPos = .SelStart
.TopLeftCell.Offset(-1).Value = Left(sBuf, nPos)
With .TopLeftCell.Offset(-1, 1)
.Value = Mid(sBuf, nPos + 1) & .Text
End With
.Visible = False
End With
End Sub
' ' ===================================
> 知りたいことは、アクティブセルのフォーカスの位置(左から何文字目か?)を取得できるものでしょうか?
もし、真に文字通りのことをお知りになりたいのでしたら、、、。
"セルをダブルクリック"したタイミングで、
マウスカーソルポジションを取得して、、、というような方法も可能は可能です。
ただ、コマンド待機状態(非編集状態)(セル内にキャレットが無い状態)でダブルクリックというのも、
実用的にはかなり扱いが難しいと思いますし、
上述のように編集モードからはイベントがありませんので、上のような妥協案を挙げました。
マウスカーソルがどのセルの上にあるか、迄は、昔やったことがありますが、
桁位置は経験ありませんし、私は試すつもりがないのです。
人に奨めたりするには、技術的な難度が高くて、検証したり"教授"したりする体力知力を持ち合わせていません。
excel vba declare getcursorpos pointstoscreenpixels
などで検索してみてください。
セルのフォントサイズや全角半角、等々、細かい調整の部分は、今の処、アイディアが浮かばないので、
マウスカーソルポジションを取得しアクティブセルと座標を合わせるところぐらいまで、
そちらで目途が付いた頃に、また改めて質問してみてはどうでしょうか。
以上です。

No.1
- 回答日時:
ワークシートのBeforeDoubleClickイベントを使用すると、オブジェクト変数Targetにダブルクリックしたセルが格納されます。
http://msdn.microsoft.com/ja-jp/library/ff196564 …
その際に
Target.Addressでセル番地、Target.Columnで列番号、Target.Rowで行番号が返されるかと思います。
例えばD3セルをダブルクリックすると
Msgbox Target.Address で「$D$3」
Msgbox Target.Column で「4」
Msgbox Target.Row で「3」が表示されます。
質問者様のケースの場合Target.Columnで良いかと。。
回答頂きありがとうございます。
やりたいことは、そのtargetのセル内で編集モードとなっているフォーカスの位置が左から何文字目かを取得したいのです。
説明が不足していてすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ExcelVBAで自動調整できますか? 3 2023/08/25 22:59
- Excel(エクセル) 【Excel:条件付き書式 データバー】 正負の軸の位置を変更する方法を教えてください 3 2023/01/08 19:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) VBAについて教えてください。 Excelで セルのB6~BG24でダブルクリックすると ダブルクリ 1 2022/06/02 17:07
- Excel(エクセル) Excelの文字列を転記したいのですが。 2 2022/09/30 12:09
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) Excelのセル上の日付の不具合 3 2022/05/22 18:20
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Excel(エクセル) エクセルマクロ セルをクリックするたびに記号を入力 1 2022/10/13 19:47
- Excel(エクセル) vba セルの罫線について教えてください 2 2022/12/28 17:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
VBAでCOPYを繰り返すと、処理が...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ダブルクリックで貼り付けた画...
-
【マクロ】開いているブックの...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
-
エクセルのVBAコードについて教...
-
ワードの図形にマクロを登録で...
-
【マクロ】値を渡されたプロシ...
-
【マクロ】モジュール変数の記...
-
Vba FileSystemObject オブジェ...
-
VBAの質問(Msgboxについて)です
-
Excelのマクロについて教えてく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報