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 违反了自己的规则。
解决方案
Vlookup 不区分大小写。
我发现这个函数“模拟”了一个区分大小写的 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
祝你好运
推荐阅读
- laravel - Laravel 数字验证 gte:5 也允许 0
- javascript - 幻灯片不接受属性中指定的宽度
- java - 是否最好为 Mockito 中的每个“何时”调用进行“验证”调用?
- javascript - 如何使表单元素填充表格行并启用表格的编辑、删除和更新按钮
- javascript - 从 vanilla JS 中的两个对象数组创建一个新的对象数组
- jboss7.x - 尝试从 Codeready Studio 12.19.1 停止 JBoss EAP 7.3 时出错
- java - Intellij IDEA 在构建时删除未使用的导入语句
- r - 总结部分单词的R函数?
- windows - 尝试在命令提示符窗口中逐行显示一些 ASCII 艺术作品,但在显示第一行后窗口关闭。我该如何解决?
- java - 在java 8中查找具有给定属性的最大长度的字符串作为字符串