重要なお知らせ

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

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

【作りたいマクロ】
アクティブセルが、A表orB表のどちらかにあるかを判断して
A表にアクティブセルがある場合⇒A表の最終行に行を移動
B表にアクティブセルがある場合⇒B表の最終行に行を移動
したいです

もし、以下条件の他に、目印になるのを表の行や列に付けて
上記、マクロが達成するなら、付ける事も可能です

アドバイスやコード作れる方、教えて下さい

【作成済みマクロ】
A表にアクティブセルがある時、行をA表の最終行へ移動するマクロ
B表にアクティブセルがある時、行をB表の最終行へ移動するマクロ



【条件】
A表は上、B表は下です
A表とB表の間は常に8セルあいています
A3セル⇒A表
B表は、日付項目の2つ上のセルにB表と表記。事例は、B15
A表やB表のデータ数は変動する





【A表にアクティブセルがある場合のコード】
Sub A表()



LastRow1 = Cells(5, "A").End(xlDown).Row
ActiveRow = ActiveCell.Row


Cells(ActiveRow, 1).Resize(1, 3).Interior.ColorIndex = 15
Cells(ActiveRow, 3) = "削除"


Cells(ActiveRow, 1).Resize(1, 3).Cut Cells(LastRow1 + 1, 1)

ActiveCell.EntireRow.Delete
Rows(LastRow1 + 2).Insert

End Sub

【B表にアクティブセルがある場合のコード】
Sub B表()

LastRow1 = Cells(Rows.Count, "A").End(xlUp).Row

ActiveRow = ActiveCell.Row


Cells(ActiveRow, 1).Resize(1, 3).Interior.ColorIndex = 15
Cells(ActiveRow, 3) = "削除"

Cells(ActiveRow, 1).Resize(1, 3).Cut Cells(LastRow1 + 1, 1)

ActiveCell.EntireRow.Delete

End Sub

「【マクロ、画像あり】A表かB表かどちらか」の質問画像

A 回答 (4件)

No.3です。


大変失礼しました。前回投稿の「Sub sample_A表_B表共通()」は正しく機能しないことが判明しました。
tatsumaru77さんの投稿を読んで、チェックすべきところをチェックできていなかったことに気づきました。
以下のよう修正しましたので、前回回答のコードは無かったものとしてください。

Sub sample_A表_B表共通()
Dim lastrow1 As Long
Dim lastrow2 As Long
Dim Activerow As Long
Dim Activecol As Long

'B表の最終行番号を取得
lastrow1 = Cells(Rows.Count, "A").End(xlUp).Row

'アクティブセルがある表の最終行番号取得
lastrow2 = ActiveCell.CurrentRegion.Rows.Count + ActiveCell.CurrentRegion.Row - 1

'アクティブセルの行番号、列番号を取得
Activerow = ActiveCell.Row
Activecol = ActiveCell.Column

'アクティブセルの列番号が3より大きい、または行番号がA表の開始行より小さいかB表の最終行より大きい、あるいは、その行のB列(お客様情報)が空欄 または「お客様」(見出し行)なら即終了
If Activecol > 3 Or ActiveSheet.UsedRange.Row > Activerow Or lastrow1 < Activerow Or Cells(Activerow, 2).Value = "" Or Cells(Activerow, 2).Value = "お客様" Then Exit Sub

'アクティブセルの行のA~C列の背景色を指定
Cells(Activerow, 1).Resize(1, 3).Interior.ColorIndex = 15

'アクティブセルの行のC列を「削除」とする
Cells(Activerow, 3) = "削除"

'アクティブセルの行を切り取り
'Rows(Activerow).Cut 'C列より右にデータがある場合はこちらをコメントアウト
Cells(Activerow, 1).Resize(1, 3).Cut 'C列より右にデータがある場合はこちらのコメントアウトを外す

'切り取った行を最終行の次に挿入
'Rows(lastrow2 + 1).Insert 'C列より右にデータがある場合はこちらをコメントアウト
Cells(lastrow2 + 1, 1).Insert Shift:=xlDown 'C列より右にデータがある場合はこちらのコメントアウトを外す

