2017-09-25 10 views
0

このマクロはいくつかの特殊文字をクリーンアップする必要があります。私がそれを実行すると、すべてが拭き取られます。私は1つの列 "B"でこれをテストし始めます。 エラーがどこにあるのか理解してもらえますか? 正規表現に関しても同様の質問が掲載されています。これは、これをすべてSQLデータベースにエクスポートするためにデータを標準化することです。 コメントに注意してくださいこのマクロは、ユーザーが入力したデータをクリーンアップします。選択した文字を列から削除する

あなたのコメント/回答/提案をありがとうございます。

Sub CaracteresEspeciales() 

'Esta macro es una version extendida que toma caracteres predefinidos de una lista 
MsgBox "Esta macro encuentra caracteres especiales más usados, se tomará unos breves instantes" 

Worksheets("Candidatos").Activate 
Application.ScreenUpdating = False 

Dim asterisco As String 
Dim coma As String 
Dim punto As String 
Dim dospuntos As String 
Dim puntoycoma As String 
Dim slash As String 
Dim backslash As String 
Dim chevron As String 
Dim apostrofe As String 
Dim leftparenthesis As String 
Dim righparenthesis As String 
Dim porcentaje As String 
Dim ampersand As String 
Dim dollarsign As String 
Dim leftquestionmark As String 
Dim rightquestionmark As String 
Dim leftexclamationmark As String 
Dim rightexclamationmark As String 
Dim backtilde As String 
Dim tilde As String 
Dim arroba As String 
Dim espacio As String 


asterisco = "*" 
coma = "," 
punto = "." 
dospuntos = ":" 
puntoycoma = ";" 
slash = "/" 
backslash = "\" 
chevron = "`" 
apostrofe = "'" 
leftparenthesis = "(" 
rightparenthesis = ")" 
porcentaje = "%" 
ampersand = "&" 
dollarsign = "$" 
leftquestionmark = "¿" 
rightquestionmark = "?" 
leftexclamationmark = "¡" 
rightexclamationmark = "!" 
backtilde = "`" 
tilde = "´" 
arroba = "@" 
espacio = " " 


Worksheets("Candidatos").Activate 

Columns("B:B").Replace What:=coma, replacement:=espacio 
Columns("B:B").Replace What:=punto, replacement:=espacio 
Columns("B:B").Replace What:=dospuntos, replacement:=espacio 
Columns("B:B").Replace What:=puntoycoma, replacement:=espacio 
Columns("B:B").Replace What:=slash, replacement:=espacio 
Columns("B:B").Replace What:=backslash, replacement:=espacio 
Columns("B:B").Replace What:=chevron, replacement:=espacio 
Columns("B:B").Replace What:=apostrofe, replacement:=espacio 
Columns("B:B").Replace What:=leftparenthesis, replacement:=espacio 
Columns("B:B").Replace What:=righparenthesis, replacement:=espacio 
Columns("B:B").Replace What:=porcentaje, replacement:=espacio 
Columns("B:B").Replace What:=ampersand, replacement:=espacio 
Columns("B:B").Replace What:=dollarsign, replacement:=espacio 
Columns("B:B").Replace What:=leftquestionmark, replacement:=espacio 
Columns("B:B").Replace What:=rightquestionmark, replacement:=espacio 
Columns("B:B").Replace What:=leftexclamationmark, replacement:=espacio 
Columns("B:B").Replace What:=rightexclamationmark, replacement:=espacio 
Columns("B:B").Replace What:=backtilde, replacement:=espacio 
Columns("B:B").Replace What:=tilde, replacement:=espacio 
Columns("B:B").Replace What:=arroba, replacement:=espacio 



Application.ScreenUpdating = True 


'what type of data (in spanish) 
'personales (b,c,k) personal data 
'laborales (q, u ,z), (ab, af, ak) ,(am, aq, av) , (ax,bb,bg) work desc. 
'estudiantiles (bi,bj),(bq,br),(by,bz),(cg,ch) academic info. 




MsgBox "Gracias por la espera, se han limpiado datos personales" 
End Sub 
+0

「asterisco」がワイルドカードとして解釈される可能性はありますか? – dwirony

答えて

2

この方法で問題が発生するのは、ワイルドカードです。 *および?は両方ともワイルドカードであり、1文字またはすべての文字と一致します。

、リテラルとして解釈し、あなたもそれがあるべき、(私はそれを見ていない)に置換する文字として~を含めている場合は~*~?

asterisco = "~*" 
rightquestionmark = "~?" 

にごWhat文字列を変更するには~~

+1

説明のために、 '?'はすべての単一文字にマッチし、 '*'はすべての文字列にマッチします。 – dwirony

+1

@dwironyそれは正しいです。しかし、部分一致で 'Range.Find'を実行し、' What'引数に '?'を使用すると、それでもすべての文字(つまり文字列全体)が置き換えられます。 –

+0

アイデアをお寄せいただきありがとうございます。実際にワイルドカードを修正しました。右括弧のような文字はまだ削除されないので、それ以上のエラーをチェックします。 すべての列を配列として列挙し、それらのすべてのリストをこれらの変更で更新する方法がありますか。 –

関連する問題