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

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

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

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

if

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

3回答

966閲覧

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

pazzu

総合スコア16

VBA

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

if

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2017/08/28 01:49

編集2017/08/28 03:05

ExcelのVBAで金種計算表をDo While文とIf文のみで作成したいのですが、下記のプログラムを実行してもExcel自体が応答不能になってしまいます。
下記に金額を入力すると枚数のところにそれぞれの金種の枚数が出てくるようにしたいです。お手数ですがご教示頂けると幸いです。

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

金額 555555

Dim 添字, 金額 As Integer
Dim 終わり As String

金額 = Cells(6, 4)
添字 = 2

Do While Cells(4, 添字) = 終わり

If 金額 >= Cells(3, 添字) Then

Cells(4, 添字) = 金額 \ Cells(3, 添字)
金額 = 金額 - (Cells(4, 添字) * Cells(3, 添字))

添字 = 添字 + 1

End If

Loop

End Sub

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

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

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

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

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

momon-ga

2017/08/28 02:14

配列を使用しているのは自覚していますか?もし自覚していないなら、配列を使用しないようにまずは修正してください。
pazzu

2017/08/28 02:52

ご回答ありがとうございます!配列を使用しないように修正してみます。
guest

回答3

0

多分、やりたいことはこうかな?と推測してコーディングしました。添付した画像のセル配置で動きます。
文法やロジックの誤りについては他の方の指摘通りだと思います。

イメージ説明

Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("D6")) Is Nothing Then Exit Sub Else Range("B4:K4").Clear Dim 添字, 金額 As Long 金額 = Cells(6, 4) '金種はここで配列に! Dim 金種 As Variant 金種 = Range("B1:K1") 添字 = 1 '添え字に+1しているのは、実際のセルの位置を合わせるため Do While Cells(1, 添字 + 1).Value <> "" If 金額 >= 金種(1, 添字) Then Cells(4, 添字 + 1) = 金額 \ 金種(1, 添字) 'ここで枚数を設定 金額 = 金額 - (Cells(4, 添字 + 1) * 金種(1, 添字)) End If 添字 = 添字 + 1 Loop End If End Sub

投稿2017/08/28 02:44

motuo

総合スコア3027

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

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

pazzu

2017/08/28 02:53

ご回答ありがとうございます!参考にさせて頂きます。
guest

0

momon-ga さんもおっしゃっているとおり、プログラムで使われている変数 金種枚数 は配列で宣言する必要があります。

以下のようにすることで、コンパイルは通ります。

vba

1Option Explicit 2 3Sub test() 4 5 6'Dim 添字, 金額, 金種 As Integer 7Dim 添字, 金額 As Integer 8 9' 以下の配列宣言が不足 10Dim 金種(3, 2) As Integer 11Dim 枚数(4, 2) As Integer 12 13金額 = Cells(6, 4) 14添字 = 2 15 16Do While Cells(4, 添字).Value <> "" 17 18 If 金額 >= 金種(3, 添字) Then 19 20 枚数(4, 添字) = 金額 \ 金種(3, 添字) 21 金額 = 金額 - (枚数(4, 添字) * 金種(3, 添字)) 22 23 添字 = 添字 + 1 24 25 ' end if 忘れ 26 End If 27 28Loop 29 30End Sub 31

コンパイルエラーに出てくるメッセージには、エラーのヒントが隠されています。よく読んで、何が不足しているのか、文法は間違っていないかを確認されることをおすすめします。

投稿2017/08/28 02:40

tukuroku

総合スコア234

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

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

pazzu

2017/08/28 02:54

ご回答ありがとうございます!エラーの確認をしてみます。
guest

0

ベストアンサー

Cellsと、変数名がごっちゃになっています。
End Ifが無いし。

あと、変数を宣言するなら、型も指定した方が良いです。

#コード例

VBA

1Sub 金種計算() 2Dim 添字 As Integer, 金額 As Long, 金種 As Integer 3 4金額 = Cells(6, 4) 5添字 = 2 6 7Do While Cells(3, 添字).Value <> "" 8 If 金額 >= Cells(3, 添字) Then 9 Cells(4, 添字) = 金額 \ Cells(3, 添字) 10 金額 = 金額 - Cells(4, 添字) * Cells(3, 添字) 11 End If 12 添字 = 添字 + 1 13Loop 14End Sub

投稿2017/08/28 02:31

編集2017/08/28 02:51
otn

総合スコア84423

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

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

pazzu

2017/08/28 02:55

ご回答ありがとうございます!参考にさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問