Excel VBA質問箱 IV

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

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


7146 / 13645 ツリー ←次へ | 前へ→

【40716】オートフィルタの解除 福神漬 06/7/21(金) 12:09 質問[未読]
【40718】Re:オートフィルタの解除 Jaka 06/7/21(金) 12:33 回答[未読]
【40719】Re:オートフィルタの解除 Statis 06/7/21(金) 12:34 発言[未読]
【40722】Re:オートフィルタの解除 福神漬 06/7/21(金) 13:49 お礼[未読]
【40748】Re:オートフィルタの解除 Statis 06/7/22(土) 8:43 回答[未読]
【40790】Re:オートフィルタの解除 福神漬 06/7/24(月) 12:19 発言[未読]
【40791】Re:オートフィルタの解除 福神漬 06/7/24(月) 12:23 発言[未読]
【40859】Re:オートフィルタの解除 Statis 06/7/25(火) 12:58 回答[未読]
【40917】Re:オートフィルタの解除 福神漬 06/7/26(水) 10:05 お礼[未読]
【40928】Re:オートフィルタの解除 Statis 06/7/26(水) 13:53 回答[未読]
【40721】Re:オートフィルタの解除 いなば 06/7/21(金) 13:41 発言[未読]
【40728】Re:オートフィルタの解除 福神漬 06/7/21(金) 15:51 質問[未読]
【40736】Re:オートフィルタの解除 いなば 06/7/21(金) 17:38 発言[未読]

【40716】オートフィルタの解除
質問  福神漬  - 06/7/21(金) 12:09 -

引用なし
パスワード
   オートフィルタで抽出したデータを別シートに転記するマクロを作りました。
AutoFilterMode = Falseとしているのですが、管理表マスターのオートフィルタは
解除されません。
解除させるにはどうすればいいですか?
よろしくお願い致します。

