Excel VBA質問箱 IV

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

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


5231 / 13646 ツリー ←次へ | 前へ→

【51971】オートフィルタで抽出結果 空白だった場合 瑠璃 07/10/13(土) 22:16 質問[未読]
【51973】Re:オートフィルタで抽出結果 空白だった... ponpon 07/10/13(土) 23:21 発言[未読]
【51975】Re:オートフィルタで抽出結果 空白だった... 瑠璃 07/10/14(日) 0:06 回答[未読]
【51976】Re:オートフィルタで抽出結果 空白だった... ponpon 07/10/14(日) 0:19 発言[未読]
【51983】Re:オートフィルタで抽出結果 空白だった... 瑠璃 07/10/14(日) 18:23 発言[未読]
【51984】Re:オートフィルタで抽出結果 空白だった... ponpon 07/10/14(日) 20:19 発言[未読]
【52013】Re:オートフィルタで抽出結果 空白だった... Jaka 07/10/16(火) 10:54 発言[未読]

【51971】オートフィルタで抽出結果 空白だった場...
質問  瑠璃  - 07/10/13(土) 22:16 -

引用なし
パスワード
   初めてマクロを本を見ながら 組んでみたのですが
抽出結果が一つでもあれば、うまく動いてるのです。でも、抽出結果で何もない時はエラーと出てしまうので、マクロが中断されてしまいます。
空白の時は、つぎのマクロに進むようにするには、
どうすればよいのでしょうか?

VBAの中身は

Sub オートフィルタ切手()
'
' オートフィルタ切手 Macro
' オートフィルタで切手を抽出する
'

'
  Sheets("sheet1").Select
  Range("BK71:BU101").Select
  Selection.AutoFilter
  Selection.AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd, _
    Criteria2:="<=4"
End Sub
Sub オートフィルタ切手コピー()
'
' オートフィルタ切手コピー Macro
' 抽出した切手をsheet2にコピー
'

'
  Sheets("sheet1").Select
  Range("BM72:BM101").Select
  Selection.Copy
  Sheets("sheet2").Select
  Range("B11").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("sheet1").Select
  Range("BQ72:BQ100").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("sheet2").Select
  Range("C11").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets("sheet1").Select
End Sub

このようになっています。

【51973】Re:オートフィルタで抽出結果 空白だっ...
発言  ponpon  - 07/10/13(土) 23:21 -

引用なし
パスワード
   ▼瑠璃 さん:
>初めてマクロを本を見ながら 組んでみたのですが
>抽出結果が一つでもあれば、うまく動いてるのです。でも、抽出結果で何もない時はエラーと出てしまうので、マクロが中断されてしまいます。
>空白の時は、つぎのマクロに進むようにするには、
>どうすればよいのでしょうか?
>
>VBAの中身は
>
>Sub オートフィルタ切手()
>'
>' オートフィルタ切手 Macro
>' オートフィルタで切手を抽出する
>'
>
>'
>  Sheets("sheet1").Select
>  Range("BK71:BU101").Select
>  Selection.AutoFilter
>  Selection.AutoFilter Field:=1, Criteria1:=">=1", Operator:=xlAnd, _
>    Criteria2:="<=4"
>End Sub
>Sub オートフィルタ切手コピー()
>'
>' オートフィルタ切手コピー Macro
>' 抽出した切手をsheet2にコピー
>'
>
>'
>  Sheets("sheet1").Select
>  Range("BM72:BM101").Select
>  Selection.Copy
>  Sheets("sheet2").Select
>  Range("B11").Select
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>  Sheets("sheet1").Select
>  Range("BQ72:BQ100").Select
>  Application.CutCopyMode = False
>  Selection.Copy
>  Sheets("sheet2").Select
>  Range("C11").Select
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>  Sheets("sheet1").Select
>End Sub
>
>このようになっています。

こんばんは。
一つにまとめると、
以下のような感じになると思うのですが、
Option Explicit

Sub オートフィルタ切手()
'
' オートフィルタ切手 Macro
' オートフィルタで切手を抽出する
' オートフィルタ切手コピー Macro
' 抽出した切手をsheet2にコピー
'
  With Sheets("sheet1")
    If .AutoFilterMode Then .AutoFilterMode = False
    .Range("BK71:BU101").AutoFilter Field:=1, Criteria1:=">=1", _
    Operator:=xlAnd, Criteria2:="<=4"
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
      .Range("BM72:BM101").Copy
     ’    ↑
     ’オートフィルターの結果がどんな場合でもこの範囲ですか?
      Sheets("sheet2").Range("B11").PasteSpecial Paste:=xlPasteValues, _
      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      .Range("BQ72:BQ100").Copy
     ’    ↑
     ’オートフィルターの結果がどんな場合でもこの範囲ですか?

      Sheets("sheet2").Range("C11").PasteSpecial Paste:=xlPasteValues, _
      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     End If
     .AutoFilterMode = False
  End With
  Application.CutCopyMode = False
