有什么想法为什么VBA在VLookup中不区分大小写?

时间:2019-05-30 16:46:05

标签: excel vba vlookup

我创建了一个VBA宏,以查看单元格E3中的输入文本字符串,将其拆分为单个字符,然后根据单个字符像素宽度的表VLookup这些字符,并使用命名范围“ pw_Table”。

然后将每个字母的像素宽度相加并显示在文本输入框下方的单元格“ Cells(4,5)”中。击中返回是为了显示完整字符串的总像素宽度总和。

问题在于它不区分大小写,并且对大小写字符使用相同的VLookup值。

我见过的所有手册都说VBA在VLookup上区分大小写,而我所能找到的就是解决此问题的方法。

但是,对于我的问题,VLookup必须区分大小写,以确保我获得每个字母的正确像素宽度,例如,“ c”为9像素宽,“ C”为13。

我尝试对表中的大写和小写字符重新排序以查看是否有区别,但是它只使用遇到的每个字母的第一个值,无论它们是大写还是小写。

我认为我可能会使用INDEX,MATCH和EXACT,但是看不到如何在VBA中实现它。

这是宏代码...

Private Sub ReadCharacter()    
    cell_value = ThisWorkbook.Sheets("Pixel-widths").Range("E3")    
    Character_Value = 0    
    For rep = 1 To Len(cell_value)
        Character = Mid(cell_value, rep, 1)        
        On Error GoTo MyErrorHandler        
        Character_Value = Application.WorksheetFunction.VLookup(Character, [pw_Table], 2, 0)          
        Pixel_Width = Pixel_Width + Character_Value        
MyErrorHandler:
        Character_Value = 10
        Resume Next        
    Next rep        
        Cells(4, 5) = Pixel_Width    
End Sub

我在数字上遇到了一些问题,VBA报告了运行时错误1004,但是我添加了一个错误陷阱,因为所有0到9的数字都是10像素宽,因此我对此进行了弥补。

我简直不明白为什么VBA违反了自己的规则。

2 个答案:

答案 0 :(得分:1)

Vlookup不区分大小写。

ive发现此函数“模拟”了vlookup区分大小写。

Function CaseVLook(FindValue, TableArray As Range, Optional ColumnID As Integer = 1) As Variant
    Dim xCell As Range
    Application.Volatile
    CaseVLook = "Not Found"
    For Each xCell In TableArray.Columns(1).Cells
        If xCell = FindValue Then
            CaseVLook = xCell.Offset(0, ColumnID - 1)
            Exit For
        End If
    Next
End Function

要使用它,只需将其命名为CaseVLook(F1,A1:C7,3)

更多信息在这里

https://www.extendoffice.com/documents/excel/3449-excel-vlookup-case-sensitive-insensitive.html

祝你好运

答案 1 :(得分:0)

这是另一种方式...

Character_Value = Evaluate("INDEX(" & Range("pw_Table").Address(, , , True) & _
    ",MATCH(TRUE,EXACT(INDEX(" & Range("pw_Table").Address(, , , True) & ",0,1),""" & Character & """),0),2)")

希望这会有所帮助!