End Sub
    • good
    • 1

ご質問者が掲出した画像のA~C列の右側にはデータは存在するのでしょうか?


同じように、
>A表とB表の間は常に8セルあいています
と説明されている
https://oshiete.goo.ne.jp/qa/14059828.html
との関連が気になるところです。

仮に右側にデータがない場合、アクティブセルがある行をまるごと、表の最終行へ移動しても、実質的な影響はないので、A表、B表共通のコードとして、

Sub sample_A表_B表共通()

Dim TopLeftCell As Range
Dim lastrow1 As Long
Dim lastrow2 As Long
Dim Activerow As Long


'A表の左上隅のセルを取得
Set TopLeftCell = ActiveSheet.UsedRange.Cells(1, 1)

'B表の最終行番号を取得
lastrow1 = Cells(Rows.Count, "A").End(xlUp).Row

'アクティブセルがある表の最終行番号取得
lastrow2 = ActiveCell.End(xlDown).Row

'アクティブセルの行番号を取得
Activerow = ActiveCell.Row

'アクティブセルの行番号がA表の開始行より小さい、または、B表の最終行より大きい、あるいは、その行のB列(お客様情報)が空欄 または「お客様」(見出し行)なら即終了
If TopLeftCell.Row > Activerow Or lastrow1 < Activerow Or Cells(Activerow, 2).Value = "" Or Cells(Activerow, 2).Value = "お客様" Then Exit Sub

'アクティブセルの行のA~C列の背景色を指定
Cells(Activerow, 1).Resize(1, 3).Interior.ColorIndex = 15

'アクティブセルの行のC列を「削除」とする
Cells(Activerow, 3) = "削除"

'アクティブセルの行を切り取り
Rows(Activerow).Cut 'C列より右にデータがある場合はこちらをコメントアウト
'Cells(Activerow, 1).Resize(1, 3).Cut 'C列より右にデータがある場合はこちらのコメントアウトを外す

'切り取った行を最終行の次に挿入
Rows(lastrow2 + 1).Insert 'C列より右にデータがある場合はこちらをコメントアウト
'Cells(lastrow2 + 1, 1).Insert Shift:=xlDown 'C列より右にデータがある場合はこちらのコメントアウトを外す

End Sub

とするのはいかがでしょうか。

老婆心ですが、付け加えると、万一、このシートのC列の右側に
https://oshiete.goo.ne.jp/qa/14059828.html
で説明されているA列~C列が、例えばD列~F列に展開されている場合、行まるごと移動する方法は使えません。(コメントアウトを入替て対応)
その後、F列を整形する必要があるので、

Sub sample_整形()
Dim lastrow As Long
lastrow = Cells(Rows.Count, "D").End(xlUp).Row
Range("F1").Formula2 = "=FILTER(D1:D" & lastrow & ",(D1:D" & lastrow & "<>"""")*(D1:D" & lastrow & "<>""x""))"
Range("F1#").Value = Range("F1#").Value
End Sub
という、極めて簡潔なコードで整形すればよいと思います。
    • good
    • 1

図の状態でマクロを実行する場合、


A表にアクティブセルがあると判断して良いのは、A6:C7の範囲であってますか。
不明点1:A8:C8にアクティブセルがあるのは、どうなのか?(削除のものをまた削除するのか)
不明点2:6から7行目であっても、D6とかH7とかがアクティブセルはどうなのか?
不明点3:1~5行目、9~16行目にアクティブセルがあるのは論外と考えて良いか。
等が気になります。

B表にアクティブセルがあると判断して良いのは、A18:C20の範囲であってますか。
不明点4:A21:C21アクティブセルがあるのは、どうなのか?(削除のものをまた削除するのか)
不明点5:18から20行目であっても、D20とかZ18とかはどうなのか。
不明点6:17行目、20行目以降にアクティブセルがあるのは論外と考えて良いか。
等が気になります。
    • good
    • 1

LastRow1 = ActiveCell.End(xlDown).Row


にすればいいでしょう。
    • good
    • 2

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A