土耳其语Excel版本:使用VBA将虚线上部i,"İ"转换为无点上部i "I"



我在土耳其版的Windows 10和土耳其Excel版本上发现了带有"I"的特殊字符问题。当"i"翻译成大写字母时,它会在土耳其语中给出另一个字母:"İ"而不是"I",例如当"i"在英语中转换为大写时。 问题是,当我使用不区分大小写的 Excel 搜索公式(例如"匹配"或"计数"公式(时,土耳其语 Excel 会查找"i"或"İ"(带点(,它找不到,因为字母在查找范围内是大写的(并且没有"İ"(,而英文版本会查找"i"或"I", 他们会找到的。

总而言之,我以不区分大小写的方式搜索"i",而我的土耳其同事找不到任何结果,因为他的计算机查找"i"和"İ",并且所有预期的结果都带有"I"。

我不能要求遇到此问题的用户更改Excel或Windows中的语言,也不能更改查找源或目标范围。但是我可以更改公式(使用匹配和计数(。

我不确定这种从小写到大写的转换是从哪里来的,如果它来自 Excel 或 Windows。但是在德国版本的Windows上安装土耳其版Excel后,我没有遇到问题。所以我认为问题来自 Windows(最终,某些语言设置知道这很有趣,但无济于事(......

我正在考虑编写一个 VBA 公式以将文本更改为大写并将点大写字母"İ"更改为无点大写字母"I"并替换,然后在我的搜索函数中使用此字符串。但是我在 Chr(( 公式中找不到虚线大写字母"İ"......我认为 Chr(( 函数不使用扩展的 ASCII 字符,只使用标准字符。请参阅下面我打算使用的功能类型。


Function upper_i(myStr As String) As String
upper_i = UCase(myStr)
upper_i = Replace(upper_i, Chr(???), "I")
End Function

如何告诉 Excel 我想要一个虚线大写字母"İ"? 感谢您的帮助!

假设我读对了,也许可以尝试:

Function upper_i(myStr As String) As String
upper_i = UCase$(myStr)
upper_i = Replace(upper_i, ChrW(304), "I")
End Function

似乎至少通过了以下测试:

Private Sub TestFunction()
Dim someText As String
someText = "ok, ok, " & ChrW(304)
Debug.Assert someText <> "OK, OK, I"
someText = upper_i(someText)
Debug.Assert someText = "OK, OK, I"
End Sub

我真的不明白你为什么要把字符串大写,但也许我需要再读几遍你的问题。

最新更新