電子書籍の厳選無料作品が豊富!

エクセルのマクロを組んでいて、なぜか実行すると意図しない文字が消えてしまいます
至急解消したいので、どうぞよろしくお願いします

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 & "はありません。"

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/27 03:22

>、「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
で出来るが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/27 03:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A