アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのA列のA1,A2,A3...には選手人名
が入っています。
例えばA2(田中選手)の相手となる選手名(山本
選手)をA19列から持ってきてB2にセットしたいのです。
ドラッグアンドドロップ的にB列にA列から移動したい
のです。左上中白矢印ポインターを出して移動できる
のは判りますが、左上中白矢印を出すのが確実に
行かないことがあるので、中白十字状態でドラッグアンド
ドロップ出きるか、A19をクリックし後にB2をクリック
するとA19の内容がB2に移るようにするには、VBAを
どう組めば良いのでしょうか。教えて下さい。

A 回答 (4件)

2つ考えてみました。


<その1>
最初は普通に選択し、次の貼り付けるセルはCtrlキーを押しながら選択します。
作業をするシートのコードウインドウに貼り付けます。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  Dim kammaPot As Integer 'カンマ位置
  Dim rg1 As Range, rg2 As Range '最初に選択したセルと次に選択したセル

  On Error GoTo ErrorHandler

  If Target.Count = 2 Then
    'セルを2個選択している場合
    kammaPot = InStr(Target.Address, ",")
    Set rg1 = Range(Left(Target.Address, kammaPot - 1))
    Set rg2 = Range(Right(Target.Address, Len(Target.Address) - kammaPot))
    rg2.Value = rg1.Value
    rg1.Value = ""
    rg2.Select
  End If

  Exit Sub

ErrorHandler:

End Sub

--------------------------
<その2>
次は、質問のとおりにA、B列でのみ処理をするケースです。
作業をするシートのコードウインドウに貼り付けます。
なお、2つ同時には登録できません。

Dim AiteSensyu As String 'A列の選択した選手名
Dim AiteSensyuAddress As String 'A列の選択した選手の行

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  On Error GoTo ErrorHandler

  If Target.Count = 1 Then
    If AiteSensyu <> "" Then
      '選手の選択が済んでいる場合
      If Target.Column = 2 Then 'B列
        Target.Value = AiteSensyu
        Range(AiteSensyuAddress) = "" '選択した選手のセルをクリア
        AiteSensyu = "" '選択した選手をクリア
      End If
    Else
      If Target.Column = 1 Then 'A列
        AiteSensyu = Target.Value '選択した選手を記憶する
        AiteSensyuAddress = Target.Address '選択した選手のセル番地
      End If
    End If
  End If

  Exit Sub

ErrorHandler:

End Sub
    • good
    • 0

要はセル情報の移動の簡略化を行いたいわけですよね。



確かに#2さんの発言にあったように、コピペがベストかも?
右手はマウス
左手は[Ctrl+C][Ctrl+V]を押す。
これの繰り返しがいいとは思うのですが。。。

もしどうしてもVBAで行いたいのであれば、結構制限があります。
EXCELの仕様から認識できるイベントが少ないからです。

一応サンプルを作りましたが、これはダブルクリックでセル情報を取得し、右クリックで貼り付けるプログラム(マクロ?)です。
常にダブルクリックはコピー/右クリックは貼り付けとなるために、エクセル標準のダブルクリックで編集モード、右クリックでポップアップメニューが使えなくなってます。
ですので、コピペモードと、エクセル本来のモードを切り分けるフラグを標準モジュールでフラグを宣言し、実行/解除ボタンも用意しておく事を勧めます。

以下のソースを、標準モジュールではなく、シートのモジュールに貼り付けてください。


Option Explicit

'Rangeオブジェクト変数
Private pRange As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  'クリックの操作無効(この場合ダブルクリックによるセルの編集モードが無効)
  Cancel = True
  
  'アクティブなセルを、変数にセット
  With Target
    Set pRange = Cells(.Row, .Column)
  End With
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  'クリックの操作無効(この場合右クリックによるメニューの表示が無効)
  Cancel = True
  
  '貼り付けるものが無い時、未処理
  If pRange Is Nothing Then
    MsgBox "移動するセルが指定されていません"
    Exit Sub
  End If
  
  'セルを切り取って貼り付け
  pRange.Cut
  With Target
    Cells(.Row, .Column).Select
  End With
  Paste
End Sub
    • good
    • 0

>VBAをどう組めば良いのでしょうか。

教えて下さい。

VBAでは無理じゃないですかね。同じクリックする動作の1回目(切り取り)と2回目(貼り付け)に差をつけるわけですから、その途中にはマクロの実行ボタンを押さなければダメですよね。

自動で切り取れる方法も試してみたんですけど、例えば普通のモジュール1でなく、シートの方にあるWorksheet_SelectionChangeイベントでもセルをクリックすると1回目は「切り取り」になるんですが、2回目に貼り付け先のセルをクリックした瞬間、当然のことですがそのセルを切り取ってしまい貼り付けることができませんでした。

imogasiさんがご存知の(確かにいらいらしますが)マウスで移動する方法が一番早いのではないでしょうか。

ちょっと遅いですが、私ならば右クリック「切り取り」→「貼り付け」を使うかもしれませんね。参考にならなくてすみません。
    • good
    • 0

意味がよく理解できていません。



移動用のマウスカーソル状態以外でも、マウス操作でセルの内容を移動したいという事ですか?

この回答への補足

太いプラスのポインターから中が空白の矢印ポインターに変えるのに、ワンステップ、ツーステップ操作が必要だったり、上手く矢印ポインタに変えにくいことが多いので、クリックしてドラッグか、ポイント(fromから)して別のセルをポイント(toへ)して確実に移動したいためです。よろしく。実際例は選手の組み合わせでなく、多量に組み合わせるべきデータがあるため確実に迅速に操作を進めたいのです。

補足日時:2001/11/18 10:04
    • good
    • 0

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