Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : その他)
セルの値をクリックによって別のセルに転記する方法
投稿日時: 21/07/11 21:37:01
投稿者: aletear

Excelマクロ初心者です。
 
セルの値をクリックによって別のセルに転記する方法がわからず、教えていただけますでしょうか。
 
実現したいことは、以下の2点です。
 
1. 数値が入力されたD3〜W3セルの任意のセルの数値を、クリックもしくはダブルクリックによってX3セルに転記したい。
 
2. 同じシート内で、D4〜W4セルの任意のセルの数値を、クリックもしくはダブルクリックによってX4セルに転記したい。
 
BeforeDoubleClickやSelectionChangeあたりのイベントを利用すれば良いのかと思いますが、転記されなかったり、双方のセルに同じ値が転記されてしまったりします。
 
ご面倒をおかけしますが、ご教示いただきたく。よろしくお願いいたします。

回答
投稿日時: 21/07/11 21:44:45
投稿者: simple

SelectionChangeはクリックというよりも、
カーソル位置を変更するだけで起動しますから、
意図しないときに転記されることになると思います。
私は、意図が明確なBeforeDoubleClickが適切かと思います。
 
>転記されなかったり、双方のセルに同じ値が転記されてしまったりします。
トライされたものがあるのでしたら、それを示してもらえますか?

回答
投稿日時: 21/07/11 22:11:29
投稿者: simple

もちろん、完成品を求めているわけではなく、動作が意図しないものであって結構なんです。
せっかく作成されているわけですから、回答者の皆さんから意見をもらうよい機会になります。

投稿日時: 21/07/11 22:25:11
投稿者: aletear

simple 様
 
さっそくご連絡をいただき、ありがとうございます。
 
私が作ってみたものは以下のとおりです。
 
現状、D3〜W3、D4〜W4の範囲の任意のセルをダブルクリックすると、
X3、X4に同じ値が同時に入力されてしまいます。
 
D3〜W3の範囲でダブルクリックしたセルの値はX3のみ、
D4〜W4の範囲ではX4のみに入力したいのですが。。。
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("D3:W3")) Is Nothing = False Then
        If Target.Column <> 1 Then Exit Sub
        Cancel = True
        If Target.Value <> "X3" Then
            Target.Value = "X3"
        Else
            Target.Value = ""
        End If
    End If
    If Intersect(Target, Range("D4:W4")) Is Nothing = False Then
        If Target.Column <> 1 Then Exit Sub
        Cancel = True
        If Target.Value <> "X4" Then
            Target.Value = "X4"
        Else
            Target.Value = ""
        End If
    End If
End Sub
 
取り急ぎ、現状をお伝えいたします。

回答
投稿日時: 21/07/11 22:34:29
投稿者: simple

うーん。逐一のコメントは少し難しいので、
代案を見てもらえますか。
不明点があれば、質問下さい。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Range("D3:W4")) Is Nothing Then Exit Sub
    
    Cancel = True
    If Target.Row = 3 Then
        Target.Copy Range("X3")
        ''Range("X3").Value=target.value ' 値だけなら
    Else
        Target.Copy Range("X4")
        ''Range("X4").Value=target.value ' 値だけなら
    End If
End Sub

投稿日時: 21/07/11 23:34:29
投稿者: aletear

simple 様
 
できました!!
 
値だけの場合についても実現したいことでしたので、助かりました。
 
心より、感謝申し上げます。
 
今後とも、よろしくお願いいたします。