|
▼piropiro さん:
【魔の10行】ですかぁ。
不思議ですねぇ。
消されるべきなのに消されないということなら、いろいろ考えられますが
消されるべきではないのに消される・・・
可能性は極めて低いのですが、以下のケースなら、そうなります。
セルに NA という値があったとします。
で、表示書式設定で、文字列の場合に 別文字列 に設定すれば、実際のセルの値とは異なる値が
セルに表示されます。
さらに、ユーザー定義で ;;; と設定すると、セルは空白に見えてしまいます。
なので、【ここにはNAはない!】
ところが 実態は NA ですから、セル比較(そちらのコード)やMATCH で、NA と認識します。
またFindメソッドでも LookIn を xlFormula にするとNAだと認識されます。
で、削除。見た目は NA ではないセルの行が削除されるわけです。
(コード上で LookIn を省略すると、たまたま、そのPCで、その前に行われた Findメソッド、Replaceメソッド
ないしは 検索や置き換えの操作時のオプションが適用されます)
可能性は低いのですが、以下の確認3 と確認4 の結果は同じになりますか?
それとも10行の差異がありますか?
Sub 確認3()
Dim a As Range
Dim r As Range
Dim c As Range
Dim f As Range
Dim x As Long
'使用領域の K列から最終列までの列数
x = Range("A1", ActiveSheet.UsedRange).Columns.Count - 10
'判定対象領域
Set a = Range("I4", Range("I" & Rows.Count).End(xlUp)).Offset(, 2).Resize(, x)
Set c = a.Find(What:="NA", LookAt:=xlWhole, LookIn:=xlValues)
If c Is Nothing Then
MsgBox "領域に NA はありません"
Exit Sub
End If
Set f = c
Do
If r Is Nothing Then
Set r = c
Else
Set r = Union(r, c)
End If
Set c = a.FindNext(c)
Loop While c.Address <> f.Address
MsgBox "対象領域の行数は " & a.Rows.Count & "行で、そのなかの削除対象は" & Intersect(r.EntireRow, Columns("K")).Count & "行です"
End Sub
Sub 確認4()
Dim a As Range
Dim r As Range
Dim c As Range
Dim f As Range
Dim x As Long
'使用領域の K列から最終列までの列数
x = Range("A1", ActiveSheet.UsedRange).Columns.Count - 10
'判定対象領域
Set a = Range("I4", Range("I" & Rows.Count).End(xlUp)).Offset(, 2).Resize(, x)
Set c = a.Find(What:="NA", LookAt:=xlWhole, LookIn:=xlFormulas)
If c Is Nothing Then
MsgBox "領域に NA はありません"
Exit Sub
End If
Set f = c
Do
If r Is Nothing Then
Set r = c
Else
Set r = Union(r, c)
End If
Set c = a.FindNext(c)
Loop While c.Address <> f.Address
MsgBox "対象領域の行数は " & a.Rows.Count & "行で、そのなかの削除対象は" & Intersect(r.EntireRow, Columns("K")).Count & "行です"
End Sub
|
|