End Sub

【51975】Re:オートフィルタで抽出結果 空白だっ...
回答  瑠璃  - 07/10/14(日) 0:06 -

引用なし
パスワード
   ▼ponpon さん:
>
>こんばんは。
>一つにまとめると、
>以下のような感じになると思うのですが、

こんばんわ^^
マクロまとめてくれましてありがとうございました。


>Option Explicit
>
↑は 必要なのでしょうか?
>Sub オートフィルタ切手()
>'
>' オートフィルタ切手 Macro
>' オートフィルタで切手を抽出する
>' オートフィルタ切手コピー Macro
>' 抽出した切手をsheet2にコピー
>'
>  With Sheets("sheet1")
>    If .AutoFilterMode Then .AutoFilterMode = False
>    .Range("BK71:BU101").AutoFilter Field:=1, Criteria1:=">=1", _
>    Operator:=xlAnd, Criteria2:="<=4"
>    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
>      .Range("BM72:BM101").Copy
>     ’    ↑
>     ’オートフィルターの結果がどんな場合でもこの範囲ですか?
抽出する範囲は変わりません。多分・・・^^;
変わってしまうとしたら、コードを書き換えるつもりですが
いい方法ってあるのでしょか?
本や他のサイトを見てもわからなかったのです。

>      Sheets("sheet2").Range("B11").PasteSpecial Paste:=xlPasteValues, _
>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
>      .Range("BQ72:BQ100").Copy
>     ’    ↑
>     ’オートフィルターの結果がどんな場合でもこの範囲ですか?
.Range("BQ72:BQ100").Copy
じゃなく
.Range("BQ72:BQ101").Copyでしたね^^;
後は 上と同じです。

>
>      Sheets("sheet2").Range("C11").PasteSpecial Paste:=xlPasteValues, _
>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
>     End If
>     .AutoFilterMode = False
>  End With
>  Application.CutCopyMode = False
>End Sub


これで何とか 次の段階にいけそうです^^

【51976】Re:オートフィルタで抽出結果 空白だっ...
発言  ponpon  - 07/10/14(日) 0:19 -

引用なし
パスワード
   ▼瑠璃 さん:
>こんばんわ^^
>マクロまとめてくれましてありがとうございました。
>
>
>>Option Explicit
>>
>↑は 必要なのでしょうか?

変数の宣言がないとエラーになります。
今回は変数がないのでいりませんが・・・


>>Sub オートフィルタ切手()
>>'
>>' オートフィルタ切手 Macro
>>' オートフィルタで切手を抽出する
>>' オートフィルタ切手コピー Macro
>>' 抽出した切手をsheet2にコピー
>>'
>>  With Sheets("sheet1")
>>    If .AutoFilterMode Then .AutoFilterMode = False
>>    .Range("BK71:BU101").AutoFilter Field:=1, Criteria1:=">=1", _
>>    Operator:=xlAnd, Criteria2:="<=4"
>>    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
>>      .Range("BM72:BM101").Copy

      Application.Intersect(.AutoFilter.Range, .Range("BM:BM")).Offset(1).Copy
        ↑
こんな風にすると、オートフィルターで抽出した範囲とBM列の重なった部分を
1つ下にずらした範囲(つまり項目行を外した範囲)をコピーしてくれます。
>>     ’    ↑
>>     ’オートフィルターの結果がどんな場合でもこの範囲ですか?
>抽出する範囲は変わりません。多分・・・^^;
>変わってしまうとしたら、コードを書き換えるつもりですが
>いい方法ってあるのでしょか?
>本や他のサイトを見てもわからなかったのです。
>
>>      Sheets("sheet2").Range("B11").PasteSpecial Paste:=xlPasteValues, _
>>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
>>      .Range("BQ72:BQ100").Copy
      >.Range("BQ72:BQ101").Copyでしたね^^;
         ↑ここも  
      Application.Intersect(.AutoFilter.Range, .Range("BQ:BQ")).Offset(1).Copy


