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件)
- 最新から表示
- 回答順に表示
No.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設定に使えます。
No.3
- 回答日時:
今回の場合は「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
----------------------------------------------------------------------
No.2
- 回答日時:
基本的に「繰り返し処理」が理解出来ていないようです。
繰り返し処理を使った場合と使わなかった場合の比較をしてみるとよく理解できると思います。
情報はネットにたくさんあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
どうやってもFor文を抜けてしま...
-
vbaのエラー対応(実行時エラー...
-
特定の名前のオートシェイプの...
-
条件文でelseはつけるべき?
-
“try/catch”と“if/else”
-
エクセルVBAでロックをかけたい
-
シグナル 6(SIGABRT)とは?
-
エクセル VBAで複数セル選択時...
-
CImage::Loadの戻り値は何でし...
-
iPhoneのニューラルエンジンっ...
-
VBA Vlookup #N/A表示させない方法
-
【Vb.net】プリンタジョブの取得
-
VBA 複数の行を高速で削除する...
-
StatusStripの表示が更新されな...
-
IF文に時間(何時から何時ま...
-
VBAの進捗状況をリアルタイ...
-
private subモジュールを他のモ...
-
特定のファイルを他のプロセス...
-
複数個のTextBoxでいずれかの内...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
private subモジュールを他のモ...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
特定の名前のオートシェイプの...
-
シグナル 6(SIGABRT)とは?
-
特定のファイルを他のプロセス...
-
ExcelのVBAで、選択したファイ...
-
Excel VBA セルの名前があるか...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
【VBA】エラー処理で別プロシー...
-
UWSCのTHREADについて
-
シェルスクリプトでファイル内...
-
ドリブン??
-
Functionで戻り値を複数返す方法
-
iPhoneのニューラルエンジンっ...
-
エクセル VBAで複数セル選択時...
-
COBOL OCCURSで指定したデータ...
-
どうやってもFor文を抜けてしま...
おすすめ情報