excel - 土耳其语 Excel 版本 : transforming dotted upper i, "İ"到无点上部 i "I",带 VBA

标签 excel vba non-ascii-characters turkish

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

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

关于excel - 土耳其语 Excel 版本 : transforming dotted upper i, "İ"到无点上部 i "I",带 VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924848/

相关文章:

excel - MSEXCEL 将数据转置为数据库格式

c# - 查看excel中是否有隐藏列

vba - DefVar 是否有一个合法的用例?

java - 打开没有 Auto_Openening 的工作簿

python - 从二进制文件中解码 python 中的字符串列表

Excel显示当月第n天

vba - Excel VBA - 从一张纸复制到另一张纸> 仅复制一行

javascript - 在 Javascript 中显示重音字符

php - chrome 和 explorer 的重音不同

excel - 在VBA中将列号转换为列字母