teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

ミスタイプを修正しました

2020/04/09 14:40

投稿

Chiochan
Chiochan

スコア4

title CHANGED
File without changes
body CHANGED
@@ -43,7 +43,7 @@
43
43
  UserForm2.Show
44
44
 
45
45
  If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
46
- ' 「印刷」ボタン(Cntl1=2)が押されると終了
46
+ ' 「終了」ボタン(Cntl1=2)が押されると終了
47
47
 
48
48
  For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す
49
49
 
@@ -78,7 +78,7 @@
78
78
 
79
79
  Next Np ' 外側のループの最終行
80
80
 
81
- ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として
81
+ ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として
82
82
  ' UserForm2 に表示します
83
83
 
84
84
  Adr02:

1

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

2020/04/09 14:40

投稿

Chiochan
Chiochan

スコア4

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,9 @@
1
- ### 前提・実現したいこと
1
+ ソースコードを整理て、注釈を記しまし
2
- if文の誤動作につい
2
+ また、Tab でインデントを付けました。反映しくれればいいのですが・・・
3
3
 
4
- ここに質問の内容を詳しく書いてください。
5
- ### 発生している問題・エラーメッセージ
4
+ 問題は、以下のマクロで、Np = 2 かつ NPrt = 2 の時
5
+  If Np = NPrt Then GoTo Adr02 で、ループから抜けてくれないことです
6
6
 
7
- 簡単なマクロで、If文が正しく判断してくれません。
8
-
9
- ```
10
- エラーメッセージ:特にありません
11
- ```
12
-
13
7
  ### 該当のソースコード
14
8
 
15
9
  ソースコード
@@ -25,61 +19,70 @@
25
19
  '
26
20
  Dim Np, No, INp, INo, NpM, Mesage01, Cntl2, Incr As Variant
27
21
 
28
- Fst = 1
22
+ Fst = 1 '印刷範囲の最初の番号
29
- Lst = 1
23
+ Lst = 1 '印刷範囲の最後の番号
30
- LstP = 0
24
+ LstP = 0 '前回印刷した範囲の最後の番号
31
- NPrt = 2
25
+ NPrt = 2 '印刷部数
32
26
 
33
27
 
34
28
  Adr01:
35
29
 
36
- UserForm2.Label3.Caption = "?O?????????c???????@" & LstP & "?@???"
30
+ UserForm2.Label3.Caption = "前回印刷の最後の番号は " & LstP & " です"
31
+
37
-
32
+ ' UserForm2 で処理に必要な値を取得します
33
+ ' TextBox1~3 に、今回印刷のデフォルト値、あるいは候補値を表示して、
34
+ ' それらを修正させるか、あるいはそのまま続行する(「印刷」ボタンを押す)
35
+
36
+ ' UserForm2 では、「終了」ボタンが押されると、Cntl1 に 2 が代入され
37
+ '  「印刷」ボタンが押されると、Cntl1 に 1 が代入されます
38
+
38
39
  UserForm2.TextBox1.Value = Fst
39
40
  UserForm2.TextBox2.Value = Lst
40
41
  UserForm2.TextBox3.Value = NPrt
41
42
 
42
43
  UserForm2.Show
44
+
45
+ If Cntl1 <> 1 Then GoTo Fin01 '「印刷」ボタン(Cntl1=1)ではなく
46
+ ' 「印刷」ボタン(Cntl1=2)が押されると終了
43
47
 
44
- If Cntl1 <> 1 Then GoTo Fin01
48
+ For Np = 1 To NPrt ' 指定された印刷部数(NPrt)まで繰り返す
45
49
 
