
【質問】
以下のコードより、行数や文字数を少ない
マクロにする事はできますか?
マクロを少しでも簡単にしたいです
ご存じの方、コードやアドバイスをお願いします
【マクロの説明】
アクティブセルになっている行を上の表の最終行の1つ下に
移動するマクロです。移動する表の3列目には削除と文字が入力されます
以下コードは動きます
【条件】
上と下の表は常に8セルあいています
【コード】
Sub 不要行削除()
Dim filePath As String
Dim wb As Workbook
Dim LastRow1 As Long
filePath = "C:\Users\2020\OneDrive\マクロ\不要行削除\鏡.xlsm"
Set wb = Workbooks.Open(filePath)
Set ws = wb.Worksheets("RC00810")
LastRow1 = Cells(5, "A").End(xlDown).Row
ActiveRow = ActiveCell.Row
ws.Range(Cells(ActiveRow, 1), Cells(ActiveRow, 3)).Interior.ColorIndex = 15
ws.Cells(ActiveRow, 3) = "削除"
ws.Range(Cells(ActiveRow, 1), Cells(ActiveRow, 3)).Cut ws.Range(Cells(LastRow1 + 1, 1), Cells(LastRow1 + 1, 3))
ActiveCell.EntireRow.Delete
Rows(LastRow1 + 2).Insert
End Sub

