土耳其语 Excel 版本:使用 VBA 将带点的大写 i, "İ" 转换为无点大写的 i "I"

Turkish Excel version: transforming dotted upper i, "İ" to dotless upper i "I" with VBA

我在 Windows 10 的土耳其语版本和土耳其语 Excel 版本中发现了带有“I”的特殊字符问题。 “i”在翻译成大写时在土耳其语中给出了另一个字母:“İ”而不是“I”,例如当 "i" 在英语中被转换为大写时。 问题是,当我使用不区分大小写的 Excel 搜索公式(例如“match”或“countif”公式)时,土耳其语 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

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