>
>>
>>      Sheets("sheet2").Range("C11").PasteSpecial Paste:=xlPasteValues, _
>>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
>>     End If
>>     .AutoFilterMode = False
>>  End With
>>  Application.CutCopyMode = False
>>End Sub
>
>
>これで何とか 次の段階にいけそうです^^

【51983】Re:オートフィルタで抽出結果 空白だっ...
発言  瑠璃  - 07/10/14(日) 18:23 -

引用なし
パスワード
   ▼ponpon さん:
私の質問の仕方が悪かったようです^^;

>抽出結果が一つでもあれば、うまく動いてるのです。でも、抽出結果で何もない時はエラーと出てしまうので、マクロが中断されてしまいます。
>空白の時は、つぎのマクロに進むようにするには、
>どうすればよいのでしょうか?

じゃなく、抽出結果で1つも抽出されなかったら、次の段階の
Sub オートフィルタハガキ進みたいのです。

Sub オートフィルタ切手()
'
' オートフィルタ切手 Macro
' マクロ記録日 : 2007/10/13 ユーザー名 : オートフィルタで切手を抽出するオートフィルタで切手を抽出する
' オートフィルタ切手コピー Macro
' 抽出した切手をsheet2にコピー
'
  With Sheets("入力")
    If .AutoFilterMode Then .AutoFilterMode = False
    .Range("BK71:BU101").AutoFilter Field:=1, Criteria1:=">=1", _
    Operator:=xlAnd, Criteria2:="<=4"
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
      .Range("BM72:BM101").Copy
     '    ↑
     '1から4の抽出結果が出た時 切手の額面の所がコピーされる
      Sheets("切手類払込調書").Range("B11").PasteSpecial Paste:=xlPasteValues, _
      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
      .Range("BQ72:BQ101").Copy
     '    ↑
     '1から4の抽出結果が出た時 販売枚数がコピーされる

      Sheets("切手類払込調書").Range("C11").PasteSpecial Paste:=xlPasteValues, _
      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     End If
     .AutoFilterMode = False
  End With
  Application.CutCopyMode = False
End Sub

【51984】Re:オートフィルタで抽出結果 空白だっ...
発言  ponpon  - 07/10/14(日) 20:19 -

引用なし
パスワード
   ▼瑠璃 さん:
>私の質問の仕方が悪かったようです^^;
>
>>抽出結果が一つでもあれば、うまく動いてるのです。でも、抽出結果で何もない時はエラーと出てしまうので、マクロが中断されてしまいます。
>>空白の時は、つぎのマクロに進むようにするには、
>>どうすればよいのでしょうか?
>
>じゃなく、抽出結果で1つも抽出されなかったら、次の段階の
>Sub オートフィルタハガキ進みたいのです。

こういうことですか?
>
>Sub オートフィルタ切手()
>'
>' オートフィルタ切手 Macro
>' マクロ記録日 : 2007/10/13 ユーザー名 : オートフィルタで切手を抽出するオートフィルタで切手を抽出する
>' オートフィルタ切手コピー Macro
>' 抽出した切手をsheet2にコピー
>'
>  With Sheets("入力")
>    If .AutoFilterMode Then .AutoFilterMode = False
>    .Range("BK71:BU101").AutoFilter Field:=1, Criteria1:=">=1", _
>    Operator:=xlAnd, Criteria2:="<=4"
>    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
>      .Range("BM72:BM101").Copy
>     '    ↑
>     '1から4の抽出結果が出た時 切手の額面の所がコピーされる
>      Sheets("切手類払込調書").Range("B11").PasteSpecial Paste:=xlPasteValues, _
>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
>      .Range("BQ72:BQ101").Copy
>     '    ↑
>     '1から4の抽出結果が出た時 販売枚数がコピーされる
>
>      Sheets("切手類払込調書").Range("C11").PasteSpecial Paste:=xlPasteValues, _
>      Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     Else
       .AutoFilterMode = False
       Call オートフィルタハガキ
>     End If

>     .AutoFilterMode = False
>  End With
>  Application.CutCopyMode = False
>End Sub

【52013】Re:オートフィルタで抽出結果 空白だっ...
発言  Jaka  - 07/10/16(火) 10:54 -

引用なし
パスワード
   >抽出結果で1つも抽出されなかったら
考え方

オートフィルタする前に
MATCH(エクセル関数)
や他の検索機能を使って有無を調べる。

オートフィルタした後なら
SUBTOTAL(エクセル関数)
で、抽出件数を調べる。

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