3

アクセント付きの文字を通常の文字に置き換えようとしています。

マクロを実行しようとしても、リストに表示されません。

Option Explicit

'-- Add more chars to these 2 string as you want
'-- You may have problem with unicode chars that has code > 255
'-- such as some Vietnamese characters that are outside of ASCII code (0-255)
Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"

Sub StripAccent(aRange As Range)
'-- Usage: StripAccent Sheet1.Range("A1:C20")
Dim A As String * 1
Dim B As String * 1
Dim i As Integer

For i = 1 To Len(AccChars)
A = Mid(AccChars, i, 1)
B = Mid(RegChars, i, 1)
aRange.Replace What:=A, _
Replacement:=B, _
LookAt:=xlPart, _
MatchCase:=True
Next

End Sub
4

7 に答える 7

8

マクロ リストにマクロを実行するオプションが表示されません。選択するリストにマクロ名が表示されません。私はマクロを有効にしており、他にもたくさん使用しているので、表示されない理由がわかりません。– BvilleBullet 4 分前

上記のコードのコメントを参照してください。

'-- 使用法: StripAccent Sheet1.Range("A1:C20")

このように呼び出す必要があります

Option Explicit

'-- Add more chars to these 2 string as you want
'-- You may have problem with unicode chars that has code > 255
'-- such as some Vietnamese characters that are outside of ASCII code (0-255)
Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"

'~~> This is how you have to call it. Now You can see the macro "Sample" in the list
Sub Sample()
    StripAccent Sheet1.Range("A1:C20")
End Sub

Sub StripAccent(aRange As Range)
    '-- Usage: StripAccent Sheet1.Range("A1:C20")
    Dim A As String * 1
    Dim B As String * 1
    Dim i As Integer

    For i = 1 To Len(AccChars)
        A = Mid(AccChars, i, 1)
        B = Mid(RegChars, i, 1)
        aRange.Replace What:=A, _
        Replacement:=B, _
        LookAt:=xlPart, _
        MatchCase:=True
    Next
End Sub
于 2012-04-05T17:17:38.470 に答える
6
Function stripAccent(Text As String) As String

    Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
    Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"

    Dim A As String * 1
    Dim B As String * 1
    Dim i As Integer

    For i = 1 To Len(AccChars)
        A = Mid(AccChars, i, 1)
        B = Mid(RegChars, i, 1)
        Text = Replace(Text, A, B)
    Next

    stripAccent = Text

End Function
于 2017-11-06T00:07:32.970 に答える
0

Macro Dialog Box のマクロのリストを意味しますか? その場合、範囲パラメーターが原因で、マクロ ダイアログ ボックスにはパラメーターのないプロシージャのみが一覧表示されます。

于 2012-04-05T17:16:40.833 に答える
0

refEdit およびボタン コントロールで userForm を使用できます。フォームを呼び出すルーチンは次のようなものです。

Sub ShowForm()

    Dim d As dlg
    Set d = New dlg

    d.Show

    Set d = Nothing

End Sub

...そしてボタンのクリックイベントで:

Private Sub cmdBtn_Click()

    On Error GoTo cmdBtn_Click_Err

    Dim strRange As String
    Dim rng As Range

    strRange = refeditControl.Text

    Set rng = Range(strRange)        

    Call StripAccent(rng)        

cmdBtn_Click_Exit:
    Exit Sub

cmdBtn_Click_Err:
    MsgBox Err.Description
    Resume cmdBtn_Click_Exit

End Sub

userForm の名前が dlg、ボタン cmdBtn、および refEdit コントロールが refEditControl であると仮定します。

于 2012-04-05T17:30:35.400 に答える