web-dev-qa-db-ja.com

Excelで水平タブを識別して置き換える方法

Excelファイルには何千ものデータがあります。これらはさまざまなWebサイトからスクレイピングされたデータであり、最初はCSVファイルに保存されてから、Excelに移行されます。このデータは私のウェブサーバーで使用するためのものです。

今私の問題はあるということですhorizontal tabs多くの中でどこかに隠されていますspaces、そしてそれらは私のウェブサーバーに重大な問題を引き起こしています。


ここで明確にするための例を示します。

Excelのデータ: "これはセルです"

RLパラメータとして使用するためにエンコードされたときのデータ: "This%20is%09a%20cell"

間にあるスペースの1つが%09にエンコードされていることがはっきりとわかります。これは、水平タブを表します。これは私のサーバーから深刻な問題を引き起こしており、これを特定して交換する必要があります。

では、Excelで水平タブを見つけるにはどうすればよいですか?

3
Joel Min

Burgiの答えはうまくいきますが、数式でいっぱいのワークシートでデータセット全体を複製する必要はなく、数行のスクリプトで同じことを実現できます。

_Sub ReplaceTabs()
   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c
End Sub
_

関連するすべてのセルをステップスルーする方法はいくつかあります(たとえば、ActiveSheet.Range("A:A")などで特定の列をターゲットにするか、問題のセルを選択して_Selection.Cells_を使用できます)が、この方法は機能しますセルが隣接していて、タブが任意のセルにある可能性がある場合。

それは超高速ではありませんが(私のマシンでは200,000セルは約10秒かかりました)、十分に速いはずです。

これが一般的なタスクである場合は、これをインポートスクリプトに組み込むことができます。

4
Lunatik

このコードはあなたのために働くはずです:

_=SUBSTITUTE(A1,CHAR(9),CHAR(32))
_

上記の式は、指定された文字列内のCHAR(9)のすべてのインスタンスをCHAR(32)に置き換えます。

  • CHAR(9)-タブ文字
  • CHAR(32)-スペース文字

Windowsが使用するルックアップテーブルについては、これを参照してください wiki記事

3
Burgi

マクロの動作中に更新をオフ/オンにするLunatikの回答を高速化するため。

Dim tmp As Boolean
tmp = Application.ScreenUpdating
' this stores current value
Application.ScreenUpdating = False

   Dim c As Range

   For Each c In ActiveCell.CurrentRegion
      c.Value = Replace(c.Value2, Chr(9), Chr(32))
   Next c

Application.ScreenUpdating = tmp
2
bvaughn