エクセルでA列またはB列のどちらかに下記のエラー文字が表示されています。
ファイルを検索してこの文字のある行毎削除したいのですが
マクロまたは関数で削除する方法を教えて下さい。
ほかにまだ別な種類のエラーがあった場合追加できると助かります。
拡張子はCSVです。
よろしくお願いします。
#NAME?
#REF!
たぶん複数のファイルだと思うので前回同様にフォルダを選択する形にしました。
他のエラーの場合も作ってコメントアウトしてありますので、追加する場合はコメントを外してください。
Sub Macro() '開始行を設定 Const stRow As Integer = 1 Dim FSO As Object Dim fldPath As String Dim fil As Object Dim wb As Workbook Dim lastRow As Long Dim i As Long Dim f As Boolean With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then fldPath = .SelectedItems(1) Else Exit Sub End If End With Application.ScreenUpdating = False Set FSO = CreateObject("Scripting.FileSystemObject") For Each fil In FSO.GetFolder(fldPath).Files If LCase(FSO.GetExtensionName(fil)) = "csv" Then Set wb = Nothing On Error Resume Next Set wb = Workbooks.Open(fil.Path) On Error GoTo 0 If Not wb Is Nothing Then With wb.Worksheets(1) lastRow = .Cells(Rows.Count, "A").End(xlUp).Row For i = lastRow To stRow Step -1 f = False If IsError(Cells(i, "A")) Or IsError(Cells(i, "B")) Then '#NULL! ' If .Cells(i, "A").Text = "#NULL!" Or .Cells(i, "B").Text = "#NULL!" Then ' f = True ' End If '#DIV/0! ' If .Cells(i, "A").Text = "#DIV/0!" Or .Cells(i, "B").Text = "#DIV/0!" Then ' f = True ' End If '#VALUE! ' If .Cells(i, "A").Text = "#VALUE!" Or .Cells(i, "B").Text = "#VALUE!" Then ' f = True ' End If '#REF! If .Cells(i, "A").Text = "#REF!" Or .Cells(i, "B").Text = "#REF!" Then f = True End If '#NAME? If .Cells(i, "A").Text = "#NAME?" Or .Cells(i, "B").Text = "#NAME?" Then f = True End If '#NUM! ' If .Cells(i, "A").Text = "#NUM!" Or .Cells(i, "B").Text = "#NUM!" Then ' f = True ' End If '#N/A ' If .Cells(i, "A").Text = "#N/A" Or .Cells(i, "B").Text = "#N/A" Then ' f = True ' End If End If If f Then Rows(i).Delete End If Next i End With Application.DisplayAlerts = False wb.Save wb.Close Application.DisplayAlerts = True End If End If Next Set FSO = Nothing Application.ScreenUpdating = True End Sub
拡張子はCSVは、実はエクセルで開けますが エクセルのファイルではありません。
エラーとなる箇所は 数式となっている箇所ですね。
= なんとか となっている箇所を探したらいいでしょう。
秀丸などで 開いて = を検索したらいいですね。
たとえば
0900000 とかいうように 頭に 0がついてる場合は ""で くるまないと
900000 というよに 文字列ではなく 数値として 表示されてしまいます。
それで 保存すると 900000のままとなってしまいます。
どうしてもCSV使うことが必要なため0900000 などが
ある場合はいったんtxtにして文字列で読み込んでいます。
いろいろアドバイスよろしくお願いします。
a,b,=aaaa
#REF!
#REF!は 参照していたセルが消えてしまった場合などに出るエラーですが csvでは その文字列を入れるしかないですね。
ちなみに エラーの出る箇所のCSVの内容は 何になってますか?
その一行が わかれば その原因も推測しやすいかと思います。
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
↓
lastRow = .UsedRange.Row + .UsedRange.Rows.Count - 1
あとは、エクセルのエラーをそのままCSVで保存すると、"#NAME?"という文字列になると思いますが、
実際のCSVのデータが一時一句間違いないか確認してみてください。
a,b,=aaaa
#REF!
a,b,=aaaa
#NAME?
=aaaaをC6にいれた場合
#NAME?
=aaaaをA7に入れた場合
ちなみに エラーの出る箇所のCSVの内容は 何になってますか?
その一行が わかれば その原因も推測しやすいかと思います。
A列にアドレスがある行ですのでドメインをくっつけたか@をくっつけたか何かに作業して式を取らずに行削除してしまったか
いろいろ考えられますが私のところへ来た時点ではエラーがある
アドレスのA行と性別のB行だけのCSVですので
原因は分かりませんが整理したデータに直したいのですが。
返事の意味が的を得てないかもしれませんがすみません。
エラーが出る箇所を 確認してもらえればいいと思いますよ。