プロが教える店舗&オフィスのセキュリティ対策術

Excel VBA セルの上下移動

C D E
3 001 みかん 300
4 003 ぶどう 400
5 005 バナナ 200
6 002 りんご 100
7 004 スイカ 500

例えば
C5をクリックしたとき
マクロ登録した上ボタンを押したら
C列を上に移動。
下ボタンを押したら下に移動できる
VBAを教えてください。

A 回答 (3件)

こんばんは、



こちらは、参考になりますでしょうか?
https://oshiete.goo.ne.jp/qa/11583115.html

#2の
Sub SITA() '下に1つ移動
Dim r As Long
On Error Resume Next
 r = ActiveCell.Row '選択されているセルの行
 Rows(r).Cut
 Rows(r + 2).Insert
End Sub
を参考にしてください。
UEは、#1を上記コードを参考に変えてみてください。
    • good
    • 0
この回答へのお礼

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

SUB 上へ()
If Intersect(Range("C3:C24"), Selection) Is Nothing Then Exit Sub
If Selection.CountLarge = 1 Then
Selection.Cut
Selection.Offset(-1).Select
Selection.Insert Shift:=xlDown
End If
End Sub

は上手くいくのですが
1行目を

SUB 上へ()
If Intersect(Range("C3:E24"), Selection) Is Nothing Then Exit Sub
If Selection.CountLarge = 1 Then
Selection.Cut
Selection.Offset(-1).Select
Selection.Insert Shift:=xlDown
End If
End Sub

とすると上手く動きません
ご教授いただけませんか?

お礼日時:2020/06/05 05:46

おはようございます。


曖昧なアドバイスにもかかわらず、流石です。
短いプロセスですが、順番と内容を理解しないと改造できないと思います。
上のプロシージャも下のものも、ちゃんと出来ていると思うのですが、
期待する動作は、どの様なものでしょうか、

変えた部分の、、ご存知と思いますが、
Intersect(Range("C3:E24"), Selection)は、二つの範囲(又は単セル)が重なっていれば
返されるので、C3:E24範囲のセルが選択されていれば、実行されると思います。

ローカルで検証してみましたが、両方とも条件範囲内で実行されました。
C列からE列を纏めて上下したいと言う事でしょうか?

期待する動きを自動記録を使っても記録できるかと思いますので
記録されたコードを参考にされるのが、良い方法かもしれません。
    • good
    • 0

C列からE列まで


同時に移動する下方向サンプルです。
連続して動かすことを想定して最後に実行時の列で移動したセルをSelectしています。
Sub 下へ()      
Dim rng As Range
Dim Col As Long, Rw As Long
  If Intersect(Range("C3:E24"), Selection) Is Nothing Then Exit Sub
  If Selection.CountLarge = 1 Then
   Col = Selection.Column
   Rw = Selection.Row
   Set rng = Range(Cells(Rw, "C"), Cells(Rw, "E"))
   rng.Cut
   rng.Offset(2).Insert Shift:=xlDown
   Cells(Selection.Row + 1, Col).Select
  End If
  Set rng = Nothing
End Sub
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます。
すごいです。
やりたかったことが完璧にできました。

お礼日時:2020/06/06 04:34

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