マクロ初心者です。(エクセル2003使用)
シート1にある表で、M列が空白以外(処理済みなどの値がある場合)である場合、その行全体をコピーし、シート2の最終行に貼り付けして、シート1からはその行を削除するマクロを作成したいと思っていますができません。
すみませんが、どなたかご教授願います。
(シート1の表)
・8行目が題目となっており、A9から表となっています。
・表の全体サイズは、横がAからMまでで、縦はC(シー)の管理番号行分までとなっています。(Mは、空欄があったり値(処理済みなどの値)が入っていたりしています)
(考えているマクロ)
・Loopの回数は、Cの管理番号が終わるまで
・IFでCに値があり、Mが空欄だった場合は、そのまま(何もしない)
・Cに値があり、Mに値があった場合は、その行全体を選択しコピーし、シート3の最終行に貼り付け、シート1のその行は削除する
Sub 処理済み()
Range("C9").Select
Do While ActiveCell.Value = ""
ActiveCell.Offset(1).Select
Loop
If ActiveCell.Offset(, 10).Value = "" Then
そのまま
Else If ActiveCell.Offset(, 10).Value = "値があったら" Then
その行全体を Select.Copy
Sheets("Sheet2").Select
Dim 下
下 = Range("A").End(xlDown).Row
ペースト
削除
End If
End Sub
すみませんが、どなたか教えていただけましたら助かります。
よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
基本は最低限勉強した方がよいと思いますよ
>・Loopの回数は、Cの管理番号が終わるまで
初心者はdo~loopではなくfor~nextを使用した方が良いでしょう
do~loopは確実な条件を設定しないと無限ループになりやすく、扱いが難しい
行削除を伴う処理は最終行から行う方がよい
3行、4行目が削除対象だとして
上から処理を行った場合
3行目の行削除処理を行うと、4行目が3行目に移動するため
4行目が行削除処理されないままになってしまうため
上のようなことを踏まえて
Sub test()
Dim i As Long, ii As Long
ii = Worksheets("sheet2").Range("A65536").End(xlUp).Offset(1).Row
With Worksheets("sheet1")
For i = .Range("c65536").End(xlUp).Row To 9 Step -1
If .Cells(i, 3).Value <> "" And .Cells(i, 13).Value <> "" Then
Worksheets("sheet2").Rows(ii).Insert Shift:=xlDown
.Rows(i).Copy Worksheets("sheet2").Cells(ii, 1)
.Rows(i).Delete Shift:=xlUp
End If
Next i
End With
End Sub
参考程度に
ご丁寧なアドバイスを投稿いただきまして、ありがとうございます。
まだまだ分からないことが沢山あり、応用をきかすこともできない状態ですが、回答いただいたコードを理解できるよう勉強しようと思います。ご親切な回答、本当にありがとうございました。
No.3
- 回答日時:
知ったかぶりです。
#1さんのご意見も御もっともですが、失礼ながら質問者さんは、
#1さんのアドバイスを実行出来るレベルに無いと感じました。
VBEを起動(alt+F11)して、F8キーを押す毎に、マクロを1Stepずつ
実行でき、ご自分で作られたマクロが何故期待動作しないかを確認、
改善すれば良いと思います。
参考に、質問者さんがやりたいと思うソースを以下に示します。
これも、1Stepずつ実行して、各命令がどのような動作をしているか
観測して、学習してください。
尚、もっとスマートなやり方もありますが、質問者さんが考えられた
方法を出来るだけ再現したつもりです。
Sub sample()
Dim i As Long
Dim j As Long
i = 9
j = 1
Do While Cells(i, 3) <> ""
If Cells(i, 13) <> "" Then
Rows(i & ":" & i).Copy
Sheet2.Select
Rows(j & ":" & j).Select
ActiveSheet.Paste
j = j + 1
Sheet1.Select
Rows(i & ":" & i).Select
Selection.Delete
i = i - 1
End If
i = i + 1
Loop
No.1
- 回答日時:
そこまで出来ているのに何が判らないのでしょうか?
実際にやってみておかしな所(分からない部分)を
質問すべきではないでしょうか?
中には、ご親切な回答者のかたもおられてプログラムを
組んでくれるかも知れませんが・・・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
メッセージボックスのOKボタ...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
一つのTeratermのマクロで複数...
-
EXCELのVBAでRange("A1:C4")を...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
ExcelのVBA。public変数の値が...
-
Excel VBAからAccessマクロを実...
-
エクセルのマクロをセルの値に...
-
EXCELマクロでのThisisWor...
-
VBA初心者 Ctrl+での操作、ボタ...
-
ピボットテーブルでの毎回可変...
-
VBAのIF分で時間指定の条件式の...
-
TERA TERMを隠す方法
-
マクロ実行時、ユーザーフォー...
-
エクセルで別のセルにあるふり...
-
ソース内の行末に\\
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
他人が作ったマクロの理解
-
ExcelVBAでPDFを閉じるソース
-
TERA TERMを隠す方法
-
エクセルで別のセルにあるふり...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
EXCELのVBAでRange("A1:C4")を...
-
TeraTermマクロの文字列結合
-
PDF出力マクロについて。マクロ...
-
#defineの定数を文字列として読...
-
エクセルのマクロをセルの値に...
-
wordを起動した際に特定のペー...
おすすめ情報