Excel VBA

【Excel VBA】【マクロ】【Tips】氏名を伏字にするマクロ

こんにちは!Lenocoです。本日も見てくださりありがとうございます。

今回は氏名を伏字にするマクロです!

氏名を伏字にするマクロ

氏名を印字する際、伏字にしたいという依頼があり、作ったマクロです。
A列の氏名のスペースを除いた偶数番目の文字を「〇」に置き換えたものをB列に入れます。

汎用性を高めるため、メインのプロシージャから伏字にするマクロを呼び出すコードにしています。必要に応じて呼び出し側の引数を変更してください。

コード

Sub Main()
    Dim i As Long
    
    For i = 2 To 12
        Cells(i, "B") = MakePrivacyName(Cells(i, "A"))
    Next i
End Sub

Function MakePrivacyName(baseName As String)  '伏字にする

    Dim i As Long
    Dim cnt As Long
    Dim temp As String
    
    temp = ""
    cnt = 0
    For i = 1 To Len(baseName)
        If mid(baseName, i, 1) <> " " And mid(baseName, i, 1) <> " " Then
            cnt = cnt + 1
            If cnt Mod 2 = 1 Then
                temp = temp & mid(baseName, i, 1)
            Else
                temp = temp & "○"
            End If
        Else
            temp = temp & mid(baseName, i, 1)
        End If
    Next i
    MakePrivacyName = temp
End Function

コードの説明

●呼び出し元のプロシージャ

For文で、2行目から12行目まで繰り返し処理をします。
氏名を伏字にするプロシージャをCallで呼び出します。
引数は変更前の氏名です。
戻り値は伏字になった氏名で、同じ行のB列に入れます。

●呼び出し先のプロシージャ(連番を振るマクロ)

変数を宣言します。
iには氏名のスペースを含む文字数の番号が入り、
cntには氏名のスペースを除く文字数の番号が入ります。
tempには、伏字にした氏名が入ります。
まずFor文で、氏名を一文字ずつ見ていきます。
半角スペース、全角スペースでなければcntを1増やします。
cntを2で割った余りが1だった場合、つまり奇数番目の文字だった場合はその1文字をtempに追加します。
余りが0だった場合、偶数番目の文字だった場合は「〇」をtempに追加します。
半角スペース、全角スペースだった場合はそのままtempに追加します。
それを最後の文字まで繰り返します。
出来上がった伏字の氏名を戻り値として返します。

さいごに

依頼されたことを実現するためにはどうすればいいだろう?と考える時が一番頭を使うし、
とても楽しい時間です。
時には紙に書きだしたりして、考えをまとめたりします。
希望通りの動きができたときはとても達成感があります!!
今回のマクロは、おそらく依頼がなければ作らなかったと思うので、とてもいい経験になりました。
ありがとうございました!

Lenoco

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です