- 締切済み
配列表示と間引き
配列の間引きをを教えて下さい。 下記文を書きました Sub 配列() Dim u As Integer '左 Dim v As Integer '中 Dim w As Integer '右 Dim x As Integer '左 Dim y As Integer '中 Dim z As Integer '右 Dim row As Integer '行カウンタ Dim col As Integer '列カウンタ Dim intSheet As Integer 'シートカウンタ Dim blnNextPage As Boolean '次シートフラグ '初期値セット u = 1 v = 2 w = 3 x = 4 y = 5 z = 5 row = 0 col = 1 intSheet = 1 Do While (1) 'zカウント z = z + 1 If z > 20 Then 'zが20以上ならy+1 y = y + 1 If y > 19 Then 'yが20以上ならx+1 x = x + 1 If x > 18 Then 'xが20以上ならy+1 w = w + 1 If w > 17 Then 'wが20以上ならx+1 v = v + 1 If v > 16 Then 'wが20以上ならx+1 u = u + 1 '終了条件 If (x = 19 And y = 19 And z = 20) Then Exit Do 'v初期化 = x+1 v = u + 1 End If 'w初期化 = y+1 w = v + 1 End If 'x初期化 = x+1 x = w + 1 End If 'y初期化 = y+1 y = x + 1 End If 'z初期化 = y+1 z = y + 1 End If If z > 20 Then Exit Sub '行カウント row = row + 1 If row > 1000 Then '1000で次の列か次のページへ If blnNextPage Then '行・列カウンタ初期化 col = 1 row = 1 '次のシートへ intSheet = intSheet + 1 '次のシートが無い場合は追加 If intSheet > Worksheets.Count Then Sheets.Add After:=Worksheets(Worksheets.Count) End If 'シートをアクティブに Worksheets(intSheet).Select 'フラグ消去 blnNextPage = False Else '次の列へ col = col + 6 row = 1 'blnNextPage = True End If End If If col = 6 * 3 + 1 Then blnNextPage = True End If 'データ表示 Worksheets(intSheet).Range(Chr(64 + col) & row).Cells = u Worksheets(intSheet).Range(Chr(64 + col + 1) & row).Cells = v Worksheets(intSheet).Range(Chr(64 + col + 2) & row).Cells = w Worksheets(intSheet).Range(Chr(64 + col + 3) & row).Cells = x Worksheets(intSheet).Range(Chr(64 + col + 4) & row).Cells = y Worksheets(intSheet).Range(Chr(64 + col + 5) & row).Cells = z Loop End Sub 上記文で表示をしますが、 6列目までの間に3列の連数字の時には表示を行わず、次に移る様にしたいのですが、どうすれば良いでしょうか? 1,2,5,6,10,12はOKです 1,2,3,5,6,10又は1,3,4,5,10,11等3連の数字は表示を行わない。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- pkh4989
- ベストアンサー率62% (162/260)
以下のように追加してみてください。 '3列の連数字チェック If Chk_Pass(u, v, w, x, y, z) Then '←追加 row = row - 1 '←追加 Else '←追加 'データ表示 Worksheets(intSheet).Range(Chr(64 + col) & row).Cells = u Worksheets(intSheet).Range(Chr(64 + col + 1) & row).Cells = v Worksheets(intSheet).Range(Chr(64 + col + 2) & row).Cells = w Worksheets(intSheet).Range(Chr(64 + col + 3) & row).Cells = x Worksheets(intSheet).Range(Chr(64 + col + 4) & row).Cells = y Worksheets(intSheet).Range(Chr(64 + col + 5) & row).Cells = z End If '←追加 Loop End Sub '3列の連数字チェック Function Chk_Pass(u As Integer, v As Integer, w As Integer, x As Integer, y As Integer, z As Integer) Dim wVal(6) As Integer Dim wI As Integer Dim wCnt As Integer ' Erase wVal wVal(1) = u wVal(2) = v wVal(3) = w wVal(4) = x wVal(5) = y wVal(6) = z ' wCnt = 1 For wI = 2 To 6 If wVal(wI - 1) + 1 = wVal(wI) Then wCnt = wCnt + 1 If wCnt >= 3 Then Exit For End If Else wCnt = 1 End If Next If wCnt >= 3 Then Chk_Pass = True Else Chk_Pass = False End If End Function
お礼
有り難うございます 出来ました