A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No1の回答のお礼にいただいた質問の答えです
---------------------------------------------------
(1) Range("A" & ActiveRow & ":C" & ActiveRow) の意味・・・
まず、この部分は 「A列からC列の ActiveRow 行目を範囲として取得」 という意味になります。
例えば、ActiveRow = 8 なら「ws.Range("A8:C8")」と同じです。
---------------------------------------------------
(2) .Cells(1, 3) の意味
次に Cells(1, 3) の動作ですが、これは 指定した範囲 (A8:C8) の中で、行1・列3 のセルを指します。
「A8:C8」の中で Cells(1, 3) を考える
Range("A8:C8") の セルの構成 を考えると、A8 B8 C8 の3つのセルがあります。
この範囲内での .Cells(1, 3) の意味は、
「この範囲の1行目(最初の行)の3列目」 なので C8 を指します。
つまり、「ws.Range("A8:C8").Cells(1, 3) = "削除"」は 「C8 に '削除' と入力する」 という意味になります。
---------------------------------------------------
(3) Cells(1,3) が A3 ではない理由
もし Cells(1, 3) を ワークシート全体(ws.Cells(1,3)) で考えるなら、それは C1 になります。
しかし、 Range("A8:C8") という範囲の中で Cells(1,3) を使っている ため、
「この範囲内での相対的なセル位置」として解釈 されます。
したがって、
Cells(1,1) → A8
Cells(1,2) → B8
Cells(1,3) → C8
となるわけです。
---------------------------------------------------
No.2
- 回答日時:
ws.Activateを入れれば、以降は ws. が不要になりスッキリします。
説明では行を移動するということなので、CutするのもEntireRowにして
ActiveCell.EntireRow.Cut Rows(LastRow1 + 1)でいいでしょう。
図では8行目に「削除」の行が残っているし移動先はグレイになっていないし説明と違いますが、図が間違っているのでしょうか?
No.1
- 回答日時:
改善点
・Dim を1行に記載する
・不要な変数を削減
filePath 変数を削除し、直接 Open に記述。
・With ステートメントの使用
ws の指定を簡略化し、冗長な ws.Range(Cells(...)) を省略。
・変数の宣言と使用方法を最適化
ActiveRow は Dim で明示的に宣言。
・セルの範囲指定を簡略化
Range(Cells(...), Cells(...)) を Range("A" & row & ":C" & row) で簡単に記述。
・不要な Insert の削除
Rows(LastRow1 + 2).Insert は不要だったため削除。
Sub 不要行削除()
Dim wb As Workbook, ws As Worksheet, LastRow1 As Long, ActiveRow As Long
' ブックを開く
Set wb = Workbooks.Open("C:\Users\2020\OneDrive\マクロ\不要行削除\鏡.xlsm")
Set ws = wb.Worksheets("RC00810")
' 最終行を取得
LastRow1 = ws.Cells(5, "A").End(xlDown).Row
ActiveRow = ActiveCell.Row
' 移動する行の色を変更し、3列目に「削除」と入力
With ws.Range("A" & ActiveRow & ":C" & ActiveRow)
.Interior.ColorIndex = 15
.Cells(1, 3) = "削除"
.Cut ws.Range("A" & LastRow1 + 1)
End With
' 元の行を削除
ActiveCell.EntireRow.Delete
End Sub
大変、分かりやすいコードありがとうございます
1点質問なのですが
ws.Range("A" & ActiveRow & ":C" & ActiveRow).Cells(1, 3) = "削除"
ここが分からないのですが、例えばActiveRowが8なら
A8:C8=Cells(1,3)=”削除” となると
Cells(1,3)は、A3になるイメージがありまして
つながってこないのです
ただ、コード動くのであっているのは分かっています
どういう意味か教えて頂けると幸いです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】アクティブセルの行のデータをクリアするマクロについて 1 2024/06/12 06:45
- Excel(エクセル) 【マクロ】AブックからBブックへデータコピーの後、Bブックに上書きされないようにするには? 3 2024/12/22 11:53
- Excel(エクセル) 【マクロ】1回目の実行後、2回目からは実行できないようにはできますか? 3 2025/02/18 21:20
- Visual Basic(VBA) VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。 1 2024/01/08 16:23
- Visual Basic(VBA) 【マクロ】1つのマクロの中に、ブック指定とシート指定が混在しても良いのですか? 2 2024/05/16 07:13
- Excel(エクセル) マクロについて 2 2023/10/20 14:29
- Excel(エクセル) 【マクロ】上のデータに下のデータを、結合する 3 2025/03/11 12:12
- Visual Basic(VBA) エクセルマクロで出力行の増やし方がわかりません。 4 2023/09/28 23:40
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) ユーザーフォームに別シートからデータを反映させたい。 10 2023/11/03 08:46
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルについてどう関数を使えばいいか教えてください。
Excel(エクセル)
-
Excel いい方法教えてください。
Excel(エクセル)
-
関数を教えて下さい
Excel(エクセル)
-
-
4
【マクロ、画像あり】A表かB表かどちらか判断をして、処理をする
Excel(エクセル)
-
5
至急お願いします!エクセルのフィルターについて
Excel(エクセル)
-
6
Excelについて教えてください。
Excel(エクセル)
-
7
【マクロ】条件付き書式設定をマクロ化するには?
Excel(エクセル)
-
8
Excel関数の解決方法
Excel(エクセル)
-
9
別のシートの指定列の最終行を返す関数の式を教えて下さい。
Excel(エクセル)
-
10
条件付書式設定にて、本日の日付を条件として、2行分にセルに色を付けるには?
Excel(エクセル)
-
11
Excel 複数のセルが一致するときに網掛けをする式は作れますか
Excel(エクセル)
-
12
【マクロ】1回目の実行後、2回目からは実行できないようにはできますか?
Excel(エクセル)
-
13
【関数】同じ関数なのに、エラーが出るエクセルと出ないエクセルある?
Excel(エクセル)
-
14
役所でもらった書類をエクセル化するには? 役所に申請する用紙があります。A4で表になっていて枠内に文
その他(Microsoft Office)
-
15
エクセルについて教えてください
Excel(エクセル)
-
16
エクセルに、105と入力すると、勝手に100で除算して1.05になってしまうのは何故でしょうか? ち
Excel(エクセル)
-
17
【マクロ】A列にある、日付(本日:4月17日)を検索し、セルを選択するには?
Excel(エクセル)
-
18
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
19
システムファイルについて
Excel(エクセル)
-
20
自動的に日付入力 応用
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセルのdatedif関数を使って...
-
エクセル ドロップダウンリスト...
-
特定のセルだけ結果がおかしい...
-
【マクロ】【配列】3つのシー...
-
【関数】同じ関数なのに、エラ...
-
【マクロ】列を折りたたみ非表...
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【マクロ】EXCELで読込したCSV...
-
【条件付き書式】シートの中で...
-
【マクロ】オートフィルターの...
-
ページが変なふうに切れる
-
【マクロ】アクティブセルの時...
-
【マクロ】3行に上から下に並...
-
エクセルの循環参照、?
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】A列にある、日付(本...
-
エクセル
-
エクセルに、105と入力すると、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報