• ベストアンサー

ダブルクリックしたセルのフォーカス位置取得

初めて投稿します。よろしくお願い致します。 Excel上でダブルクリックしたセルの内容を、次のようにしたいと思っています。 ダブルクリックしたフォーカス位置より左側 → 現セルに残す ダブルクリックしたフォーカス位置より右側 → 右側のセルの値の先頭につける 知りたいことは、アクティブセルのフォーカスの位置(左から何文字目か?)を取得できるものでしょうか? ご教授頂ければ幸いです。 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#2、cjです。#2への補足、追加レスです。 ちょっと説明が足りてなかったのですが、 テストする際の要件として、 最初に、シートモジュールにSub 準備()だけを貼り付けて 一度だけ実行します。 それが済んだら、他のプロシージャを貼り付けて、 ブックを保存します。 ここまでが準備、で、 "最初に、シートモジュールにSub 準備()だけを" という説明が抜けていました。すみません。

msnki522
質問者

お礼

回答していただき、ありがとうございます。 サンプルプログラムを改造して、ほぼ思っていたものを作ることができました。 また何かありましたら、宜しくお願いします。

その他の回答 (2)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答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 などで検索してみてください。 セルのフォントサイズや全角半角、等々、細かい調整の部分は、今の処、アイディアが浮かばないので、 マウスカーソルポジションを取得しアクティブセルと座標を合わせるところぐらいまで、 そちらで目途が付いた頃に、また改めて質問してみてはどうでしょうか。 以上です。

  • oka_me
  • ベストアンサー率86% (26/30)
回答No.1

ワークシートのBeforeDoubleClickイベントを使用すると、オブジェクト変数Targetにダブルクリックしたセルが格納されます。 http://msdn.microsoft.com/ja-jp/library/ff196564.aspx その際に Target.Addressでセル番地、Target.Columnで列番号、Target.Rowで行番号が返されるかと思います。 例えばD3セルをダブルクリックすると Msgbox Target.Address で「$D$3」 Msgbox Target.Column で「4」 Msgbox Target.Row で「3」が表示されます。 質問者様のケースの場合Target.Columnで良いかと。。

msnki522
質問者

お礼

回答頂きありがとうございます。 やりたいことは、そのtargetのセル内で編集モードとなっているフォーカスの位置が左から何文字目かを取得したいのです。 説明が不足していてすみません。

関連するQ&A

  • EXCEL ダブルクリックして他のセルの値を表示させる方法

    エクセルで、空白のセルをダブルクリックすると、そのセルの4つ左のセルの値が入るようにしたいのですが教えて下さい。 VBAはできてるものを貼り付ける程度しかわからないので、宜しくお願いします。

  • Excel2007でのセルのダブルクリック

    Excelでアクティブセルの枠をダブルクリックすると、 一定の条件に合致するセルまでアクティブセルがジャンプする機能がありますが、 セルが小さい時には誤って枠をダブルクリックしてしまうことが多く、非常に不便です。 下記サイトでは、Excel2003での解決方法が掲載されていますが、 根本的な解決策ではないため、採用できません。 http://www.relief.jp/itnote/archives/000181.php #オートフィルが使えなくなるという代償はとても許容できません・・・ 同じ情報を掲載している他サイトもありましたが、いずれもExcel2003までの古い情報です。 私はExcel2007を使用しているのですが、2007ではこの機能をうまく無効化できないのでしょうか。

  • クリックされたセルの位置を取得するには?

    テーブルのセルがクリックされた時、そのセルの位置(行番号、列番号)を取得したいと思っています。 セルオブジェクトのプロパティ(?)がよく分からないのですが、どうすれば取得できますか? ご回答よろしくお願いします。

  • セルが左ダブルクリックされると、そのセルが色づけされるプログラムがあり

    セルが左ダブルクリックされると、そのセルが色づけされるプログラムがあります。 しかし、そのセル内に複数行の文字列が入力されている場合、そのセルを選択時、 そのセル内の文字列が数式バーにも複数行表示されますが、数式バーとセルが重 なってしまう時、左クリックが優先されてしまうため、左ダブルクリックが認識 できません。どうすれば、この問題を解決できるのでしょうか。 教えて下さい。

  • VBAでマウスボタンが離された時のセル番地を取得

    エクセル2010のVBAを使ってマウスのボタンが離された場所のセル番地を取得することはできますか?  例えば  マウスの左ボタンをA5の位置で離したとしたらA5というセル番地が返されるようにしたいです(ボタンを離したときのセルはアクティブセルではないという条件で)。

  • Macエクセル2011 カーソルより左側の文字編集

    Mac OS X 10.7.2 での、エクセル2011の操作についてお尋ねします。 セルに文字を入力し、直後にその文字を編集するために左矢印キーを押すと、フォーカスが左のセルに移ってしまいます。 そのため、文字を編集するには元のセルをダブルクリックしなくてはなりません。 フォーカスを左のセルに移さずに左側の文字を編集する方法があれば教えていただけませんでしょうか。 ちなみにWinではF2を押しながら左矢印キーを押せばできるらしいのですが、Macでのやりかたがわからず困っています。

    • 締切済み
    • Mac
  • セルのダブルクリックで下へ飛ぶ(Excel)

    Excelで、セルの中の文字列を書き換えようとしてダブルクリックすると、ときどきですが、そのワークシートの最下行にジャンプしてしまいます。 なぜでしょうか?

  • エクセルで、セルの位置を取得したい

    エクセルで、x,yデータがあり、 たとえば、xの最大値をmax関数 でもとめたとき、その時のyデータの値を 取得したい。 そのためには最大値のセルの位置を取得 する必要があるとおもうのですが、 わかる方よろしくお願いします。

  • Excelでセルの位置を取得したい

    Excelでセルの位置を取得したいです。 まず、以下のような表があります。    |1|2|3|4|5| ーーーーーーーーーー Aさん| | | | |X| Bさん| |X| | | | Cさん| | |X| | | 表とは別の場所に名前が記載されたセルがあります。 そちらのセルに書かれた名前を元に表を検索して、Aさんは5、Cさんは3といった具合に値を取得するにはどうすればよいのでしょうか。

  • 【ExcelVBA】セルをダブルクリックしてセルのアドレス値を取得

    シートをダブルクリックする事で、ユーザフォームを起動させるマクロを作っているのですが、 ダブルクリック時にクリックしたセルのアドレス値を取得することって出来るのでしょうか。 作業環境は、WindowsXP/Excel2003/VB6です。 ご存知の方がいましたら、ご指導お願い致します。

専門家に質問してみよう