[[20170105143133]] 『A列の最終行から5行目までに空欄があればその行を』(QPちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


Cells.Selectで全体を選択しているのだから、1〜4行目も消しちゃいますよね。全体Selectを、行範囲指定に変えるとか?

別案で、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.