• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELでセルの移動マクロを作りたいのですが…)

EXCELでセルの移動マクロを作りたい!

このQ&Aのポイント
  • EXCELを使用してセルの移動マクロを作成する方法を教えてください。
  • データ範囲がA1:E11であり、A1:E10にはデータが入っています。A列には名前、B〜E列には数字が入っており、A11:E11は合計が表示されます。マクロを再生すると、A2:E10のデータを上に移動させたいです。さらに、A3:E3の内容が消えると、A4:E10のデータを上に移動したいです。
  • マクロを作成して、データが消えた時にマクロで上に詰める方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。汎用的にしてみました。4~7行目を変更してください また貼り付けも値のみにしています Private Sub Worksheet_Change(ByVal Target As Range) Dim idx, cnt As Integer Dim rng As Range Const fRow As Integer = 1  'データ開始行 Const tRow As Integer = 10 'データ最終行 Const fCol As String = "A" 'データ開始列 Const tCol As String = "E" 'データ最終列   Set rng = Intersect(Target, Rows(fRow & ":" & tRow))   If Not rng Is Nothing Then     cnt = Columns(fCol & ":" & tCol).Count     On Error GoTo err0     Application.ScreenUpdating = False     Application.EnableEvents = False     For idx = tRow - 1 To fRow Step -1       If Application.CountA(Cells(idx, fCol).Resize(1, cnt)) = 0 Then         Cells(idx + 1, fCol).Resize(tRow - idx, cnt).Copy         Cells(idx, fCol).PasteSpecial Paste:=xlPasteValues         Cells(tRow, fCol).Resize(1, cnt).ClearContents       End If     Next idx     Target.Select   End If err0:   Application.CutCopyMode = False   Application.EnableEvents = True   Application.ScreenUpdating = True End Sub

setsunaru
質問者

お礼

判りやすいプログラムありがとうございます。 個人的には500ptつけたいぐらい親切に対応してくださって感謝です。。 本当は同じような感じで他の列も同じシートでやりたいんですが…そこまでは贅沢ですよね(汗 本当に助かりました。ありがとうございます★★★

その他の回答 (2)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です マクロを貼り付ける場所の説明を間違えました 入力するシートの「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付けてください ワークシート画面に戻って、適当な行のデータを削除してみてください ただし本当の行削除を行うと合計行も上にずれてしまいますから、気をつけてくださいね

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

そのようなマクロを作ってみました。 以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 でもA1:E10が「例えば」の例でなければ良いのですが。もし違うならそれなりに手を入れないとダメですよ。 Private Sub Worksheet_Change(ByVal Target As Range) Dim idx As Integer Dim rng As Range   Set rng = Intersect(Target, Rows("1:10"))   If Not rng Is Nothing Then     On Error GoTo err0     Application.EnableEvents = False     For idx = 10 To 1 Step -1       If Application.CountA(Cells(idx, "A").Resize(1, 5)) = 0 Then         Cells(idx + 1, "A").Resize(11 - idx, 5).Copy Cells(idx, "A")         Cells(10, "A").Resize(1, 5).ClearContents       End If     Next idx   End If err0:   Application.EnableEvents = True End Sub

setsunaru
質問者

お礼

早速の回答ありがとうございます!! 実際に行の値を消した時に下の値が動いたときはびっくりして思わず声が出てしまいましたw 今回、合計行がA1:E10にしておりますが、もし、合計行がもっと下に来た場合はどの値を変えればよいのでしょうか?いろんなサイズで使えたらと思いますので是非教えていただきたいです。m(_ _)m

setsunaru
質問者

補足

あと、もう一つお尋ねしたいのがコピーした際に、罫線も一緒に移動するのですが、罫線等の書式はそのままで値のみ移動させることは可能なのでしょうか?たとえ無理だとしてもこんなことが出来るなんて…zap35さんをリスペクトです☆

関連するQ&A

専門家に質問してみよう