[[20150128172701]] 『条件に一致しない行を削除するマクロ』(zunzun) ページの最後に飛ぶ

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

 

『条件に一致しない行を削除するマクロ』(zunzun)

A列〜O列にデータがあります。A2行から4行毎に工事のデータが複数記入してあり、各ブロックの集計行も途中にあります。このデータで、売上予定が書いてある行より上の3行を残し、他の行を削除したいのですが、どうしたらよいのでしょうか?

  A  ・・・・・・・・・・O
1 山側ブロック
2 工事G
3 ●×
4 --
5 売上予定
6 工事Z
7 ▲■
8 ***
9 売上予定
10 山側ブロック計
11
12 利益
13
13 海側ブロック
14 工事Q

なお、売上予定を検索するマクロは以下のように書いて、実行できています。よろしくお願いします。

Sub Find_01()

'A列に売上予定があれば、明るい緑にセルを着色

  Dim c As Object
  Dim myKey As String, fAddress As String
      myKey = "売上予定"
      With Worksheets(1).Range("a1:a1000")
           Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlWhole, _
                            SearchOrder:=xlByColumns, MatchByte:=False)
          If Not c Is Nothing Then
              fAddress = c.Address
              Do
                  c.Interior.ColorIndex = 4 '明るい緑
                  Set c = .FindNext(c)
                      If c.Address = fAddress Then Exit Do
              Loop
          End If
      End With
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 行削除はさいごにまとめて実行したほうが効率的ですけど、手を抜いて。

 Sub Test()
    Dim c As Range
    Dim mRow As Long
    Dim i As Long

    mRow = Range("A" & Rows.Count).End(xlUp).Row
    For i = mRow To 4 Step -1
        If Cells(i, "A").Value = "売上予定" Then Cells(i, "A").EntireRow.Offset(-3).Resize(3).Delete
    Next

 End Sub

 あっ!!! もとい!! 3行を消すんじゃなく残すんですね。↑は無視してください。

(β) 2015/01/28(水) 18:01


 これでいかがでしょうか。

 Sub Test2()
    Dim c As Range
    Dim mRow As Long
    Dim i As Long

    mRow = Range("A" & Rows.Count).End(xlUp).Row
    For i = mRow To 1 Step -1
        If Cells(i, "A").Value = "売上予定" Then
            Rows(i).Delete
            i = i - 3
            If i < 0 Then Exit For
        Else
            Rows(i).Delete
        End If
    Next

 End Sub

(β) 2015/01/28(水) 18:34


 こんな感じかな?

 Sub test()
    Dim r As Range, ff As String
    Set r = Columns(1).Find("売上予定")
    If Not r Is Nothing Then
        ff = r.Address
        Do
            r(-2).Resize(4).EntireRow.Hidden = True
            Set r = Columns(1).FindNext(r)
        Loop While ff <> r.Address
        Range("a1", Range("a" & Rows.Count).End(xlUp)).SpecialCells(12).EntireRow.Delete
        Columns(1).Rows.Hidden = False
    End If
End Sub
(seiya) 2015/01/28(水) 18:36


βさん、seiyaさん
おはようございます。
seiyaさんのコードを完全一致になるように
右式のように("売上予定", LookAt:=xlWhole)
修正してうまくできました。
βさんの式は、私の伝え方が悪く、売上予定の
行も削除されてしまい、修正を試みましたが
断念しました。
ありがとうございました。

(zunzun) 2015/01/29(木) 11:13


一点教えてください。
seiyaさんのコードにある
SpecialCells(12) はどんな意味なのでしょうか?

(zunzun) 2015/01/29(木) 11:57


 Specialcells(12)
 は
 SpecialCells(xlCellTypeVisible)で可視セルの意味です。
(seiya) 2015/01/29(木) 12:09

seiyaさん
ありがとうございました。
12はxlCellTypeVisibleを示すのですか?
数値で指示が決まる、対比表があるのでしょうか?
ネットで検索しても、判明しませんでした。
よろしくお願い足します。
(zunzun) 2015/01/29(木) 12:59

 VBエディタでSpecialcells部分にカーソルを置いてF1を押してヘルプを表示させてみてはどうか?
(ねむねむ) 2015/01/29(木) 13:12

 VBE - [表示] - [オブジェクトブラウザー]

 xlCellType

 と入力すると全てのメンバが表示されますよ?
暇なときに見ておくと参考になるかも
(seiya) 2015/01/29(木) 13:17

seiyaさん ねむねむさん
なるほど!理解できました。
ありがとうございました。
(zunzun) 2015/01/29(木) 13:57

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.