Excel 如何根据翻译列表用汉字替换列中的单元格?

Excel 如何根据翻译列表用汉字替换列中的单元格?,excel,vba,replace,Excel,Vba,Replace,我是这里的VBA新手。理想情况下,我想把一个宏放在一起,它将扫描特定列中的某些中文短语,并根据翻译列表进行翻译 根据我朋友的建议,我开始使用一种基本的查找和替换方法,通过Activecell.value循环进行查找和替换,但它不起作用,因为VBA不允许使用汉字 sub Translate() ActiveCell.Select ("A2") Dim r As Integer ' Number of rows ' ****************************** I

我是这里的VBA新手。理想情况下,我想把一个宏放在一起,它将扫描特定列中的某些中文短语,并根据翻译列表进行翻译

根据我朋友的建议,我开始使用一种基本的查找和替换方法,通过Activecell.value循环进行查找和替换,但它不起作用,因为VBA不允许使用汉字

sub Translate()

ActiveCell.Select ("A2")

Dim r As Integer      ' Number of rows

'   ****************************** Input ******************************

'  Count rows "r" & Indent

'   Use Loop

Do

    r = r + 1
    If ActiveCell.Value = "??" Then
    ActiveCell.Value = "Apple"
    Else
        If ActiveCell.Value = "??" Then
           ActiveCell.Value = "Banana"
    End If

'   Move Cursor
    ActiveCell.Offset(0, 1).Select
'   End Loop
Loop Until ActiveCell.Value = ""

End Sub
以下是我希望宏遵循的逻辑:

选择特定列作为范围 单元格的检查值 如果单元格值=可能来自其他表格或索引的特定中文短语 用指定的翻译短语替换值 继续向下列,直到到达空白单元格,然后结束宏 比如说,

   A
1 **Fruit**
2 赛伍
3 香蕉
对照参考图纸或索引进行检查:

   A    B
1 赛伍 apple
2 香蕉 banana
因此,最终结果是:

    A
1 **Fruit**
2 apple
3 banana
如果您能提供任何帮助,我们将不胜感激。谢谢大家!


编辑:我不认为我的问题与在excel中的vba中声明unicode字符串重复,因为理想情况下,宏将基于读取代码外的单元格值来运行

例:


假设这两张纸是Sheet1和Sheet2。可以使用for循环迭代Sheet1上第一列的单元格,然后使用该方法在Sheet2中查找匹配项

试着这样做:

Option Explicit

Sub Test()
    Dim lastRow As Long, i As Long
    lastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
    For i = 2 To lastRow
        Dim currentCell As Range, foundChineseCell As Range, foundEnglishCell As Range
        Set currentCell = Sheet1.Range("A" & i)
        Set foundChineseCell = Sheet2.Range("A:A").Find(currentCell.Value)
        If Not foundChineseCell Is Nothing Then
            Set foundEnglishCell = foundChineseCell.Offset(0, 1)
            currentCell.Value = foundEnglishCell.Value
        End If
    Next
End Sub
结果:


编辑:我不认为我的问题与在excel中的vba中声明unicode字符串重复,因为理想情况下,宏将基于读取代码外的单元格值来运行,例如:“if Sheet0!A2匹配表1!A2,更换表0!A2和表1!非常感谢您的详细和漂亮的回复-不幸的是,我无法让它工作。理想情况下,如果宏选中了一个我不必打开或移动到工作表中的列表,那就更好了——我想,我可能只需要为我要完成的任务找到一个不同的解决方案。@MorganThomas我无法让它像你在gif中看到的那样工作,它可以按预期工作。除非我看到你的代码,否则我无法告诉你出了什么问题。理想情况下,如果宏检查了一个我不必打开或移动到工作表中的列表,那会更好。你的意思是要在代码中硬编码单词列表吗?因为我一开始以为你想这么做,但你不能这么做,因为编辑器不支持Unicode字符,所以我建议重复一篇文章,但后来你说你想把单词列表放在一张纸上,对吗?
Option Explicit

Sub Test()
    Dim lastRow As Long, i As Long
    lastRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
    For i = 2 To lastRow
        Dim currentCell As Range, foundChineseCell As Range, foundEnglishCell As Range
        Set currentCell = Sheet1.Range("A" & i)
        Set foundChineseCell = Sheet2.Range("A:A").Find(currentCell.Value)
        If Not foundChineseCell Is Nothing Then
            Set foundEnglishCell = foundChineseCell.Offset(0, 1)
            currentCell.Value = foundEnglishCell.Value
        End If
    Next
End Sub