Поиск и удаление некоторых символов в столбце данных в Excel - PullRequest
0 голосов
/ 29 мая 2009

Я скопировал и вставил некоторую информацию об отладке в лист Excel.

Однако в некоторых ячейках одного столбца он содержит некоторые «странные» символы, которые в противном случае должны содержать только целые числа. Какой самый простой способ устранить такие символы с помощью VBA? Пример показан в списке ниже:

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

Я хочу использовать файл в качестве источника данных в другом приложении. Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 31 мая 2009

Попробуйте это (впервые публикуя код здесь, поэтому, пожалуйста, потерпите меня; 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    
0 голосов
/ 29 мая 2009

Во время отладки. Вы действительно уверены, что хотите удалить их? Это управляющие символы ASCII. Но опять же, я не знаю, что вы отлаживаете ...

Символы, которые вы видите, являются символами Юникода, которые представляют управляющий символ ascii, поэтому куда бы вы ни копировали данные, они переводят их для вас.

Стандартная функция Excel Clean предназначена для удаления управляющих символов ASCII, поэтому здесь работать не будет.

Но при этом удаляются все символы Юникода в диапазоне ИЗОБРАЖЕНИЯ УПРАВЛЕНИЯ

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 голосов
/ 30 мая 2009

Вот решение, которое сработало для меня, хотя оно может быть не очень элегантным:

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 голосов
/ 29 мая 2009

Я думаю, что регулярные выражения могут быть самыми простыми. Я хотел бы использовать набор записей ADO и просмотреть это.

Несколько замечаний по RegEx

''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 = "q@12""£c" 

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

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

Несколько замечаний по ADO и Excel

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'
...