私はエンタープライズシステムでレポートとして生成され、Excelスプレッドシートにダウンロードされたスプレッドシートを持っています。結果のスプレッドシートの空白のセルは、データがなくても実際には空白ではなく、空白のセルには「スペース」文字が含まれていません。 (A1が空白のセルである場合)たとえば、A2の次のセル式がTRUEを返し検索/置換を使用してvbNullStringをクリアする
:
=IF(A1="","TRUE","FALSE")
しかし、
=ISBLANK(A1)
戻りFALSE。
セルにアポストロフィ( ')を入力してセルをコピーすると、この問題を再現できます。次に、[形式を選択して貼り付け...]を使用して別のセルに貼り付けると、貼り付けたセルや数式バーにアポストロフィが表示されません。明確なセルがあるようですが、ISBLANKを使用してFALSEと評価されます。 ソートの結果、偽の空白セルが昇順ソートの最上部に表示され、ソートの最下部にある必要があります。
は、私はすべての列をループするために、偽の空白を修正するために、VBAのループを使用して
IF Cell.VALUE = "" Then
Cell.Clear
を評価することができますが、スプレッドシートは数十のデータの行となど、多くの50として列の何千ものを持っているので、これをプログラムにかなりのオーバーヘッドが加わり、FINDとReplaceを使用することを好むでしょう。ここで
現在は動作しないコードは、次のとおりです。
Range("ZZ1").Copy
Range("Table1[#All]").Select
With Selection
.Replace What:="", Replacement:=.PasteSpecial(xlPasteValues, xlNone, False, False), _
LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
次のものがいずれかの偽の空白のセルをクリアするために動作しません:
Replacement:= vbnullstring
Replacement:= ""
Replacement:= Cells.Clear
Replacement:= Cells.ClearContents
Replacement:= Cells.Value = ""
私は20の他のものを試してみましたどちらもうまくいかない。
をそのテーブル内の列の一部偽のブランクセルを含んでいない。このコードは、空白を含む列に対してうまく機能します。しかし、列にデータが入っているすべてのセル(空白がない)があれば、列全体が既存のデータから消去されます。 –
それは良くありません!この状況をチェックして、フィルタされたテーブルがヘッダ行以上のものを表示しているときにのみ内容を消去することができます: 'If(tbl.Range.SpecialCells(xlCellTypeVisible).Rows.Count> 1)Then Range(tbl.Name& [Column "&c&"] ")。ClearContents' – lonestorm