Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3016 / 13644 ツリー ←次へ | 前へ→

【64766】オートフィルタの変数代入 たうりん 10/3/12(金) 14:04 質問[未読]
【64769】Re:オートフィルタの変数代入 Jaka 10/3/12(金) 15:33 発言[未読]
【64772】Re:オートフィルタの変数代入 たうりん 10/3/12(金) 15:49 発言[未読]
【64774】Re:オートフィルタの変数代入 Jaka 10/3/12(金) 16:55 発言[未読]
【64775】Re:オートフィルタの変数代入 たうりん 10/3/12(金) 23:41 お礼[未読]

【64766】オートフィルタの変数代入
質問  たうりん  - 10/3/12(金) 14:04 -

引用なし
パスワード
   オートフィルタで12行ずつ選んで印刷しようとしています。
1以上〜12以下、13以上〜24以下、25以上〜36以下・・・
データがある行まで繰り返し処理をします。
変数をいまいち理解していないので変なプログラムですが宜しくお願いします。
Dim myRow1 As Integer
Dim myRow2 As Integer
Dim myRow3 As Integer
Dim b As String

Sheets("日報").Select

'変数への代入部分
  myRow1 = 8
  myRow2 = 1
  myRow3 = 11
Do
  b = Worksheets("日報").Cells(myRow1, 1).Value
   If b = "" Then Exit Do

'補給品指示書印刷
 With Worksheets("日報").Select
'フィルタ 1〜12行目
  Selection.AutoFilter Field:=2, Criteria1:=">=" & myRow2, Operator:=xlAnd, _
   Criteria2:="<=" & myRow3
  ActiveWindow.SelectedSheets.PrintPreview
  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End With
myRow1 = myRow1 + 12
myRow2 = myRow2 + 12
myRow3 = myRow3 + 12
  Loop

'フィルタ解除
  Selection.AutoFilter Field:=2
  Range("K6").Select

 MsgBox "End", vbInformation

End Sub

【64769】Re:オートフィルタの変数代入
発言  Jaka  - 10/3/12(金) 15:33 -

引用なし
パスワード
   ▼たうりん さん:
>オートフィルタで12行ずつ選んで印刷しようとしています。
>1以上〜12以下、13以上〜24以下、25以上〜36以下・・・
>データがある行まで繰り返し処理をします。
やっていることが良くわかりません。

>'変数への代入部分
>  myRow1 = 8
>  myRow2 = 1
>  myRow3 = 11
>Do
>  b = Worksheets("日報").Cells(myRow1, 1).Value
>   If b = "" Then Exit Do
>
>'補給品指示書印刷
> With Worksheets("日報").Select
>'フィルタ 1〜12行目
>  Selection.AutoFilter Field:=2, Criteria1:=">=" & myRow2, Operator:=xlAnd, _
>   Criteria2:="<=" & myRow3
オートフィルタ領域の2列目の値が、
myRow2
以上
myRow3
以下を表示。

これが、どうして行に結びつくのか解りません。

【64772】Re:オートフィルタの変数代入
発言  たうりん  - 10/3/12(金) 15:49 -

引用なし
パスワード
   ▼Jaka さん:
>▼たうりん さん:
>>オートフィルタで12行ずつ選んで印刷しようとしています。
>>1以上〜12以下、13以上〜24以下、25以上〜36以下・・・
>>データがある行まで繰り返し処理をします。
>やっていることが良くわかりません。
>
>>'変数への代入部分
>>  myRow1 = 8
>>  myRow2 = 1
>>  myRow3 = 11
>>Do
>>  b = Worksheets("日報").Cells(myRow1, 1).Value
>>   If b = "" Then Exit Do
>>
>>'補給品指示書印刷
>> With Worksheets("日報").Select
>>'フィルタ 1〜12行目
>>  Selection.AutoFilter Field:=2, Criteria1:=">=" & myRow2, Operator:=xlAnd, _
>>   Criteria2:="<=" & myRow3
>オートフィルタ領域の2列目の値が、
>myRow2
>以上
>myRow3
>以下を表示。
>
>これが、どうして行に結びつくのか解りません。
行という説明がよくなかったです。
2列目に1〜100の連番をふっています。
1列目は、7行目に項目、8行目からデータが入っていて、印刷が必要な行に1が入るようにしています。
宜しくお願いします。

