[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで空白行の削除を非表示シートに実行したい』(スマトラ)
大変いつもお世話になっております。
下記、コードは、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.