[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで空白行の削除を非表示シートに実行したい』(スマトラ)
大変いつもお世話になっております。
下記、コードは、BKシート内にデータ範囲と空白範囲があり、空白行のみ検索して削除するというコードです。
ネットの書き込みを参考にしました。
質問内容は
With sh2のみに行削除を別のシートを開いた状態でも実行できるようにしたいのですが
下記のコードでは、他のシートを開いた状態で実行すると、まんまと削除されてしまいました。
それと、繰り返し処理で、1行づつ処理しているためか若干時間が(数秒ですが)かかるのも気になります。
皆様どうか、アドバイスの程よろしくお願い致します。
'表形成処理 Dim sh2 As Worksheet: Set sh2 = Worksheets("BK") '転記先 Dim row_end As Long Dim i As Long With sh2 row_end = .Cells(Rows.Count, 2).End(xlUp).Row '転記先の最終行取得 For i = row_end To 1 Step -1 '最終行から上に向かって1行づつ処理 If WorksheetFunction.CountA(Rows(i)) = 0 Then '値がない場合 Rows(i).Delete '行削除 End If Next i End With
< 使用 Excel:Excel2010、使用 OS:Windows7 >
[[20180509001948]] 『マクロ:別のシートで実行するとWorksheetエラーが』(スマトラ)
(マナ) 2018/05/15(火) 21:23
並び替えていいなら、
並び替えをすると空白セルは下に追いやられるので、
空白を削除したように見えます。
そして、処理速度は速いです。
その方法ではだめでしょうか?
>Rows(i).Delete '行削除
どのシートの行を削除するか指示してないので、
指示された側で勝手に判断されても文句は言えません。
間違いなく作業を他人(今回はエクセル君)にしてもらうためには、
正確に横着せずに丁寧に指示をしてやる必要があります。
(まっつわん) 2018/05/15(火) 21:41
.Rows(i).Delete '行削除 →忘れていました「.」
フィルタ操作、かなり高速でしたので以下の通り修正しました。
別のシートからでもできました。
ただ、連番は少しもたつきます。
'表形成処理 Dim r As Long
With sh2 r = .Cells(.Rows.Count, "B").End(xlUp).Row '最終行取得 .Range(.Cells(2, 1), .Cells(r, 1)).Value = 1 'フィルタ認識させるために最終行までA列を1で埋める .Range("A1").Sort key1:=.Range("B1"), order1:=xlAscending, Header:=xlYes '昇順で空白除去 .Range(.Cells(2, 1), .Cells(r, 1)).Value = "" 'A列をクリア→後に連番コードに移る End With '連番付加 Dim n As Long Dim No As Integer With sh2 n = 1 'nは連番の最初の値 For No = 2 To .Cells(.Rows.Count, "B").End(xlUp).Row '2行目〜B列の値が入っている最終行範囲まで If .Cells(No, "B").Value <> "" Then 'Bに値がなければ終了 .Cells(No, "A").Value = n '値があれば1を挿入 n = n + 1 '順次1を加える End If Next No End With (スマトラ) 2018/05/15(火) 22:24
Dim r As Long With sh2 r = .Cells(.Rows.Count, "B").End(xlUp).Row .Cells(2, 1).Value = 1 .Cells(3, 1).Value = 2 .Range(.Cells(2, 1), .Cells(3, 1)).AutoFill Destination:=.Range(.Cells(2, 1), .Cells(r, 1)) End With (スマトラ) 2018/05/15(火) 22:38
↓マクロの記録の結果
Sub Macro1()
'
' Macro1 Macro
'
'
Range("A9").Select ActiveCell.FormulaR1C1 = "1" Range("A9:A16").Select Selection.DataSeries Rowcol:=xlColumns, Type:=xlLinear, Date:=xlDay, _ Step:=1, Trend:=False End Sub (まっつわん) 2018/05/15(火) 23:11
Dim Rng As Range
With Worksheets("BK") Set Rng = .Range(.Range("B2"), .Cells(.Rows.Count, "B").End(xlUp)) End With
With Rng .Sort key1:=.Cells(1), Header:=xlNo With .SpecialCells(xlCellTypeConstants).Offset(, -1) .Cells(1).Value = 1 .DataSeries Rowcol:=xlColumns, Step:=1 End With End With End Sub
対象セル範囲がよくわかってないけど^^;
(まっつわん) 2018/05/15(火) 23:24
何から何までありがとうございます。
処理完了できました。
解決です(^^)
(スマトラ) 2018/05/16(水) 19:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.