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

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

新規登録して質問してみよう
ただいま回答率
85.35%
マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

781閲覧

if文が意図したように動作してくれない

Chiochan

総合スコア4

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/03/30 14:35

編集2020/04/09 14:40

ソースコードを整理して、注釈を記しました。
また、Tab でインデントを付けました。反映してくれればいいのですが・・・

問題は、以下のマクロで、Np = 2 かつ NPrt = 2 の時
If Np = NPrt Then GoTo Adr02 で、ループから抜けてくれないことです

該当のソースコード

ソースコード

Public Fst, Lst, LstP, NPrt, Cntl1 As Variant
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+z
'
Dim Np, No, INp, INo, NpM, Mesage01, Cntl2, Incr As Variant

Fst = 1 '印刷範囲の最初の番号 Lst = 1 '印刷範囲の最後の番号 LstP = 0 '前回印刷した範囲の最後の番号 NPrt = 2 '印刷部数

Adr01:

UserForm2.Label3.Caption = "前回印刷の最後の番号は " & LstP & " です"

' UserForm2 で処理に必要な値を取得します
' TextBox1~3 に、今回印刷のデフォルト値、あるいは候補値を表示して、
' それらを修正させるか、あるいはそのまま続行する(「印刷」ボタンを押す)

' UserForm2 では、「終了」ボタンが押されると、Cntl1 に 2 が代入され
'  「印刷」ボタンが押されると、Cntl1 に 1 が代入されます

UserForm2.TextBox1.Value = Fst UserForm2.TextBox2.Value = Lst UserForm2.TextBox3.Value = NPrt UserForm2.Show If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく ' 「終了」ボタン(Cntl1=2)が押されると終了 For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す For No = Fst To Lst ' 指定された最初の番号から最後の番号まで印刷を繰り返す INp = Np * 7 ' ここでは、印刷の代わりに、変数の値を確認 INo = No Cells(INo, INp) = "No = " & No ' No の値を表示 Cells(INo, INp + 1) = "Np = " & Np ' Np の値を表示 Cells(INo, INp + 2) = "NPrt = " & NPrt ' NPrt の値を表示 Next No Cells(INo, INp + 3) = "Np2 = " & Np ' Np の値を再表示 Cells(INo, INp + 4) = "NPrt2 = " & NPrt ' NPrt の値を再表示 If Np = NPrt Then ' 必要部数を印刷したら終了(次の印刷の要否確認は不要) GoTo Adr02 ' NPrt が 2 で、Np = 2 ならループを抜けたい Else Cells(INo, INp + 5) = "Np3 = " & Np ' Np の値を再々表示 End If If NPrt = 1 Then ' 必要部数(NPrt)が 1 なら確認は不要(ループを抜ける) GoTo Adr02 Else Cells(INo, INp + 6) = "Np4 = " & Np ' Np の値を再々々表示 NpM = Np + 1 Mesage01 = NpM & " 部目の印刷を行いますか" Cntl2 = MsgBox(Mesage01, vbOKCancel) End If If Cntl2 = vbCancel Then GoTo Adr02 Next Np ' 外側のループの最終行

' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として、
' UserForm2 に表示します

Adr02:

LstP = Lst Incr = Lst - Fst Fst = Lst + 1 Lst = Fst + Incr GoTo Adr01

Fin01:

MsgBox "処理を終了します"

End Sub

試したこと

NPrt が2のとき、Mesage01 を表示するメッセージボックスが2回表示されます
(2回目の MsgBox の表示内容は、「3 回目の印刷を行いますか」です)
なお、上記の「Np2 =」、「Np3 =」、「Np4 =」で表示した Np の値は、いずれも、2 になっています。
つまり、If Np = NPrt Then GoTo Adr02 でも、Np のループから抜けていないようです・・・

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

otn

2020/03/30 23:23

見にくいので、コードブロックでインデントを付けて書いてください。
Chiochan

2020/04/06 15:32

ご連絡有難うございます。質問をしておきながらメールを確認せず、申し訳ありません。貼り付けた時には、空白で字下げは行っていたのですが・・・ インデントの方法も良く分かりません。今日は遅くなってしまったので、また、ご連絡させて頂きます。
guest

回答1

0

End If
が足りないのではないでしょうか?

記述が間違っていても動いてしまうことがあるので、もしよくわからない動作をしているときはソースを切り取って動かしてみるなどして調べてみてください。

投稿2020/04/09 06:36

sugawata

総合スコア67

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

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

Chiochan

2020/04/09 13:41

ご連絡有難うございます。色々やってみましたが、やはり、ダメなようです。 そもそも、基本的なことが分かっていないので、もう少し、勉強して(インターネット等で調べて)みます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問