重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Excel VBA の質問です。
あるセル(仮に "C8")に「リンゴ」と書かれています。また他のセル(仮に "F10")に「ミカン」と書かれていたとします。

セル"C8" と "F10" を連続してクリックし、「交換」というボタンを押すと、"C8"に「ミカン」、"F10" に「リンゴ」とデータが入れ替わるようにしたいのです。
最初にC8セルをクリックしたときに「リンゴ」とセル情報をコピーするところからわかりません。

この「交換」というボタンにどのようなVBA記載をすればよいのか、どなたか教えてください。
対象のセルは一つの表の中ではどことどこを交換するかは決まっていません。とにかく任意にクリックされた2つのセルデータを交換したいのです。

A 回答 (3件)

「みかん」と「りんご」を連続してクリックしてからボタンを押してマクロを実行した時、マクロで判断できるのは、直近でクリックした「りんご」の位置だけで、「みかん」の位置は分かりません。

これを何とかするには、それなりの工夫が必要となり、仕組みが大げさになってしまいます(できない訳ではないですが・・・)。
そこで、操作方法をちょっと変えることにより、簡単に実装することができるようになります。

下記の例では、「みかん」をクリックした後、Ctrlを押しながら次の「りんご」をクリックし、両方を選択状態にした上で、ボタンをクリックすると選択されているセルの値が入れ替わります。

Sub sample()
Dim r As Range
Dim rs As Range
Dim s As Variant
For Each r In Selection
If rs Is Nothing Then
Set rs = r
s = r.Value
Else
rs.Value = r.Value
r.Value = s
s = rs.Value
End If
Next r
End Sub

ちなみに、3つ以上のセルを選択した場合でも動作すると思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
今の私の状況ではこの方法がぴったりでした。
助かりました。

お礼日時:2020/06/13 15:24

こんにちは!



>・・・クリックしたときに・・・
単にクリックだけだと間違ったセルを選択しただけでも反応してしまいますので、
ダブルクリックの方法はどうでしょうか?

一例です。
元のセル番地とデータを一旦どこか使っていないセルに退避させておくのはダメですか?
仮に使っていないセルをZ1・Z2セルとします。

シートモジュールです。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim myAd As String
 Cancel = True
  With Target
   myAd = .Address
    If Range("Z1") = "" Then
     Range("Z1") = myAd
     Range("Z2") = .Value
    Else
     myAd = Range("Z1")
     Range(myAd) = .Value
     .Value = Range("Z2")
     Range("Z1").Resize(2).ClearContents
    End If
  End With
End Sub

※ すべてのセルで反応してしまいます。
本来であれば対象セルを限定した方がよいと思います。

※ 細かい検証はしていませんので
お望みどおりにならなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法も今後のために記録保管しておきます。

お礼日時:2020/06/13 15:25

一旦、片方を変数にセルの値を退避させておく方法が、一番簡単だと思います。



Dim str一時保存 As String

str一時保存 = Range("C8").value
Range("C8").value = Range("F10").value
Range("F10").value = str一時保存
    • good
    • 0

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