回答編集履歴
6
ループの条件を書き換え
test
CHANGED
@@ -41,10 +41,6 @@
|
|
41
41
|
以上を元にコードを書いてみました。
|
42
42
|
|
43
43
|
```VBA
|
44
|
-
|
45
|
-
Option Explicit
|
46
|
-
|
47
|
-
|
48
44
|
|
49
45
|
Function f_blnTest1() As Boolean
|
50
46
|
|
@@ -98,45 +94,41 @@
|
|
98
94
|
|
99
95
|
|
100
96
|
|
101
|
-
Do
|
97
|
+
Do While lngA * dblL <= 100 / 2
|
102
98
|
|
103
|
-
Do
|
99
|
+
Do While Sqr((lngA * dblL) ^ 2 + (lngB * Sqr(3) * dblL) ^ 2) <= 100 / 2
|
104
100
|
|
105
101
|
dblX = lngA * dblL
|
106
102
|
|
107
103
|
dblY = lngB * Sqr(3) * dblL
|
108
104
|
|
109
|
-
|
105
|
+
lngRow1 = lngRow1 + 1
|
110
106
|
|
111
|
-
|
107
|
+
Cells(lngRow1, "A").Value = dblX
|
112
108
|
|
113
|
-
|
109
|
+
Cells(lngRow1, "B").Value = dblY
|
114
110
|
|
115
|
-
|
111
|
+
Cells(lngRow1, "E").Value = -dblX
|
116
112
|
|
117
|
-
|
113
|
+
Cells(lngRow1, "F").Value = -dblY
|
118
114
|
|
119
|
-
|
115
|
+
If dblX <> 0 And dblY <> 0 Then
|
120
116
|
|
121
|
-
|
117
|
+
lngRow2 = lngRow2 + 1
|
122
118
|
|
123
|
-
|
119
|
+
Cells(lngRow2, "C").Value = -dblX
|
124
120
|
|
125
|
-
|
121
|
+
Cells(lngRow2, "D").Value = dblY
|
126
122
|
|
127
|
-
|
123
|
+
Cells(lngRow2, "G").Value = dblX
|
128
124
|
|
129
|
-
Cells(lngRow2, "G").Value = dblX
|
130
|
-
|
131
|
-
|
125
|
+
Cells(lngRow2, "H").Value = -dblY
|
132
|
-
|
133
|
-
End If
|
134
126
|
|
135
127
|
End If
|
136
128
|
|
137
129
|
lngB = lngB + 2
|
138
130
|
|
139
|
-
Loop
|
131
|
+
Loop
|
140
132
|
|
141
133
|
lngA = lngA + 3
|
142
134
|
|
@@ -144,9 +136,7 @@
|
|
144
136
|
|
145
137
|
lngB = lngB0
|
146
138
|
|
147
|
-
Loop
|
139
|
+
Loop
|
148
|
-
|
149
|
-
|
150
140
|
|
151
141
|
End Function
|
152
142
|
|
5
コードを一部修正
test
CHANGED
@@ -106,29 +106,31 @@
|
|
106
106
|
|
107
107
|
dblY = lngB * Sqr(3) * dblL
|
108
108
|
|
109
|
-
|
109
|
+
If Sqr(dblX ^ 2 + dblY ^ 2) <= 100 / 2 Then
|
110
110
|
|
111
|
-
lngRow1 = lngRow1 + 1
|
111
|
+
lngRow1 = lngRow1 + 1
|
112
112
|
|
113
|
-
Cells(lngRow1, "A").Value = dblX
|
113
|
+
Cells(lngRow1, "A").Value = dblX
|
114
114
|
|
115
|
-
Cells(lngRow1, "B").Value = dblY
|
115
|
+
Cells(lngRow1, "B").Value = dblY
|
116
116
|
|
117
|
-
Cells(lngRow1, "E").Value = -dblX
|
117
|
+
Cells(lngRow1, "E").Value = -dblX
|
118
118
|
|
119
|
-
Cells(lngRow1, "F").Value = -dblY
|
119
|
+
Cells(lngRow1, "F").Value = -dblY
|
120
120
|
|
121
|
-
If dblX <> 0 And dblY <> 0 Then
|
121
|
+
If dblX <> 0 And dblY <> 0 Then
|
122
122
|
|
123
|
-
lngRow2 = lngRow2 + 1
|
123
|
+
lngRow2 = lngRow2 + 1
|
124
124
|
|
125
|
-
Cells(lngRow2, "C").Value = -dblX
|
125
|
+
Cells(lngRow2, "C").Value = -dblX
|
126
126
|
|
127
|
-
Cells(lngRow2, "D").Value = dblY
|
127
|
+
Cells(lngRow2, "D").Value = dblY
|
128
128
|
|
129
|
-
Cells(lngRow2, "G").Value = dblX
|
129
|
+
Cells(lngRow2, "G").Value = dblX
|
130
130
|
|
131
|
-
Cells(lngRow2, "H").Value = -dblY
|
131
|
+
Cells(lngRow2, "H").Value = -dblY
|
132
|
+
|
133
|
+
End If
|
132
134
|
|
133
135
|
End If
|
134
136
|
|
4
第2案に誤りを発見したため、一旦削除
test
CHANGED
@@ -153,119 +153,3 @@
|
|
153
153
|
原点が第一象限と第三象限でかぶっているのは仕様ですw
|
154
154
|
|
155
155
|
座標の数は、9997個になりました。
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
次のコードなら、原点がかぶりません。
|
160
|
-
|
161
|
-
```VBA
|
162
|
-
|
163
|
-
Function f_blnTest2() As Boolean
|
164
|
-
|
165
|
-
Dim dblL As Double '六角形の一辺の半分
|
166
|
-
|
167
|
-
Dim lngA As Long 'x軸方向の係数
|
168
|
-
|
169
|
-
Dim lngB As Long 'y軸方向の係数の一部
|
170
|
-
|
171
|
-
Dim lngB0 As Long 'y軸方向の係数の一部の初期値
|
172
|
-
|
173
|
-
Dim lngRow1 As Long '第一、三象限のセルの行位置
|
174
|
-
|
175
|
-
Dim lngRow2 As Long '第二、四象限のセルの行位置
|
176
|
-
|
177
|
-
Dim dblX As Double '第一象限のx座標
|
178
|
-
|
179
|
-
Dim dblY As Double '第一象限のy座標
|
180
|
-
|
181
|
-
Dim wsh1 As Worksheet
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
Set wsh1 = Worksheets(1)
|
186
|
-
|
187
|
-
wsh1.Cells(1, 1).CurrentRegion.ClearContents
|
188
|
-
|
189
|
-
lngRow1 = 1
|
190
|
-
|
191
|
-
lngRow2 = 1
|
192
|
-
|
193
|
-
wsh1.Cells(lngRow1, "A").Value = "第一象限x" 'x軸を含む
|
194
|
-
|
195
|
-
wsh1.Cells(lngRow1, "B").Value = "第一象限y" 'y軸を含む
|
196
|
-
|
197
|
-
wsh1.Cells(lngRow2, "C").Value = "第二象限x"
|
198
|
-
|
199
|
-
wsh1.Cells(lngRow2, "D").Value = "第二象限y"
|
200
|
-
|
201
|
-
wsh1.Cells(lngRow1, "E").Value = "第三象限x" 'x軸を含む
|
202
|
-
|
203
|
-
wsh1.Cells(lngRow1, "F").Value = "第三象限y" 'y軸を含む
|
204
|
-
|
205
|
-
wsh1.Cells(lngRow2, "G").Value = "第四象限x"
|
206
|
-
|
207
|
-
wsh1.Cells(lngRow2, "H").Value = "第四象限y"
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
dblL = Sqr(2) * 3 ^ (1 / 4) * Sqr(Atn(1)) / 6
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
lngB0 = 1
|
216
|
-
|
217
|
-
lngB = lngB0
|
218
|
-
|
219
|
-
Do
|
220
|
-
|
221
|
-
Do
|
222
|
-
|
223
|
-
dblX = lngA * dblL
|
224
|
-
|
225
|
-
dblY = lngB * Sqr(3) * dblL
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
lngRow1 = lngRow1 + 1
|
230
|
-
|
231
|
-
Cells(lngRow1, "A").Value = dblX
|
232
|
-
|
233
|
-
Cells(lngRow1, "B").Value = dblY
|
234
|
-
|
235
|
-
Cells(lngRow1, "E").Value = -dblX
|
236
|
-
|
237
|
-
Cells(lngRow1, "F").Value = -dblY
|
238
|
-
|
239
|
-
If dblX <> 0 And dblY <> 0 Then
|
240
|
-
|
241
|
-
lngRow2 = lngRow2 + 1
|
242
|
-
|
243
|
-
Cells(lngRow2, "C").Value = -dblX
|
244
|
-
|
245
|
-
Cells(lngRow2, "D").Value = dblY
|
246
|
-
|
247
|
-
Cells(lngRow2, "G").Value = dblX
|
248
|
-
|
249
|
-
Cells(lngRow2, "H").Value = -dblY
|
250
|
-
|
251
|
-
End If
|
252
|
-
|
253
|
-
lngB = lngB + 2
|
254
|
-
|
255
|
-
Loop Until Sqr((lngA * dblL) ^ 2 + (lngB * Sqr(3) * dblL) ^ 2) > 100 / 2
|
256
|
-
|
257
|
-
lngA = lngA + 3
|
258
|
-
|
259
|
-
lngB0 = 1 - lngB0
|
260
|
-
|
261
|
-
lngB = lngB0
|
262
|
-
|
263
|
-
Loop Until lngA * dblL > 100 / 2
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
End Function
|
268
|
-
|
269
|
-
```
|
270
|
-
|
271
|
-
座標の数は、10006です。
|
3
第2案を一部修正
test
CHANGED
@@ -214,7 +214,7 @@
|
|
214
214
|
|
215
215
|
lngB0 = 1
|
216
216
|
|
217
|
-
lngB =
|
217
|
+
lngB = lngB0
|
218
218
|
|
219
219
|
Do
|
220
220
|
|
2
第2案を追加
test
CHANGED
@@ -153,3 +153,119 @@
|
|
153
153
|
原点が第一象限と第三象限でかぶっているのは仕様ですw
|
154
154
|
|
155
155
|
座標の数は、9997個になりました。
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
次のコードなら、原点がかぶりません。
|
160
|
+
|
161
|
+
```VBA
|
162
|
+
|
163
|
+
Function f_blnTest2() As Boolean
|
164
|
+
|
165
|
+
Dim dblL As Double '六角形の一辺の半分
|
166
|
+
|
167
|
+
Dim lngA As Long 'x軸方向の係数
|
168
|
+
|
169
|
+
Dim lngB As Long 'y軸方向の係数の一部
|
170
|
+
|
171
|
+
Dim lngB0 As Long 'y軸方向の係数の一部の初期値
|
172
|
+
|
173
|
+
Dim lngRow1 As Long '第一、三象限のセルの行位置
|
174
|
+
|
175
|
+
Dim lngRow2 As Long '第二、四象限のセルの行位置
|
176
|
+
|
177
|
+
Dim dblX As Double '第一象限のx座標
|
178
|
+
|
179
|
+
Dim dblY As Double '第一象限のy座標
|
180
|
+
|
181
|
+
Dim wsh1 As Worksheet
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
Set wsh1 = Worksheets(1)
|
186
|
+
|
187
|
+
wsh1.Cells(1, 1).CurrentRegion.ClearContents
|
188
|
+
|
189
|
+
lngRow1 = 1
|
190
|
+
|
191
|
+
lngRow2 = 1
|
192
|
+
|
193
|
+
wsh1.Cells(lngRow1, "A").Value = "第一象限x" 'x軸を含む
|
194
|
+
|
195
|
+
wsh1.Cells(lngRow1, "B").Value = "第一象限y" 'y軸を含む
|
196
|
+
|
197
|
+
wsh1.Cells(lngRow2, "C").Value = "第二象限x"
|
198
|
+
|
199
|
+
wsh1.Cells(lngRow2, "D").Value = "第二象限y"
|
200
|
+
|
201
|
+
wsh1.Cells(lngRow1, "E").Value = "第三象限x" 'x軸を含む
|
202
|
+
|
203
|
+
wsh1.Cells(lngRow1, "F").Value = "第三象限y" 'y軸を含む
|
204
|
+
|
205
|
+
wsh1.Cells(lngRow2, "G").Value = "第四象限x"
|
206
|
+
|
207
|
+
wsh1.Cells(lngRow2, "H").Value = "第四象限y"
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
dblL = Sqr(2) * 3 ^ (1 / 4) * Sqr(Atn(1)) / 6
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
lngB0 = 1
|
216
|
+
|
217
|
+
lngB = 1
|
218
|
+
|
219
|
+
Do
|
220
|
+
|
221
|
+
Do
|
222
|
+
|
223
|
+
dblX = lngA * dblL
|
224
|
+
|
225
|
+
dblY = lngB * Sqr(3) * dblL
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
lngRow1 = lngRow1 + 1
|
230
|
+
|
231
|
+
Cells(lngRow1, "A").Value = dblX
|
232
|
+
|
233
|
+
Cells(lngRow1, "B").Value = dblY
|
234
|
+
|
235
|
+
Cells(lngRow1, "E").Value = -dblX
|
236
|
+
|
237
|
+
Cells(lngRow1, "F").Value = -dblY
|
238
|
+
|
239
|
+
If dblX <> 0 And dblY <> 0 Then
|
240
|
+
|
241
|
+
lngRow2 = lngRow2 + 1
|
242
|
+
|
243
|
+
Cells(lngRow2, "C").Value = -dblX
|
244
|
+
|
245
|
+
Cells(lngRow2, "D").Value = dblY
|
246
|
+
|
247
|
+
Cells(lngRow2, "G").Value = dblX
|
248
|
+
|
249
|
+
Cells(lngRow2, "H").Value = -dblY
|
250
|
+
|
251
|
+
End If
|
252
|
+
|
253
|
+
lngB = lngB + 2
|
254
|
+
|
255
|
+
Loop Until Sqr((lngA * dblL) ^ 2 + (lngB * Sqr(3) * dblL) ^ 2) > 100 / 2
|
256
|
+
|
257
|
+
lngA = lngA + 3
|
258
|
+
|
259
|
+
lngB0 = 1 - lngB0
|
260
|
+
|
261
|
+
lngB = lngB0
|
262
|
+
|
263
|
+
Loop Until lngA * dblL > 100 / 2
|
264
|
+
|
265
|
+
|
266
|
+
|
267
|
+
End Function
|
268
|
+
|
269
|
+
```
|
270
|
+
|
271
|
+
座標の数は、10006です。
|
1
説明追記
test
CHANGED
@@ -149,3 +149,7 @@
|
|
149
149
|
End Function
|
150
150
|
|
151
151
|
```
|
152
|
+
|
153
|
+
原点が第一象限と第三象限でかぶっているのは仕様ですw
|
154
|
+
|
155
|
+
座標の数は、9997個になりました。
|