こんにちは!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