アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCEL VBAでdo~loopとexit doを使って計算しなさい。という問題があり、
一応やってみましたが動きません…。
わかる方回答お願いします。

消費税5%を含むものとする

A         B   C   D
1 ケーキ名     単価   数量   金額
2 ショートケーキ  450   15
3 アップルパイ   400   3
4 マロングラッセ  420   25
5 チーズケーキ   320   8
6 モンブラン    410   18
7 ティラミス    370   5



Sub 例題47()

Dim tanka As String, suryou As String, kingaku As String



Range("A1").Select
Do

tanka = ActiveCell.Offset(0, 1).Value
suryou = ActiveCell.Offset(0, 2).Value

kingaku = (tanka * suryou) * 1.05

ActiveCell.Offset(0, 3).Value = kingaku


ActiveCell.Offset(0, 1).Activate
If ActiveCell.Value = "" Then

Exit Do
End If
Loop





End Sub

A 回答 (4件)

開始行の修正


>Range("A1").Select
ここでA1を選択してます。つまりactiveCellはA1です。

>tanka = ActiveCell.Offset(0, 1).Value
A1の1列右はB1ですが、B1を見ると「単価」という文字列であって、数字ではありません。つまり開始行を2行目にする必要があります。

繰り返し処理
Do loopの1回目が終わり2回目に移っても、計算する場所は相変わらず1行目のままで、次の行に進みません。どうするかというと、

i=1
Do
tanka = ActiveCell.Offset( i, 1).Value


i=i+1
Loop
とすると、loop終了時にiの値が1ずつ増えるので、行番号設定つまりoffset設定に使えます。
    • good
    • 0

今回の場合は「Exit Do」は、使う必要が無い気がします。


通常は次の4パターンの方法を使うと思いますので参考にどうぞ!
なお、③と④はデータが無かった場合の処理として「Exit Do」を使いましたが、普通は①か②を使って処理数を減らします。
----------------------------------------------------------------------
Sub 例題47①()
Dim GyouNo As Long
GyouNo = 2
Do While Cells(GyouNo, 1).Value <> ""
Cells(GyouNo, 4).Value = Cells(GyouNo, 2).Value * Cells(GyouNo, 3).Value * 1.05
GyouNo = GyouNo + 1
Loop
End Sub
----------------------------------------------------------------------
Sub 例題47②()
Dim GyouNo As Long
GyouNo = 2
Do Until Cells(GyouNo, 1).Value = ""
Cells(GyouNo, 4).Value = Cells(GyouNo, 2).Value * Cells(GyouNo, 3).Value * 1.05
GyouNo = GyouNo + 1
Loop
End Sub
----------------------------------------------------------------------
Sub 例題47③()
Dim GyouNo As Long
GyouNo = 2
Do
If Cells(GyouNo, 1).Value = "" Then Exit Do
Cells(GyouNo, 4).Value = Cells(GyouNo, 2).Value * Cells(GyouNo, 3).Value * 1.05
GyouNo = GyouNo + 1
Loop While Cells(GyouNo, 1).Value <> ""
End Sub
----------------------------------------------------------------------
Sub 例題47④()
Dim GyouNo As Long
GyouNo = 2
Do
If Cells(GyouNo, 1).Value = "" Then Exit Do
Cells(GyouNo, 4).Value = Cells(GyouNo, 2).Value * Cells(GyouNo, 3).Value * 1.05
GyouNo = GyouNo + 1
Loop Until Cells(GyouNo, 1).Value = ""
End Sub
----------------------------------------------------------------------
    • good
    • 0

基本的に「繰り返し処理」が理解出来ていないようです。


繰り返し処理を使った場合と使わなかった場合の比較をしてみるとよく理解できると思います。
情報はネットにたくさんあります。
    • good
    • 0

直しどころ満載ですが、とりあえずコードを生かした場合。

「EXCEL VBAのDO~LOOPとEX」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!