【64774】Re:オートフィルタの変数代入
発言  Jaka  - 10/3/12(金) 16:55 -

引用なし
パスワード
   >オートフィルタで12行ずつ選んで印刷しようとしています。
>1以上〜12以下、13以上〜24以下、25以上〜36以下・・・
これと、

>1列目は、7行目に項目、8行目からデータが入っていて、印刷が必要な行に1が入るようにしています。
これがどうつながるのか良くわかりません。

んで、適当に解釈してみました。

フィルタされている範囲を12行づつ選択。

Dim Are As Range, Rng As Range, Cel As Range, i As Long
ActiveSheet.AutoFilterMode = False

Range("A1").AutoFilter Field:=2, Criteria1:="1"
'↑
'この部分は、動作にあったものに変えてください。

i = 0
With ActiveSheet.AutoFilter.Range
  With .Offset(1).Resize(.Rows.Count - 1)
    With .Columns(1).SpecialCells(xlCellTypeVisible)
      For Each Are In .Areas
        For Each Cel In Are
          i = i + 1
          If i = 1 Then
            Set Rng = Cel
          Else
            Set Rng = Union(Rng, Cel)
          End If
          If i = 12 Then
            Rng.EntireRow.Select
            MsgBox "OK"
            i = 0
            Set Rng = Nothing
          End If
        Next
      Next
      If Not Rng Is Nothing Then
        Rng.EntireRow.Select
      End If
    End With
  End With
End With

【64775】Re:オートフィルタの変数代入
お礼  たうりん  - 10/3/12(金) 23:41 -

引用なし
パスワード
   ▼Jaka さん:
>>オートフィルタで12行ずつ選んで印刷しようとしています。
>>1以上〜12以下、13以上〜24以下、25以上〜36以下・・・
>これと、
>
>>1列目は、7行目に項目、8行目からデータが入っていて、印刷が必要な行に1が入るようにしています。
>これがどうつながるのか良くわかりません。
>
>んで、適当に解釈してみました。
>
>フィルタされている範囲を12行づつ選択。
>
>
データ有 n 品名   数量
 1  1  カバー   10
 1  2  パネル   20
 1  3  モール    30
   ・
   ・
   ・
 1  12  レンズ   40
 1  13  パッキン   50
 1  14  トメグ   60
 1  15  ネジ    70
   ・
   ・
   ・
   100
こんな表ですが、オートフィルタで12行ごとに絞って印刷させます。
教えて頂いたプログラムでは1行しか抽出できませんでした。
>Range("A1").AutoFilter Field:=2, Criteria1:="1"
>'↑
>'この部分は、動作にあったものに変えてください。
ここを変えなかったからだと思いますが・・・

なんとか以下のプログラムで動くようになりました。
Sub ()
Dim myRow1 As Integer
Dim myRow2 As Integer
 i = 8
 myRow1 = 1
 myRow2 = 12
Do
'梱包日報12行ごと印刷
Selection.AutoFilter Field:=2, Criteria1:=">=" & myRow1, Operator:=xlAnd, _
   Criteria2:="<=" & myRow2
 ActiveWindow.SelectedSheets.PrintPreview
 ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
   i = i + 12
   myRow1 = myRow1 + 12
   myRow2 = myRow2 + 12
Loop While Cells(i, 1).Value <> ""
'フィルタ解除
  Selection.AutoFilter Field:=2
  MsgBox "End", vbInformation
End Sub

お手数お掛けしました。

3016 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free