50
+ For No = Fst To Lst ' 指定された最初の番号から最後の番号まで印刷を繰り返す
51
+ INp = Np * 7 ' ここでは、印刷の代わりに、変数の値を確認
52
+ INo = No
53
+ Cells(INo, INp) = "No = " & No ' No の値を表示
54
+ Cells(INo, INp + 1) = "Np = " & Np ' Np の値を表示
55
+ Cells(INo, INp + 2) = "NPrt = " & NPrt ' NPrt の値を表示
56
+ Next No
57
+
58
+ Cells(INo, INp + 3) = "Np2 = " & Np ' Np の値を再表示
59
+ Cells(INo, INp + 4) = "NPrt2 = " & NPrt ' NPrt の値を再表示
60
+
61
+ If Np = NPrt Then ' 必要部数を印刷したら終了(次の印刷の要否確認は不要)
62
+ GoTo Adr02 ' NPrt が 2 で、Np = 2 ならループを抜けたい
63
+ Else
64
+ Cells(INo, INp + 5) = "Np3 = " & Np ' Np の値を再々表示
65
+ End If
66
+
67
+
68
+ If NPrt = 1 Then ' 必要部数(NPrt)が 1 なら確認は不要(ループを抜ける)
69
+ GoTo Adr02
70
+ Else
71
+ Cells(INo, INp + 6) = "Np4 = " & Np ' Np の値を再々々表示
46
- For Np = 1 To NPrt
72
+ NpM = Np + 1
73
+ Mesage01 = NpM & " 部目の印刷を行いますか"
74
+ Cntl2 = MsgBox(Mesage01, vbOKCancel)
75
+ End If
47
76
 
77
+ If Cntl2 = vbCancel Then GoTo Adr02
78
+
48
- For No = Fst To Lst
79
+ Next Np ' 外側のループの最終行
49
-
50
- Sheets("???`3????(??)").Select
51
- Range("'???`3????(??)'!D3").Value = No
52
- Application.Calculate
53
80
 
54
- Sheets("????????").Select
55
- ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
56
- ' IgnorePrintAreas:=False
57
- ' Sheets("??????^").Select
81
+ ' 次回印刷の最初の番号を Lst + 1 とし、その最後の番号は、今回の増加分を加えた番号として。
58
- ' ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
59
- ' IgnorePrintAreas:=False
82
+ ' UserForm2 に表示します
83
+
84
+ Adr02:
60
85
 
61
- INp = Np * 3 + 5
62
- INo = No
63
-
64
- Cells(INo, INp) = "No = " & No
65
- Cells(INo, INp + 1) = "Np = " & Np
66
- Cells(INo, INp + 2) = "Pr = " & NPrt
67
-
68
- Next No
69
-
70
- If Np = NPrt Then Exit For
71
- If NPrt > 1 Then
72
-
73
- NpM = Np + 1
74
- Mesage01 = NpM & " ????????????"
75
- Cntl2 = MsgBox(Mesage01, vbOKCancel)
76
-
77
- If Cntl2 = vbCancel Then Exit For
78
-
79
- End If
80
-
81
- Next Np
82
-
83
86
  LstP = Lst
84
87
  Incr = Lst - Fst
85
88
  Fst = Lst + 1
@@ -88,15 +91,17 @@
88
91
 
89
92
  Fin01:
90
93
 
91
- MsgBox "??????I???????"
94
+ MsgBox "処理を終了します"
92
95
 
93
96
  End Sub
94
97
 
95
98
 
96
99
  ### 試したこと
97
100
 
98
- 一応、動作はしてくれるのですが、NPrtが2のとき、Mesage01メッセージボックスが回表示されます
101
+ NPrt が2のとき、Mesage01 を表示するメッセージボックスが回表示されます
99
- Mesage01の内容は、「3 回目の印刷を行いますか」です
102
+ (2回目 MsgBox の表示内容は、「3 回目の印刷を行いますか」です
103
+ なお、上記の「Np2 =」、「Np3 =」、「Np4 =」で表示した Np の値は、いずれも、2 になっています。
104
+ つまり、If Np = NPrt Then GoTo Adr02 でも、Np のループから抜けていないようです・・・
100
105
 
101
106
  ### 補足情報(FW/ツールのバージョンなど)
102
107