【问题标题】:Checking for special characters in excel using vba使用vba检查excel中的特殊字符
【发布时间】:2013-08-15 13:57:34
【问题描述】:

。我有一个 excel 电子表格,其中包含一些带有 unicode 控制字符的字符串,这些字符串在 Windows 7 中不可见。因此,我想编写一个宏来遍历列中的每个单元格,检查是否存在控制字符。如果找到控制字符,我想用字符名称和可以在字符串中找到的索引填充下一列中的相邻单元格。

这是我目前所拥有的:

Sub control_chr()
'
' control_chr Macro
'

'
    Dim control_characters(Chr(28), Chr(29), Chr(30), Chr(31), Chr(32))
    Dim r As Range, cell As Range

    Set r = Range("F4:F1029")

    For Each cell In r
        For Each Character In control_characters

下一步是在单元格中搜索每个字符并用结果填充相邻的单元格。我的第一个想法是使用 SEARCH() 函数,因为它返回字符所在位置的索引。这是我第一次使用visual basic,我不知道如何继续

【问题讨论】:

  • 您对非 VBA 解决方案感兴趣吗?

标签: excel vba unicode


【解决方案1】:

这里有一些代码可以满足您的要求:

Sub ListControlChars()
Dim control_characters As Variant
Dim r As Range, cell As Range, ResultCell As Range
Dim CharPosition As Long
Dim i As Long

control_characters = Array(28, 29, 30, 31, 32)
Set r = ActiveSheet.Range("F4:F1029")

For Each cell In r
    Set ResultCell = cell.Offset(0, 1)
    ResultCell.ClearContents
    CharPosition = 0
    For i = LBound(control_characters) To UBound(control_characters)
    CharPosition = InStr(cell, Chr(control_characters(i)))
        If CharPosition > 0 Then
        ResultCell = ResultCell.Value & "Char " & control_characters(i) & ": Position " & CharPosition & " - "
        End If
    Next i
Next cell
End Sub

如果您想在 Excel 中执行此操作,可以这样设置:

B2中的公式为:

=IFERROR(SEARCH(CHAR(B$1),$A2),"")

【讨论】:

  • 这似乎完全符合我的要求,但我无法让它运行。我在以下行中不断收到类型不匹配错误: CharPosition = Instr(cell, Chr(control_characters(i))) 这是我第一次使用 vba,不确定是什么原因造成的
  • 另外,它是否是范围内的第一个单元格,即 F4?
  • 是的,第一个单元格在范围内。单元格未分配正确的值,出现“错误 2015”
  • 让我问另一种方式。当您收到错误消息时,cell 的地址是什么?当您收到错误时,该单元格中的实际值是多少?
  • 没关系,我明白了。其中一个单元格具有空值。感谢您的帮助
【解决方案2】:

我不记得是我把它编码了还是在其他地方找到了它,但是当遇到将数据加载到某些数据库中遇到无法识别的特殊字符时失败的问题时,这对我有用

Function IterateThruCells()    
Dim cell As Range    
   For Each cell In ActiveSheet.UsedRange.Cells
       If cell.Value <> "" Then
          If ContainsSpecialCharacters(cell.Value) = True Then
              Debug.Print cell.Address & ": " & cell.Value
          End If
       End If
   Next
End Function


               
Function ContainsSpecialCharacters(str As String) As Boolean
Dim I
For I = 1 To Len(str)
    ch = Mid(str, I, 1)
    Select Case ch
         Case "0" To "9", "A" To "Z", "a" To "z", " ", "(", ")", "/", "-", ".", ",", "_", "&", "'", "$", ">", "<", "–"
         ContainsSpecialCharacters = False
            
    Case Else
         ContainsSpecialCharacters = True
         Exit For    
    End Select
           
Next
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多