Excel 此子宏是否可以作为函数重新写入?

Excel 此子宏是否可以作为函数重新写入?,excel,vba,Excel,Vba,我使用的是这个宏--它在子格式中运行良好: Sub replaceStringInCells() Dim wTxt As String Dim rTxt As String Dim rNum As Integer rNum = 0 For Each Row In Range("swapvalues").Rows '<== change the wordlist Name here as required wTxt = Row.Cells(1).Value rTxt = R

我使用的是这个宏--它在子格式中运行良好:

Sub replaceStringInCells()
Dim wTxt As String
Dim rTxt As String
Dim rNum As Integer
rNum = 0
For Each Row In Range("swapvalues").Rows  '<== change the wordlist Name here as required
    wTxt = Row.Cells(1).Value
    rTxt = Row.Cells(2).Value
        Selection.Replace What:=wTxt, Replacement:=rTxt, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
            rNum = rNum + 1
Next
End Sub
Sub-replaceStringInCells()
将wTxt设置为字符串
将rTxt设置为字符串
作为整数的Dim rNum
rNum=0

对于范围中的每一行(“swapvalues”).Rows',由于函数精确返回输入值而发生这种情况。您想要输入“字符串”做什么

一个函数返回一个值,它不是被设计成一个过程,所以它只会改变调用它的单元格

如果要替换重音符号(正如函数名称所示),应该将对范围的引用作为参数(字符串作为范围),然后迭代字符串的字母,以将á替换为a,ü替换为u,依此类推。这是函数的更常见用法。然后,在电子表格中,您可以将其用作常规函数,仅引用要从中去除重音符号的单元格(如果这是目的的话)


希望这对您有所帮助。

您是如何从sub或工作表中使用该函数的?您不能使用
选择。请在UDF中替换
。@Scott Craner-我正在尝试从工作表中运行该函数。该函数可能重复。另请参见,有趣的是,从工作表中调用的函数不能更改任何单元格的值,只能更改调用该函数的单元格的值。谢谢您的建议。如果我是对的,你的建议是,但是,它对某些口音的字符不起作用——例如,Ĭ或Ĩ。(当你将它们粘贴到一个模块中时,它们显示为?或I。)如果你知道解决这个问题的方法,我会很好奇。这是因为你提到的函数中没有包含它们。只需确保所有需要替换的重音字符都包含在AccChars中,并在RegChars中添加替换,确保遵循相同的顺序。对不起,我没有理解你的意思。我看到编辑没有显示你提到的人物。我认为可以使用vba函数ascw和charw重新编写函数。Ascw获取您提供的字符数(例如:“ÿ”产生255个字符),而charw则相反。因此,您可以通过使用ascw阅读并使用charw返回来循环阅读文本并分配字母。勾选,例如,您可以选择一个案例,说明如果需要,感谢您返回到此循环。我已经创建了一个代码变体来替换最常见的重音字符——因为我无法替换的字符出现的频率不足以保证创建一个全新的宏。
Function replaceaccents(thestring As String)
Dim wTxt As String
Dim rTxt As String
Dim rNum As Integer
rNum = 0
For Each Row In Range("swapvalues").Rows  '<== change the wordlist Name here as required
    wTxt = Row.Cells(1).Value
    rTxt = Row.Cells(2).Value
        Selection.Replace What:=wTxt, Replacement:=rTxt, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
            rNum = rNum + 1
Next
replaceaccents = thestring
End Function