[VBA] 数字の各桁を足し合わせるマクロを作ります

 数字の各桁の合計値を求めるプログラム を書いてみます。
 たとえば「 1234 」という数値を入力して、

 1 + 2 + 3 + 4 = 10

という結果を得るのが目的です。マクロの構造自体は単純ですが、変数のデータ型の取り扱いがやや面倒なので中級者向けのプログラムとなっています。
 

数字の各桁を取り出すマクロ

 足し算する前に、まずちゃんと桁を取り出すことができているのかを確認するマクロから作ってみます。

 Sub DigitA()

  Dim x As Variant
  Dim i As Long, keta As Long, dig as long

  x = InputBox("数値を入力してください")

  '入力値の桁数を求めます
  keta = Len(x)

  '大きな位から順に数字を取り出します
  For i = 1 To keta
   dig = Mid(x, i, 1)
   Debug.Print dig
  Next i

  End Sub

 マクロを実行すると数値を入力するように促されるので、たとえば「 1234 」と入力してみると、イミディエイトウィンドウに「 1, 2, 3, 4 」という数字が並ぶはずです。

Variant型変数

 入力値 x を Variant型で宣言しています。 Variant型とは、整数でも文字列でも、あるいはセル範囲でも好きな値を格納できる便利なデータ型です。このようなデータ型を使用している理由は以下で説明します。

Len関数

 Len関数は文字列を引数に指定すると、その文字数を返してくれます。
 今の場合は入力された x を引数として

keta = Len(x)

という記述によって、文字数つまり桁数を得ているのです。しかしこの x が Integer や Long, Double などの数値型であった場合、 Len関数は文字数ではなくバイト数を返してしまいます。そこで、本当は数値として欲しい x をいったん Variant型で格納しておけば、 Len関数の引数として指定した場合に文字列として処理されて文字数(桁数)を Long型で返してきます。それを keta という変数に代入しておけば、あとはループ処理の中で普通に数値として扱うことができるという仕組みになっています。

Mid関数

 For...Next の中で各桁の数を取り出すために Mid関数が用いられています。Mid関数は

Mid(文字列,開始位置,文字数)

という形で記述しますが、この関数も最初の引数 [文字列] は文字列型 (String あるいは Variant) で指定する必要があります。
 

数字の各桁の合計値を求めます

 桁の総和を格納する変数 sum をループ処理の中に組み込めば、各桁の数字を足し合わせるマクロになります。

 Sub DigitB()

  Dim x As Variant
  Dim i As Long, keta As Long, dig as long, sum As Long

  x = InputBox("数値を入力してください")

  keta = Len(x)

  For i = 1 To keta
   dig = Mid(x, i, 1)
   sum = sum + dig
  Next i

  Debug.Print sum

End Sub

 マクロを実行して「 1234 」という値を入力すると、イミディエイトウィンドウに桁の総和「 10 」が表示されます。 ≫ VBA 数値計算

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください