- 締切済み
マクロを使って特定の文字の入った行を非表示にしたいのですが・・
エクセルのマクロを使って 自分の選択した範囲内で L列に"摘要"かつK列に"金額"の文字が入っている行と L列が空白かつD列も空白である行 を削除するようにするにはどうしたらよいでしょうか 仕事の中でこれがマクロでできるようになるとすごく便利なので・・。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- terakura
- ベストアンサー率20% (4/20)
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)
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)
一度試してみてください。私もまだまだ勉強中ですが大丈夫だと思いますよ。 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