dポイントプレゼントキャンペーン実施中!

こんにちは エクセル365を使っています。

X3~Y15セルに入力してある値をクリックしたらB1セルに張り付けたいと思います。

X3をダブルクリックでX3の値をB1に、X4のダブルクリックしたらX4の値をB1セルに、と言うようなものです。

詳しい方、教えて頂けませんか?

よろしくお願いいたします。

A 回答 (7件)

おかしいですね。


検証サンプルX3からY15の範囲でダブルクリックするとダブルクリックしたセルの値がB1に入力される。
Sheet1のモジュールにコピペ

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Not Intersect(Target, Range("X3:Y15")) Is Nothing Then
    Range("B1") = Target.Value
    Cancel = True
  End If
End Sub
「エクセル マクロ クリックしたセルの内容」の回答画像6
    • good
    • 0
この回答へのお礼

あ、なるほど

Ifからの分は、宣言プロージャ? の中に含むんですね、その部分が違っていました。
おかげさまで動きました。

最後まで教えて頂き大変感謝しております。
ありがとうございました。

お礼日時:2020/03/05 09:44

#6の補足画像

「エクセル マクロ クリックしたセルの内容」の回答画像7
    • good
    • 0

>と入れてダブルクリックしてみたのですが、何も起こりません。

なにか他にやるべきなんでしょうか?
>VBAの画面に
この画面とは何を指していますか?

質問にシート名がないのですが、ダブルクリックする 該当のシートモジュールにコードを書きます。
参考 https://ateitexe.com/excel-vba-module/
    • good
    • 0
この回答へのお礼

再回答ありがとうございます。
利用する実際に数式が入っているシートのモジュールに記述しました。

コードは以下の部分が全てですよね?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

If Not Intersect(Target, Range("X3:Y15")) Is Nothing Then
Range("B1") = Target.Value
Cancel = True
End If

ダブルクリックしてみましたが、普通通りセルが入力状態に変わるだけのようです。

お礼日時:2020/03/05 01:33

めぐみんさん 


その通りですね。(ByVal Target As Range, Cancel As Boolean)ですものね。

趣味の範疇で回答しているのは、良くないなぁと思うこの頃です。
力技や処理をそのまま進めたり(やりたい事の言葉通り)、、Objectがごっちゃになったり、、
仕事でVBA書くこともないので、、具体的な例を挙げられるレベルではないですね。。

ご指摘、ありがとうございます。感謝いたします。

知識として出来れば良いと言う事ではないので
#3にあるように、次のようにするべきです。 
If Not Intersect(Target, Range("X3:Y15")) Is Nothing Then

Range(Target.Address)に付いては、RangeからAddressをわざわざ取り出し
それをまたRangeとすると言う無駄な事を行っています。
Targetと言う名前で変数を使う癖があり、変な癖がついてしまったのと、
正しい認識がなく書いたものなどで反省します。

gekikaraouさんすみません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

VBAの画面に
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

If Not Intersect(Target, Range("X3:Y15")) Is Nothing Then 'TargetがRange範囲にあれば、、
Range("B1") = Target.Value
Cancel = True
End If

と入れてダブルクリックしてみたのですが、何も起こりません。
なにか他にやるべきなんでしょうか?

お礼日時:2020/03/04 18:41

回答ではないですが。



No.2さんの

>If Not Intersect(Range(Target.Address), Range("X3:Y15")) Is Nothing Then



If Not Intersect(Target, Range("X3:Y15")) Is Nothing Then

で良かったと記憶しているのですが。。。
Target は Range型ですので。
もし遠い記憶違いであればごめんなさい。
    • good
    • 0

やっぱり、条件設定の方法をExcelVBAらしく?しないと叱られるかも知れないので下記も参考に


 If Not Intersect(Range(Target.Address), Range("X3:Y15")) Is Nothing Then ’TargetがRange範囲にあれば、、
  Range("B1") = Target.Value
  Cancel = True
 End If
結果は#1と同じです。
    • good
    • 0

VBEを起動して(Alt+F11)該当のシートモジュールにダブルクリックイベントを拾うプロシージャを作ります。



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub
その中に、セルの条件(実行条件)を設定してメインコードを書きます。

例として Target の列番号範囲、行番号範囲で条件を設定します。
Targetは、ダブルクリックしたセルオブジェクトで、Columnなら列番号 Xは24番
同様に.Row は、行番号です。他にもAddressなどでセルの場所を認識できます。

If Target.Column = 24 Or Target.Column = 25 Then ’X,Y列ならば、次を実行
If Target.Row >= 3 And Target.Row <= 15 Then ’3~15行ならば、次を実行
Range("B1") = Target.Value ’ダブルクリックしたTargetの値をB1セルに(貼り付けとありますが、参照形式で。貼り付けにしたい場合は、この行部分を変えます)
Cancel = True ’ダブルクリックをCancel  そのままセル内にカーソルを入れたい場合は削除、要りません。
End If
End If

内容や意味を確認して、このコードをプロシージャ内にコピー
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています