暑い日が続いています。みなさんお元気ですか。
今日は、ユーザーが入力した任意の数字を漢数字に変換するプログラムを一緒に作りましょう。
ユーザーは、セルB4に好きな数字を入力します。
例として、「1234567」と入力します。
右にあるボタンをクリックすると、セルC4に漢数字に変換されて出力されます。
「一二三四五六七」と出力されました。
このボタンには、マクロが登録されています。
今日は、このマクロ(プロシージャ)をつくります。
それでは、エクセルを起動してください。
次に、Altキーを押しながら、F11キーを押してください。Visual Basic Editor が起動します。
「挿入」→「標準モジュール」とクリックしてください。
これで、コードウィンドウが表示され、コーディングの準備が整いました。
以下のように書いてください。
Sub ConvertChineseNumber()
Dim i As Integer
Dim c As Integer
Dim s As String
Dim Ans As String
Ans = ""
's には、ユーザーの入力した数字を代入
s = Range("B4").Value
'Len関数は、引数の文字数を取得できる
c = Len(s)
For i = 1 To c
'変数sに格納されている数字を左から1文字ずつ
'抜き出して、漢数字に変換。
Select Case Mid(s, i, 1)
Case 1
Ans = Ans & "一"
Case 2
Ans = Ans & "二"
Case 3
Ans = Ans & "三"
Case 4
Ans = Ans & "四"
Case 5
Ans = Ans & "五"
Case 6
Ans = Ans & "六"
Case 7
Ans = Ans & "七"
Case 8
Ans = Ans & "八"
Case 9
Ans = Ans & "九"
Case 0
Ans = Ans & "〇"
Case Else
Ans = Ans & Mid(s, i, 1)
End Select
Next
'変数Ansには、返還された漢数字が入っている
Range("C4").Value = Ans
End Sub
参考までに、画像も載せておきます。
ユーザーが入力する数字は、何桁あるか分からないので、
Len関数を用いて、文字数(=桁数)を取得します。
あとは、その数字の左から1つずつ数字を抜き出して、漢数字に置き換えていきます。
数字は、10こ(0~9)あるので、条件分岐は10必要になりますが、
さらに、英数字以外が入力された時を考慮して、最後に Case Else という条件分岐を追加してあります。
この場合は、抜き出された文字をそのまま出力するコードが書かれています。
ですから、ユーザーが「123a45」と入力すると「一二三a四五」と出力されます。
もし、この部分をコメントアウト(行頭にシングルコートをつけて、プログラムの実行対象から外すこと)すると
「123a45」は、「一二三四五」と出力されます。つまり、数字以外は出力されません。
さて、今回のプログラミングもまた、条件分岐と繰り返し処理が使われていますね。
この2つは、プログラミングのキモです。使いこなしたいですね。
ところで、実は、ここまで引っ張っておいていまさら何ですが、エクセルには、こんな関数があるのです。
NUMBERSTRING関数といいます。
残念ながら、関数一覧には出てきませんので、関数名を手入力してください。
引数は、2つあります。
1つ目は、変換したい数値のあるセル番地、または値です。
2つ目は、変換方法です。1、2、3のどれかを指定します。それぞれの違いは、実際に試してみてください。
なかなかすごい関数です。
以上、プログラムと関数の勉強でした。
だい
今日は、ユーザーが入力した任意の数字を漢数字に変換するプログラムを一緒に作りましょう。
ユーザーは、セルB4に好きな数字を入力します。
例として、「1234567」と入力します。
右にあるボタンをクリックすると、セルC4に漢数字に変換されて出力されます。
「一二三四五六七」と出力されました。
このボタンには、マクロが登録されています。
今日は、このマクロ(プロシージャ)をつくります。
それでは、エクセルを起動してください。
次に、Altキーを押しながら、F11キーを押してください。Visual Basic Editor が起動します。
「挿入」→「標準モジュール」とクリックしてください。
これで、コードウィンドウが表示され、コーディングの準備が整いました。
以下のように書いてください。
Sub ConvertChineseNumber()
Dim i As Integer
Dim c As Integer
Dim s As String
Dim Ans As String
Ans = ""
's には、ユーザーの入力した数字を代入
s = Range("B4").Value
'Len関数は、引数の文字数を取得できる
c = Len(s)
For i = 1 To c
'変数sに格納されている数字を左から1文字ずつ
'抜き出して、漢数字に変換。
Select Case Mid(s, i, 1)
Case 1
Ans = Ans & "一"
Case 2
Ans = Ans & "二"
Case 3
Ans = Ans & "三"
Case 4
Ans = Ans & "四"
Case 5
Ans = Ans & "五"
Case 6
Ans = Ans & "六"
Case 7
Ans = Ans & "七"
Case 8
Ans = Ans & "八"
Case 9
Ans = Ans & "九"
Case 0
Ans = Ans & "〇"
Case Else
Ans = Ans & Mid(s, i, 1)
End Select
Next
'変数Ansには、返還された漢数字が入っている
Range("C4").Value = Ans
End Sub
参考までに、画像も載せておきます。
ユーザーが入力する数字は、何桁あるか分からないので、
Len関数を用いて、文字数(=桁数)を取得します。
あとは、その数字の左から1つずつ数字を抜き出して、漢数字に置き換えていきます。
数字は、10こ(0~9)あるので、条件分岐は10必要になりますが、
さらに、英数字以外が入力された時を考慮して、最後に Case Else という条件分岐を追加してあります。
この場合は、抜き出された文字をそのまま出力するコードが書かれています。
ですから、ユーザーが「123a45」と入力すると「一二三a四五」と出力されます。
もし、この部分をコメントアウト(行頭にシングルコートをつけて、プログラムの実行対象から外すこと)すると
「123a45」は、「一二三四五」と出力されます。つまり、数字以外は出力されません。
さて、今回のプログラミングもまた、条件分岐と繰り返し処理が使われていますね。
この2つは、プログラミングのキモです。使いこなしたいですね。
ところで、実は、ここまで引っ張っておいていまさら何ですが、エクセルには、こんな関数があるのです。
NUMBERSTRING関数といいます。
残念ながら、関数一覧には出てきませんので、関数名を手入力してください。
引数は、2つあります。
1つ目は、変換したい数値のあるセル番地、または値です。
2つ目は、変換方法です。1、2、3のどれかを指定します。それぞれの違いは、実際に試してみてください。
なかなかすごい関数です。
以上、プログラムと関数の勉強でした。
だい