• 締切済み

マクロを使って特定の文字の入った行を非表示にしたいのですが・・

エクセルのマクロを使って 自分の選択した範囲内で L列に"摘要"かつK列に"金額"の文字が入っている行と L列が空白かつD列も空白である行 を削除するようにするにはどうしたらよいでしょうか 仕事の中でこれがマクロでできるようになるとすごく便利なので・・。よろしくお願いします。

みんなの回答

  • terakura
  • ベストアンサー率20% (4/20)
回答No.3

No1のterakuraです。 回答に補足させてください。 質問には非表示にしたい、とあり、質問内容には削除したい・・・と書いてありましたね。 私は削除の方で書いてみたのですが、もし非表示にするだけでしたら、For~Nextステートメントが以下のように変わります。ご参考まで。 For x = 1 To i If ActiveCell.Value = "適用" And ActiveCell.Offset(0, -1) = "金額" Then   ActiveCell.EntireRow.hidden=true ElseIf ActiveCell.Value = "" And ActiveCell.Offset(0, -8) = "" Then   ActiveCell.EntireRow.hidden=true     End If   ActiveCell.Offset(1, 0).Select Next x

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

Sub test01() d = Range("D65536").End(xlUp).Row For i = d To 1 Step -1 If (InStr(Cells(i, "L"), "摘要")) * (InStr(Cells(i, "K"), "金額")) = 0 Then Else Rows(i).EntireRow.Hidden = True End If If Cells(i, "L") = "" And Cells(i, "D") = "" Then Rows(i).EntireRow.Hidden = True End If Next i End Sub ・削除の場合のことも考えて下行から処理した。本件では 上からでも良いでしょう。 ・(InStr(Cells(i, "L"), "摘要")) * (InStr(Cells(i, "K"), "金額")) = 0 はInstrh関数は、語が含まれていないと0を返すので 両方含まれてない、片一方に含まれているケースは掛けて 0になる。 ・If・EndIf-If・EndIf文は繋げてIfを1つにすることもできたが、長くなるので2つに分けた。

  • terakura
  • ベストアンサー率20% (4/20)
回答No.1

一度試してみてください。私もまだまだ勉強中ですが大丈夫だと思いますよ。 Sub 行削除() Dim i As Integer Dim j As Integer Dim x As Integer i = Selection.Rows.Count If ActiveCell.Row >= i Then     j = ActiveCell.Row - i + 1 Else     j = ActiveCell.Row End If Cells(j, 12).Select For x = 1 To i If ActiveCell.Value = "適用" And ActiveCell.Offset(0, -1) = "金額" Then     ActiveCell.EntireRow.Delete ElseIf ActiveCell.Value = "" And ActiveCell.Offset(0, -8) = "" Then     ActiveCell.EntireRow.Delete Else     ActiveCell.Offset(1, 0).Select End If Next x Range("a1").Select End Sub

関連するQ&A