2009-05-29 10 views
0

一部のデバッグ情報をExcelシートにコピーして貼り付けました。Excelのデータ列内の一部の文字の検索と削除

しかし、1つの列のいくつかのセルにはいくつかの "奇妙な"文字が含まれています。 VBAを使用してそのような文字を削除する最も簡単な方法は何ですか?例を以下のリストに示します。

1 **'␁'** <- I'm trying to get rid of the part that I have bolded 
2 '␂' 
3 '␃' 
4 '␂' 

ファイルを別のアプリケーションのデータソースとして使用したいとします。前もって感謝します。

+0

@stanigator:あなたの問題について他の人が何かを知っているとは思わないように質問してください。私は理解しやすくするためにそれを再定式化しようとしました。私がかなりのポイントを打つことがなかったらそれを修正してください。 – Tomalak

+0

完了;編集にはうまくいった。フレーズをはっきりと聞かせてくれてありがとう。私は、取り除きたいサンプル文字のブロックを追加しました。 – stanigator

答えて

0

の範囲で削除ここでは、私のために働いたソリューションです:

Sub Macro1() 
    ' Macro1 Macro 
    Dim temp As String 

    For u = 1 To 28000 
     If Cells(u, 4) <> 0 Then 
      Cells(u, 4).Select 
      temp = Mid(ActiveCell.Text, 1, InStr(1, ActiveCell.Text, "'") - 1) 
      Cells(u, 4) = temp 
     End If 
    Next 
End Sub 
0

正規表現が最も簡単かもしれないと思います。私はADOレコードセットを使用し、それを見ます。

ADOやExcel上の正規表現

''http://msdn.microsoft.com/en-us/library/ms974570.aspx 
Dim objRegEx As RegExp 
Set objRegEx = CreateObject("VBScript.RegExp") 
objRegEx.IgnoreCase = True 
objRegEx.Global = True 

''This is a sample string, the field would go here 
strText = "[email protected]""£c" 

''Find anything not a-z, 0-9 
objRegEx.Pattern = "[^a-z0-9]" 

''Replace with a dash, "" is fine too. 
strOut = objRegEx.Replace(strText, "-") 

には、いくつかの注意事項いくつかのノート

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

strFile = ActiveWorkbook.FullName 

strcn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ 
& strFile & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" 

cn.Open strcn 

rs.Open "SELECT * FROM [Sheet1$]", cn, 3 'adOpenStatic' 
+0

なぜ票が下がったのですか? – Fionnuala

+0

VBAの組み込みメソッドで簡単に解決できる問題にRegExを使用するためです!その後、ADO.NETを使用してExcelワークシートを反復処理します。絶対に狂っている - もし私がそれをもっと落とすことができたら、私はそうするだろう。 – Adrian

+0

これはMSアプリケーションにとっては通常のADOであり、OPはこのデータを別のアプリケーションで使用することを望んでいますが、レコードセットとは限りません。 RegExは、可能な文字のリストを調べることなく、数字だけが残っていることを保証します。 SOのこのタイプのアプローチの他の例があります。 – Fionnuala

-1

デバッグしているように - あなたはそれらを削除したい本当によろしいですか?それらはASCII制御文字です。しかし、もう一度私はあなたがデバッグしているか分からない....

あなたが見ている文字は、ascii制御文字を表すユニコード文字なので、どこからデータをコピーしたのかはあなたのために翻訳されています。

標準のExcel機能Cleanは、ASCIIの制御文字を削除するように設計されていますので、ここでは動作しません。

しかし、それは非常にエレガントではないかもしれないが、この意志は、それがコントロールPICTURES内のすべてのUnicode文字が

Sub Macro1() 
    ' Macro1 Macro 
    ' 
    For u = 9210 To 9216 
    a = Cells.Replace(ChrW(u), "") ' replaces values in whole Worksheet 
    Next 
End Sub 

' use this to replace the values in a single column only 
' i cant test this at the moment as i don't have Excel handy... 
... 
    a = Range("A1:A2800").Replace(ChrW(u), "") ' replaces values in Col A 
... 
+0

Matlabワークスペースで同じデータをコピーして貼り付けるためには、unsigned charではなくunsigned int8として画像を保存できないので面白い文字を取り除かなければならないでしょう精度とバイト長の両方)。 – stanigator

+0

しかし、マクロの提案に感謝します。 – stanigator

+0

これは私が今 についてはU = 1 28000 =細胞(U、4).Replace(ChrWに 「Macro1をマクロ変な文字 サブにMacro1()を置き換えるためにしようとしているコード(あるU )、 "") 次へ End Sub ただし、セルに0がある場合、スクリプトはそのゼロを消去します。編集した質問に表示されているようなものがあれば、何もしません。それらのユニコード文字か、それとも本当にASCII文字ですか? – stanigator

1

てみてくださいこれは最初のコードをここに掲示するので、私に同行してください; o)。私は、私は十分なVBAコードをコメントしたと思うが、何か質問は、私に知らせてください。

' Replaces all the charaters in vaFind with strReplace 
Sub FindAndReplace(ByVal vaFind As Variant, ByVal strReplace As String, ByVal rngToSearch As Range) 
' vaFind is an array containing all the strings you want to replace 
' strReplace is what you want to replace it with 
' rngToSearch is the range you want to Find & Replace your characters 
Dim x As Long 
For x = LBound(vaFind, 1) To UBound(vaFind, 1) 

    rngToSearch.Cells.Replace What:=vaFind(x), Replacement:=strReplace, _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, _ 
     MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
Next x 

End Sub 

' Now if you want to clean it automatically, 
' Place the following code INTO any Sheets that you 
' are have the debug data placed into. 
' NOTE: prefix Asterick and question mark with a tilde to replace those characters "~*" 
Private Sub Worksheet_Change(ByVal Target As Range) 
' Calls the FindAndReplace sub, and removes all: 
' astericks, apostrophes and "Whatever Else You need cleaned"'s 
' In this case, in column A 
If Not Intersect(Target, Me.Columns("A:A")) Is Nothing Then 
Call FindAndReplace(Array("~*", "'", "Whatever Else You need cleaned"), "", Me.Columns("A:A")) 
End If 
' NOTE: This sub will be called whenever the sheet changes, and only process column A 
' You can customize which columns, too. 
End Sub  
関連する問題