• ベストアンサー

エクセルのマクロで意図しない文字が消える

エクセルのマクロを組んでいて、なぜか実行すると意図しない文字が消えてしまいます 至急解消したいので、どうぞよろしくお願いします 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 & "はありません。"

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

lucvbnm
質問者

お礼

ありがとうございます。 もともとの構文をなおして下さり、私にも解り易い組み方をしてくださいました。

その他の回答 (1)

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

>、「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 で出来るが。

lucvbnm
質問者

お礼

ありがとうございます。 P列から文字が消えなくなりました。

関連するQ&A

専門家に質問してみよう