[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『A列の最終行から5行目までに空欄があればその行を削除』(QPちゃん)
こんにちわ。
A列の最終行から5行目までに空欄があればその行を削除したいです。
(A列の1行目から4行目までに空欄があってもその行は削除したくないです。)
下は現在のマクロです↓
・指示書番号というのがA列にあるのが邪魔なのでDelete。
・A列の空欄の行を削除。
Sub 指示書番号の行のみを残す()
With ActiveSheet x = .Cells(.Rows.Count, "A").End(xlUp).Row For i = x To 1 Step -1 If .Cells(i, "A").Value Like "出荷指示番号" Then .Rows(i).Delete End If Next End With
Cells.Select
Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
宜しくおねがいします。
< 使用 Excel:unknown、使用 OS:unknown >
別案で、A列の消したくない行には、スペース文字でも入れておくとか?
(???) 2017/01/05(木) 15:15
要件誤解しているかもしれませんが。(19:58 不要コードを削除)
Sub Sample() With Range("A1", ActiveSheet.UsedRange).Offset(4) .Columns(.Columns.Count + 1).Formula = "=IF(OR(A5="""",A5=""出荷指示番号""),True,"""")" .Columns(.Columns.Count + 1).SpecialCells(xlCellTypeFormulas, xlLogical).EntireRow.Delete .Columns(.Columns.Count + 1).ClearContents End With
End Sub
(β) 2017/01/05(木) 16:22
こんばんわ。
βさんから一発で削除出来る効率の良いコードの提示があるので余談みたいなものですが、 QPちゃんさんのコードを修正するとしたら、
For i = x To 1 Step -1
このループカウンタを
For i = x To 5 Step -1
にすれば1〜4行目は削除されませんね。 後、削除行の抽出条件に、
If .Cells(i, "A").Value Like "出荷指示番号" Then
空欄判定も加えると、こんな感じかな。
If .Cells(i, "A").Value Like "出荷指示番号" Or IsEmpty(.Cells(i, "A")) Then
こんな感じかな。 まぁ数十行くらいなら余り分からないですけど、行数が多いと凄く時間がかかるので、 βさんの一括で削除との時間差がはっきり分かると思います。
それよりも、モジュールの先頭に Option Explicit と表示されていますか? xやiの変数を宣言せずに使われているみたいなので、思わぬ所でエラーになったり、 予期せぬ結果を返す危険性があるので、Option Explicit で変数の宣言を強制する事を 強くお勧めします。
設定の仕方は、VBEのツール→オプションの編集タブに「変数の宣言を強制する」 とあるのでチェックを入れるだけです。 以降新しくモジュールを挿入したら Option Explicit が自動で記述されて、 変数の宣言をしないとExcelに叱られるようになります。
後本当に余談でしかないし別に問題でも無いんですけど、グラフや座標などではxは横軸を表すので、 縦軸である行の変数にxは、個人的には凄く違和感を感じますねぇ。
(sy) 2017/01/05(木) 23:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.