- ベストアンサー
エクセルのマクロで意図しない文字が消える
エクセルのマクロを組んでいて、なぜか実行すると意図しない文字が消えてしまいます 至急解消したいので、どうぞよろしくお願いします N8から、数値が一列に並んでいて、「0」を消して行くという目的です 下記のような組み方をしています すると、P列1行目からAF列まで入っていた文字が消えてしまいます これを解消する方法を教えて下さい '0を消す Const intCriteria As Integer = 0 With Cells(8, 14).CurrentRegion On Error GoTo errhandler .AutoFilter Field:=14, Criteria1:=intCriteria .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ActiveSheet.AutoFilterMode = False Exit Sub errhandler: ActiveSheet.AutoFilterMode = False MsgBox intCriteria & "はありません。"
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >なぜか実行すると意図しない文字が消えてしまいます With Cells(8, 14).CurrentRegion この部分が問題です。 おそらく、セルが続いているからなのですが、CurrentRegion ではなく、8行目を左端にするように決めてください。CurrentRegion では曖昧です。 本来は、CurrentRegion のままでもできるのですが、回答者側では、レイアウトが分かりませんので、CurrentRegion のままで、コードを書くことはできません。 少し手直ししてみました。 '-------------------------------------- Sub Test1() Const intCRITERIA As Integer = 0 On Error GoTo ErrHandler '念のため If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False End If With Range("N8", Range("N65536").End(xlUp).Offset(, 18)) '右は決めてください。現在は、AFまで .AutoFilter Field:=14, Criteria1:=intCRITERIA .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ActiveSheet.AutoFilterMode = False Exit Sub ErrHandler: ActiveSheet.AutoFilterMode = False MsgBox intCRITERIA & "はありません。" End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
>、「0」を消して行くという目的です 下のコードを見るとN列のセルの値で0の行を削除するではないか。表現は正確に。 ーー 難しいフィルタたやxlCellTypeVisible を使っているから勘違いが起こっているのでは。 参考 私は削除をやるときはForNextを使い、下行からやっている。上からやると大変。 簡単に Sub test01() d = Range("N65536").End(xlUp).Row MsgBox d For i = d To 1 Step -1 If Cells(i, "N") = 0 Then Cells(i, "N").EntireRow.Delete Next End Sub で出来るが。
お礼
ありがとうございます。 P列から文字が消えなくなりました。
お礼
ありがとうございます。 もともとの構文をなおして下さり、私にも解り易い組み方をしてくださいました。