Sub Macro1()
  Dim r As Long
  Dim WS As Worksheet
  Set WS = Worksheets("管理表マスター")
  r = Worksheets("管理表マスター").Range("E65536").End(xlUp).Row
  If AutoFilterMode = False Then
    With Worksheets("管理表マスター").Range("K3:AE" & r)
    .AutoFilter Field:=21, Criteria1:="="
    .AutoFilter Field:=1, Criteria1:=">2005/10/1", Operator:=xlAnd
    .AutoFilter Field:=3, Criteria1:="ユーザー"
    End With
      Sheets("管理表マスター").Range("B513:F" & r).Copy
      With Sheets("Sheet1").Range("B5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("H537:I" & r).Copy
      With Sheets("Sheet1").Range("G5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("H513:I" & r).Copy
      With Sheets("Sheet1").Range("G5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("K573:K" & r).Copy
      With Sheets("Sheet1").Range("I5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("K513:K" & r).Copy
      With Sheets("Sheet1").Range("I5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("M513:N" & r).Copy
      With Sheets("Sheet1").Range("J5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("W513:W" & r).Copy
      With Sheets("Sheet1").Range("L5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Select
      Application.CutCopyMode = False
      AutoFilterMode = False
  End If
End Sub

【40718】Re:オートフィルタの解除
回答  Jaka  - 06/7/21(金) 12:33 -

引用なし
パスワード
   Sheets("管理表マスター").AutoFilterMode = False

【40719】Re:オートフィルタの解除
発言  Statis  - 06/7/21(金) 12:34 -

引用なし
パスワード
   こんにちは
コードを見て同じセルに貼り付けているようですが
「Sheet1のG5やI5」です

参考までに。

Dim r As Long
  Dim WS As Worksheet
  
  Set WS = Worksheets("Sheet1")
  With Worksheets("管理表マスター")
     r = .Range("E65536").End(xlUp).Row
     If .AutoFilterMode = False Then
      .Range("K3:AE3").AutoFilter
     End If
    .Range("K3:AE" & r).AutoFilter Field:=21, Criteria1:="="
    .Range("K3:AE" & r).AutoFilter Field:=1, Criteria1:=">2005/10/1", Operator:=xlAnd
    .Range("K3:AE" & r).AutoFilter Field:=3, Criteria1:="ユーザー"
    .Range("B513:F" & r).Copy
     WS.Range("B5").PasteSpecial xlValues
    .Range("H537:I" & r).Copy
     WS.Range("G5").PasteSpecial xlValues
    
     '以降コード省略
    
     Application.CutCopyMode = False
    .AutoFilterMode = False
  End With
  Set WS = Nothing

【40721】Re:オートフィルタの解除
発言  いなば  - 06/7/21(金) 13:41 -

引用なし
パスワード
   ▼福神漬 さん:
>オートフィルタで抽出したデータを別シートに転記するマクロを作りました。
>AutoFilterMode = Falseとしているのですが、管理表マスターのオートフィルタは
>解除されません。
>解除させるにはどうすればいいですか?
>よろしくお願い致します。
>
>Sub Macro1()
>  Dim r As Long
>  Dim WS As Worksheet
>  Set WS = Worksheets("管理表マスター")
>  r = Worksheets("管理表マスター").Range("E65536").End(xlUp).Row
>  If AutoFilterMode = False Then
>    With Worksheets("管理表マスター").Range("K3:AE" & r)
>    .AutoFilter Field:=21, Criteria1:="="
>    .AutoFilter Field:=1, Criteria1:=">2005/10/1", Operator:=xlAnd
>    .AutoFilter Field:=3, Criteria1:="ユーザー"
>    End With
>      Sheets("管理表マスター").Range("B513:F" & r).Copy
>      With Sheets("Sheet1").Range("B5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("H537:I" & r).Copy
>      With Sheets("Sheet1").Range("G5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("H513:I" & r).Copy
>      With Sheets("Sheet1").Range("G5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("K573:K" & r).Copy
>      With Sheets("Sheet1").Range("I5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("K513:K" & r).Copy
>      With Sheets("Sheet1").Range("I5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("M513:N" & r).Copy
>      With Sheets("Sheet1").Range("J5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Range("W513:W" & r).Copy
>      With Sheets("Sheet1").Range("L5")
>      .PasteSpecial xlValues
>      End With
>      Sheets("管理表マスター").Select
>      Application.CutCopyMode = False
>      AutoFilterMode = False
>  End If
>End Sub

コードの内容を詳しく見てませんが、
If AutoFilterMode = False Then
これだと、ActiveSheetに対しての命令になりませんか?

ActiveSheetがなにか分かりませんが、管理表マスターがActiveでないとしたら、Worksheetオブジェクトが指定されてないからだと思います。

面倒でも親オブジェクトを省略しないとか、規定のValueプロパティを省略しないとかけっこう大事ですよね。

まったく見当違いのことでしたらゴメンなさい。

【40722】Re:オートフィルタの解除
お礼  福神漬  - 06/7/21(金) 13:49 -

引用なし
パスワード
   Jakaさま、Statisさま
いつもありがとうございます。
コードの検証までして頂き、ありがとうございました。
確かにダブってました(^▽^;)
以下のようにコードを変更したら、うまくいきました。
このコードで問題ないでしょうか?
もし、お気づきの点がありましたら、ご指摘下さい。
よろしくお願い致します。

Sub Macro1()
  Dim r As Long
  Dim WS As Worksheet
  Set WS = Worksheets("管理表マスター")
  r = Worksheets("管理表マスター").Range("E65536").End(xlUp).Row
  If AutoFilterMode = False Then
    With Worksheets("管理表マスター").Range("K3:AE" & r)
    .AutoFilter Field:=21, Criteria1:="="
    .AutoFilter Field:=1, Criteria1:=">2005/10/1", Operator:=xlAnd
    .AutoFilter Field:=3, Criteria1:="ユーザー"
    End With
      WS.Range("B513:F" & r).Copy
      With Sheets("Sheet1").Range("B5")
      .PasteSpecial xlValues
      End With
      WS.Range("H513:I" & r).Copy
      With Sheets("Sheet1").Range("G5")
      .PasteSpecial xlValues
      End With
      WS.Range("K513:K" & r).Copy
      With Sheets("Sheet1").Range("I5")
      .PasteSpecial xlValues
      End With
      WS.Range("M513:N" & r).Copy
      With Sheets("Sheet1").Range("J5")
      .PasteSpecial xlValues
      End With
      Sheets("管理表マスター").Range("W513:W" & r).Copy
      With Sheets("Sheet1").Range("L5")
      .PasteSpecial xlValues
      End With
      WS.Application.CutCopyMode = False
      WS.AutoFilterMode = False
  End If
End Sub

【40728】Re:オートフィルタの解除
質問  福神漬  - 06/7/21(金) 15:51 -

引用なし
パスワード
   いなばさん、ご指摘ありがとうございます。
VBAは只今勉強中の身なのですが、ご指摘頂いた

>面倒でも親オブジェクトを省略しないとか、…と言うのは、
activesheetがsheet1の状態でマクロを実行すると、オートフィルタが実行されない?
と言うことでしょうか?
以前、作ったものを参考に今回作ってみました。
もう少し、詳しく教えて頂けると幸いです。

因みに、
>面倒でも親オブジェクトを省略しないとか、…するには↓のようにすればいいでしょうか?
If WS.AutoFilterMode = False Then

お手数をお掛けして申し訳ありませんが、ご教授よろしくお願い致します。

【40736】Re:オートフィルタの解除
発言  いなば  - 06/7/21(金) 17:38 -

引用なし
パスワード
   ▼福神漬 さん:

ゴメンなさい。まったく見当違いのことを書いてました。
本当にゴメンなさい。

【40748】Re:オートフィルタの解除
回答  Statis  - 06/7/22(土) 8:43 -

引用なし
パスワード
   こんにちは
私のコードを参考にしましたか???
でコードを見て感じた事ですが。
マスターシートにオートフィルタが設定していたら処理はしないのかな?
普通はオートフィルタの設定が如何であれ抽出してコピーするのが目的でコードを
作ると思いますが。
なので、設定しているかで処理をするしないでなく、設定していなければ設定して
処理ようにしました。

Withステートメント使い方はあっているのですが「Sheet1」でなく「マスター」で
使った方が良いような気がします。

一応参考までに。

Sub Macro1()
  Dim r As Long
  Dim WS As Worksheet
  Set WS = Worksheets("Sheet1")
  With Worksheets("管理表マスター")
     r = .Range("E65536").End(xlUp).Row
     If .AutoFilterMode = False Then
      .Range("K3:AE3").AutoFilter
     End If
     .Range("K3:AE" & r).AutoFilter Field:=21, Criteria1:="="
     .Range("K3:AE" & r).AutoFilter Field:=1, Criteria1:=">2005/10/1", Operator:=xlAnd
     .Range("K3:AE" & r).AutoFilter Field:=3, Criteria1:="ユーザー"
     .Range("B513:F" & r).Copy
     WS.Range("B5").PasteSpecial xlValues
     .Range("H513:I" & r).Copy
     WS.Range("G5").PasteSpecial xlValues
     .Range("K513:K" & r).Copy
     WS.Range("I5").PasteSpecial xlValues
     .Range("M513:N" & r).Copy
     WS.Range("J5").PasteSpecial xlValues
     .Range("W513:W" & r).Copy
     WS.Range("L5").PasteSpecial xlValues
     WS.Application.CutCopyMode = False
     .AutoFilterMode = False
  End With
  Set WS = Nothing
End Sub

【40790】Re:オートフィルタの解除
発言  福神漬  - 06/7/24(月) 12:19 -

引用なし
パスワード
   うまく説明ができていなかったようで、すみませんでした。
初めに質問をしたオートフィルタの解除については抽出が終わった後の
オートフィルタの解除について、質問したつもりでした。
ですので、Statisさんにご教示頂いたコードを参考にしたつもりでいたのですが…。
いなばさんからご指摘頂いた点ですが、意味がわからず(ごめんなさい)見当違いなのかも?

Withの使い方についてですが、sheet1ではなくマスターで…との事でしたが、
そうする事の意味を教えて頂ければ幸いです。
Withを抽出先で使用しているために、コードの簡略化ができないのでしょうか?
Statisさんのコードを参考に以下のようにコードを書きました。
コードの検証も併せてお願いできればと思います。
お手数ばかり、お掛け致しますが引き続きご教示お願い致します。

【40791】Re:オートフィルタの解除
発言  福神漬  - 06/7/24(月) 12:23 -

引用なし
パスワード
   コードを貼り付け忘れたのでこちらに貼ります。

Sub Macro1()
  Dim r1 As Long
  Dim r2 As Long
  Dim WS As Worksheet
  r2 = Sheets("申請書未返送リスト(2005.10.01以降)").Range("B65536").End(xlUp).Row
  Set WS = Sheets("申請書未返送リスト(2005.10.01以降)")
  With Sheets("管理表マスター")
    r1 = .Range("E65536").End(xlUp).Row
    If r2 > 6 Then
    Worksheets("申請書未返送リスト(2005.10.01以降)").Range("B5:K" & r1).ClearContents
    End If
    If .AutoFilterMode = False Then
      .Range("B3:AE3").AutoFilter
    End If
    .Range("B3:AE" & r1).AutoFilter Field:=1, Criteria1:="製品出荷"
    .Range("B3:AE" & r1).AutoFilter Field:=30, Criteria1:="="
    .Range("B3:AE" & r1).AutoFilter Field:=10, Criteria1:=">2005/10/1", Operator:=xlAnd
    .Range("B3:AE" & r1).AutoFilter Field:=12, Criteria1:="ユーザー"
    .Range("B4:F" & r1).Copy
    WS.Range("B5").PasteSpecial xlValues
    .Range("H4:I" & r1).Copy
    WS.Range("G5").PasteSpecial xlValues
    .Range("K4:K" & r1).Copy
    WS.Range("I5").PasteSpecial xlValues
    .Range("N5:N" & r1).Copy
    WS.Range("J5").PasteSpecial xlValues
    .Range("W4:W" & r1).Copy
    WS.Range("K5").PasteSpecial xlValues
    WS.Application.CutCopyMode = False
    .AutoFilterMode = False
  End With
  Set WS = Nothing
  With Sheets("申請書未返送リスト(2005.10.01以降)").Range("B5:K" & r2)
  .Sort Key1:=Range("G5"), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  End With
End Sub

【40859】Re:オートフィルタの解除
回答  Statis  - 06/7/25(火) 12:58 -

引用なし
パスワード
   こんにちは

Withステートメントを使う事で同じ内容を何回も書く必要がなくなります。
下記のコードの場合は「Sheets("管理表マスター")」です
せっかく「Setステートメント」でセットしたのに
なぜ、「Sheets("申請書未返送リスト(2005.10.01以降)")」何回も
記載するのでしょうか?意味がありませんよ
見比べてみてください。

こんな感じです。

Sub Macro1()
  Dim r1 As Long
  Dim r2 As Long
  Dim WS As Worksheet
  
  Set WS = Sheets("申請書未返送リスト(2005.10.01以降)")
  r2 = WS.Range("B65536").End(xlUp).Row
  
  With Sheets("管理表マスター")
    r1 = .Range("E65536").End(xlUp).Row
    If r2 > 6 Then
      WS.Range("B5:K" & r1).ClearContents
    End If
    If .AutoFilterMode = False Then
      .Range("B3:AE3").AutoFilter
    End If
    .Range("B3:AE" & r1).AutoFilter Field:=1, Criteria1:="製品出荷"
    .Range("B3:AE" & r1).AutoFilter Field:=30, Criteria1:="="
    .Range("B3:AE" & r1).AutoFilter Field:=10, Criteria1:=">2005/10/1", Operator:=xlAnd
    .Range("B3:AE" & r1).AutoFilter Field:=12, Criteria1:="ユーザー"
    .Range("B4:F" & r1).Copy
    WS.Range("B5").PasteSpecial xlValues
    .Range("H4:I" & r1).Copy
    WS.Range("G5").PasteSpecial xlValues
    .Range("K4:K" & r1).Copy
    WS.Range("I5").PasteSpecial xlValues
    .Range("N5:N" & r1).Copy
    WS.Range("J5").PasteSpecial xlValues
    .Range("W4:W" & r1).Copy
    WS.Range("K5").PasteSpecial xlValues
    WS.Application.CutCopyMode = False
    .AutoFilterMode = False
  End With
  
  WS.Range("B5:K" & r2).Sort Key1:=WS.Range("G5"), Order1:=xlAscending, Header:=xlNo, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
    :=xlPinYin, DataOption1:=xlSortNormal
  
  Set WS = Nothing
End Sub

【40917】Re:オートフィルタの解除
お礼  福神漬  - 06/7/26(水) 10:05 -

引用なし
パスワード
   ご解説、ありがとうございます。
確かに、「Sheets("申請書未返送リスト(2005.10.01以降)")」を何度も繰り返していましたね。
せっかく、教えて頂いた事を無駄にしてしまってすみませんでした。
コードを見て、理解していない証拠ですね。
これからは、もっとよく見てコードを書くように気をつけます。
それから、withの使い方についてもご解説ありがとうございます。
1つ質問なのですが、例えば、2つの抽出元から1つの抽出先へデータを転記したい場合は、
withはどちらで使った方がいいですか?
いまいち、withの使い方を理解していないのでStatisさんなりのご意見を
お教え頂けると幸いです。

【40928】Re:オートフィルタの解除
回答  Statis  - 06/7/26(水) 13:53 -

引用なし
パスワード
   こんにちは

>withの使い方についてもご解説ありがとうございます。
>1つ質問なのですが、例えば、2つの抽出元から1つの抽出先へデータを転記したい>場合は、withはどちらで使った方がいいですか?

これは好みで違いますね。
シーとでしたら処理を多くするシートの方に使います。

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