【问题标题】:Excel VBA Vlookup single characterExcel VBA Vlookup 单个字符
【发布时间】:2020-09-22 19:32:36
【问题描述】:

我有一个字符串,我需要将其转换为十六进制等价物。文本字符的十六进制值可能会因情况而异,因此在第二张工作表中,我制作了一个表格,我可以根据需要使用 A-Z...a-z..1-0 字符及其相关的十六进制值进行修改。

我已确认我已正确设置 VLookup 的范围,并且我已确认我一次将一个字符传递给它,但它坚持认为它在查找。我在这里错过了什么?

Sub LoopThroughString()
Dim wbBook As Workbook
Dim tblSheet As Worksheet
Dim wrkSheet As Worksheet
Dim Counter As Integer
Dim myString, myChar As String
Dim vRng, chrRng As Range
Dim sRes As Variant

Set wbBook = ThisWorkbook
With wbBook
    Set wrkSheet = .Worksheets("wrkSheet")
    Set tblSheet = .Worksheets("tblSheet")
End With

With tblSheet
    Set vRng = .Range("A1", .Range("B1").End(xlDown))
End With

myString = Range("A1").Value 'define string


For Counter = 1 To Len(myString)
    On Error Resume Next
    Err.Clear
    myChar = Mid(myString, Counter, 1)
    sRes = Application.VLookup(myChar, vRng, 1, False)
    If IsError(sRes) = False Then
        Cells(2, 1 + Counter).Value = chrRng
    Else
        Debug.Print "Count not find value: " & myChar
    End If

Next

End Sub

编辑:这是表格的屏幕截图,其中包含要查找的字符

【问题讨论】:

  • 您的表格是否设置为char | hex value?向我们展示您的查找表的图片
  • 我已编辑问题以包含表格。我都试过了 char |十六进制值和作为十六进制值 | char,都找不到任何值
  • @ScottHoltzman 实际上我只是注意到当我安排它时 char |十六进制值 我的 Debug.Print 中没有任何错误,只是没有在我的单元格中放入任何内容。快速检查,我发现在尝试解决问题时,我分配了错误的变量以写入我的单元格。
  • 我相信问题出在你的变量声明中。你写了Dim vRng, chrRng As Range。你需要写Dim vRng as Range, chrRng As Range。您编写的方式仅将chrRng 声明为范围。 vRng 是变体类型。
  • 好收获。另请参阅我上面的观点。如果不是现在,那将来可能会绊倒你。

标签: excel vba vlookup


【解决方案1】:

答案是我最初将表格安排为十六进制值 | Char 正如@ScottHoltzman 指出的那样,我需要它来安排 Char |十六进制值。它似乎不起作用的原因是因为我有一个未使用的变量被写入单元格而不是 sRes 变量。下面的工作代码,但它不区分大小写

Sub LoopThroughString()
Dim wbBook As Workbook
Dim tblSheet As Worksheet
Dim wrkSheet As Worksheet
Dim Counter As Integer
Dim myString as String, myChar As String
Dim vRng As Range
Dim sRes As Variant

Set wbBook = ThisWorkbook
With wbBook
    Set wrkSheet = .Worksheets("wrkSheet")
    Set tblSheet = .Worksheets("tblSheet")
End With

With tblSheet
    Set vRng = .Range("A1", .Range("B1").End(xlDown))
End With

With wrkSheet
    myString = .Range("A1").Value 'define string
End With


For Counter = 1 To Len(myString)
    On Error Resume Next
    Err.Clear
    myChar = Mid(myString, Counter, 1)
    sRes = Application.VLookup(myChar, vRng, 2, False)
    If IsError(sRes) = False Then
        Debug.Print ""
        Cells(2, 1 + Counter).Value = sRes
    Else
        Debug.Print "Couldn't find value: " & myChar
    End If

Next

End Sub

【讨论】:

    【解决方案2】:

    由于我最初的问题只是关于使用 VLookup,因此我提供了最符合该问题的答案作为“THE”答案。但是,在完成 Vlookup 之后,我还需要它区分大小写,而 VLookup 没有额外的步骤就无法做到这一点。结果,我将代码更改为以下代码,并使用“查找”函数而不是 VLookup 来完成相同的结果,但区分大小写。

    Sub LoopThroughString()
    Dim wbBook As Workbook
    Dim tblSheet As Worksheet
    Dim wrkSheet As Worksheet
    Dim Counter As Integer
    Dim myString As String, myChar As String
    Dim vRng As Range, rRng As Range
    
    Set wbBook = ThisWorkbook
    With wbBook
        Set wrkSheet = .Worksheets("wrkSheet")
        Set tblSheet = .Worksheets("tblSheet")
    End With
    
    With tblSheet
        Set vRng = .Range("A1", .Range("A2").End(xlDown))
    End With
    
    With wrkSheet
        myString = .Range("A1").Value 'define string
    End With
    
    'Debug.Print myString
    
    For Counter = 1 To Len(myString)
        On Error Resume Next
        Err.Clear
        myChar = Mid(myString, Counter, 1)
        'Debug.Print myChar
        Set rRng = vRng.Find(myChar, MatchCase:=True)
        If rRng Is Nothing Then
    
        Else
            With tblSheet
                myChar = .Cells(rRng.Row, 2).Value
            End With
    
            With wrkSheet
                .Cells(2, 1 + Counter).Value = myChar
            End With
    
        End If
    
    Next
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多