質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Q&A

解決済

2回答

3808閲覧

ExcelのVBAで金種計算表をIf文のみで作成したい

pazzu

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

0グッド

0クリップ

投稿2017/08/26 02:01

編集2017/08/27 07:08

ExcelのVBAで金種計算表をIf文のみで作成したいのですが上手くいきません。
下記に金額を入力すると枚数のところにそれぞれの金種の枚数が出てくるようにしたいです。お手数ですがご教示頂けると幸いです。

金種 10000 5000 2000 1000 500 100 50 10 5 1
枚数

金額 555555

金額 = Cells(7,3)
金種10000 = Cells(3,2)
金種5000 = Cells(3,3)
金種2000 = Cells(3,4)

10000円枚数 = Cells(4,2)
5000円枚数 = Cells(4,3)
2000円枚数 = Cells(4,4)

以下プログラミングしたコード

Dim 金額, 一万円札枚数, 五千円札枚数, 二千円札枚数, 千円札枚数, 五百円玉枚数, 百円玉枚数, 五十円玉枚数, 十円玉枚数, 五円玉枚数, 一円玉枚数 As Integer

金額 = Cells(7, 3)

If 金額 >= 10000 Then

一万円札枚数 = 金額 / 10000
金額 = 金額 - (一万円札枚数 * 10000)
一万円札枚数 = Cells(4, 2)

End If

If 金額 >= 5000 Then

五千円札枚数 = 金額 / 5000
金額 = 金額 - (五千円札枚数 * 5000)
五千円札枚数 = Cells(4, 3)

End If

If 金額 >= 2000 Then

二千円札枚数 = 金額 / 2000
金額 = 金額 - (二千円札枚数 * 2000)
二千円札枚数 = Cells(4, 4)

End If

If 金額 >= 1000 Then

千円札枚数 = 金額 / 1000
金額 = 金額 - (千円札枚数 * 1000)
千円札枚数 = Cells(4, 5)

End If

If 金額 >= 500 Then

五百円玉枚数 = 金額 / 500
金額 = 金額 - (五百円玉枚数 * 500)
五百円玉枚数 = Cells(4, 6)

End If

If 金額 >= 100 Then

百円玉枚数 = 金額 / 100
金額 = 金額 - (百円玉枚数 * 100)
百円玉枚数 = Cells(4, 7)

End If

If 金額 >= 50 Then

五十円玉枚数 = 金額 / 50
金額 = 金額 - (五十円玉枚数 * 50)
五十円玉枚数 = Cells(4, 8)

End If

If 金額 >= 10 Then

十円玉枚数 = 金額 / 10
金額 = 金額 - (十円玉枚数 * 10)
十円玉枚数 = Cells(4, 9)

End If

If 金額 >= 5 Then

五円玉枚数 = 金額 / 5
金額 = 金額 - (五円玉枚数 * 5)
五円玉枚数 = Cells(4, 10)

End If

If 金額 = 1 Then

一円玉枚数 = 金額 / 1
金額 = 金額 - (一円玉枚数 * 1)
一円玉枚数 = Cells(4, 11)

End If

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lib

2017/08/26 02:36

回答はしましたが、複数の問題で悩んでるようにも見受けられます。 1.金種計算の考え方 2.Excel表内への出力方法 3.Excel表からの読み取り 4.If文の使い方 気のせいであればよいですが、もし同時に解決を考えるのであれば整理してみるのもお勧めします。最初のうちはわからないことだらけですが、わからないことを整理することで、本当に知りたい内容もわかるかもしれません。
pazzu

2017/08/27 07:08

ご回答頂きましてありがとうございます! 教えて頂いたことをまとめてみます。
sazi

2017/08/27 09:44

コードは見易くする為に括って下さい。
guest

回答2

0

おそらく2つのアプローチをとることになるかと。

if文の前に考え方から、
1.全体を考えるのではなく、問題を小さくすることから考えてみてはいかがでしょうか。
金種とあるので、例えばここに使用できる硬貨が、10円、5円、1円あります。
これを使い、49円を作るとしたらどう考えますか?
一番高そうな金種では10円ですね。となると10円から順番に考えることになるのかな?
10円では、4枚必要ですね。残りは、9円を作ることになるのかな?
5円では、1枚必要ですね。残りは、4円を作ることになるのかな?
1円では、4枚になるでしょうか。
この問題を小さくするのは、プログラミングのコードに落とし込む上でかなりの重要な意味を持つので、
日ごろの生活で思った疑問を、常に細かく誰もがわかる形で小さくする訓練をしてみてください。

2.アルゴリズム
ナップサック問題の解法で解ける問題と推察します。
別途リンクを掲載しますので、それをもとに考えてみてはいかがでしょうか。

投稿2017/08/26 02:29

lib

総合スコア446

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

どのように上手くいってないでしょうか?

単純には、
・金額÷金種=枚数
なので、金種の大きい順に処理していけば良いのでは?
次回の金種分は
・(前回金額-前回金種×前回枚数)÷今回金種=今回枚数
で表せます。

前回金額欄があれば、単に式でも大丈夫そうですけど。
※割り算にはint()またはtrunc()を使用すれば商(枚数)が取得できます。

追記

コード部分が追加されたので、確認しました。
上手くいっていない点については以下です。
・枚数を求めるているが、小数点付きになっている
・残金額を求めているが、小数点付きの枚数を使用しているので、正しい結果が得られていない
・結果枚数を書き込もうとしているが、右辺と左辺が逆
コードの一部を例に修正すると、

VBA

1 一万円札枚数 = 金額 \ 10000 2 金額 = 金額 - (一万円札枚数 * 10000) 3 Cells(4, 2) = 一万円札枚数 4 5'若しくは 6 7 Cells(4, 2) = 金額 \ 10000 8 金額 = 金額 - (Cells(4, 2) * 10000) 9

のようになります。
ポイントは枚数(商)を求めたいので、/(実数の除算)ではなく、\(整数の除算)を使用したことです。
それから、この順序で処理するなら、金額による判定(IF文)は不要ですね。

投稿2017/08/26 02:38

編集2017/08/27 10:06
sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pazzu

2017/08/27 07:09

ご回答頂きましてありがとうございました。
pazzu

2017/08/27 10:51

ご回答頂きましてありがとうございます! 無事金種計算が出来るようになりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問