Excel VBA質問箱 IV

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

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


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

【77655】オートフィルターについて 15/11/18(水) 14:22 質問[未読]
【77660】Re:オートフィルターについて γ 15/11/18(水) 20:48 発言[未読]
【77661】Re:オートフィルターについて 15/11/18(水) 22:51 お礼[未読]
【77665】Re:オートフィルターについて β 15/11/20(金) 9:01 発言[未読]
【77667】Re:オートフィルターについて 15/11/20(金) 23:42 お礼[未読]
【77668】Re:オートフィルターについて 15/11/21(土) 8:18 質問[未読]
【77669】Re:オートフィルターについて γ 15/11/21(土) 9:22 発言[未読]
【77671】Re:オートフィルターについて 15/11/21(土) 17:28 お礼[未読]
【77670】Re:オートフィルターについて β 15/11/21(土) 9:39 発言[未読]
【77672】Re:オートフィルターについて 15/11/21(土) 17:30 お礼[未読]

【77655】オートフィルターについて
質問   E-MAIL  - 15/11/18(水) 14:22 -

引用なし
パスワード
   初めまして。
マクロ初心者です。
「マクロで記録」を使ってマクロを作ったのですが、

Sub データ取得()
  
  Cells.Select
  Selection.Copy
  Sheets("抽出").Select
  Range("A1").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Range("I8").Select
  Application.CutCopyMode = False
  Selection.AutoFilter
  Selection.AutoFilter Field:=9, Criteria1:="=4", Operator:=xlAnd
  Range("A1032").Select
  Range(Selection, Selection.End(xlToRight)).Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlDown)).Select
  ActiveWindow.SmallScroll Down:=-33
  ActiveWindow.ScrollRow = 1
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy
  Application.CutCopyMode = False
  Selection.ClearContents
  Selection.AutoFilter Field:=9


”抽出”シートの8行目に項目が並んでいます。
そして、I列で、オートフィルタで「4以外」を抽出したのですが
時々4のデータが混在されてしまいます。

VBAでは”〜ではない”の場合、
Criteria1:="<>4"
とするようなので、修正してみたら、ますます多くの4のデータが
混在してしまいました。

どうしたら、4を除くデータだけを抽出できるのでしょうか。。

また、
Selection.AutoFilter Field:=9, Criteria1:="=4", Operator:=xlAnd
  Range("A1032").Select

A1032までではなく、その列全部を選択するにはどうすれば良いですか?

どうか、ご教授ください。よろしくお願いいたします。

【77660】Re:オートフィルターについて
発言  γ  - 15/11/18(水) 20:48 -

引用なし
パスワード
   >VBAでは”〜ではない”の場合、
>Criteria1:="<>4"
>とするようなので、
>修正してみたら、ますます多くの4のデータが
>混在してしまいました。

Criteria1:="<>4"
で問題ないはずです。
実際に動作させたコードを提示してください。

>A1032までではなく、その列全部を選択するにはどうすれば良いですか?
マクロ記録を取ってみて下さい。
  Columns("A:A").Select
などとなりませんか?
なお、選択する目的は何ですか?
そのあとの作業に使うのであれば、たぶん選択する必要はないはずです。

【77661】Re:オートフィルターについて
お礼    - 15/11/18(水) 22:51 -

引用なし
パスワード
   ▼γ さん:早速のご回答有難うございます!

休暇を取ってしまったので
出社したら、すぐに試そうと思います。

取り急ぎ、お礼まで。

【77665】Re:オートフィルターについて
発言  β  - 15/11/20(金) 9:01 -

引用なし
パスワード
   ▼古 さん:

γさんも指摘しておられますが、「選択」して、何をしたいのか、その目的を説明されれば
その目的に合致したより良い処理案も提示できるかもしれません。

もう1つ、どこかのシートの内容を抽出シートにコピペして、そこでオートフィルターで抽出ですね。
もしかして、元データから抽出した結果を、抽出シートに転記したいということではないのですか?

また、元データのレイアウト、特に 7行目がどうなっているのか、それを説明いただけると
より具体的に検討することができるかと。

【77667】Re:オートフィルターについて
お礼    - 15/11/20(金) 23:42 -

引用なし
パスワード
   ▼β さん:
お返事有難うございます。
よくよく自分で見てみると、A1032セルを選択する必要は
ありませんでした。(マクロ記録した時は1032行までデータがあったみたいです)
さらに
  Range(Selection, Selection.End(xlToRight)).Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlDown)).Select
で、データ全体を選択してもいますが、この必要はなかったですね。
この全体のデータの中で、I列が”4ではないもの”を抽出したいだけなのに
私は何をしているのでしょう。。。(マクロの記録時に、色々とやってしまったようです。お恥ずかしい限りです)


>もう1つ、どこかのシートの内容を抽出シートにコピペして、そこでオートフィルターで抽出ですね。
>もしかして、元データから抽出した結果を、抽出シートに転記したいということではないのですか?

その通りです。全データSheetがあり、その内容を抽出シートにコピペします。
抽出シート上でI列で”4ではないもの”を抽出します。
全データSheetは、外部からのリンクが複雑に絡んでいるため、直にいじらない方が
良いと思い、抽出シートにコピペしています。


>また、元データのレイアウト、特に 7行目がどうなっているのか、それを説明いただけると
>より具体的に検討することができるかと。

有難うございます。
なので、元データと抽出シートのレイアウトは全く同じです。
7行目はブランクです。
8行目は項目名が入っています。

謎なのは、マクロの記録で”4を含まない”にしたらCriteria1:="=4"と
なったこと。また、それでも4が時々混在することです。
質問文にも書いていますが、
Selection.AutoFilter Field:=9, Criteria1:="<>4"
に修正したら、4のものが大量に抽出されたことです。
もう意味が分かりません。

データの書式が揃っていないのでしょうか・・・

【77668】Re:オートフィルターについて
質問    - 15/11/21(土) 8:18 -

引用なし
パスワード
   ▼γさん、β さん:

お陰様で、原因が分かりました!
なんてバカなんでしょう。
ボタンで一連のマクロを実行していたので操作を忘れていました・・・

I列を”4を含まない”にフィルターで絞った後、
  Range(Selection, Selection.End(xlToRight)).Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.SpecialCells(xlCellTypeVisible).Select
  Selection.Copy

絞ったデータをもう一つのシート(”集約”シート)にコピーしていました。

なので、フィルターに原因があるわけでなく、コピペが原因だったようです。
非表示の分までペーストされていたようです。

調子が良くて申し訳ないですが、質問を変えます。
絞ったデータのみコピペするには、
どう修正すれば良いでしょうか!!
申し訳ありません!

【77669】Re:オートフィルターについて
発言  γ  - 15/11/21(土) 9:22 -

引用なし
パスワード
   横から失礼。

Selection.SpecialCells(xlCellTypeVisible).Select
が、表示されている、つまり可視データに限定する意図だと思いますが、
そこはどう考えていますか?

もっとも、
可視セルにあえて限定しなくても、
フィルタが掛かったセル範囲をそのままコピペイストすると、
Excel側が気を利かせて、可視セルだけを対象に絞ってくれます。
ですから、↓のような書き方で上手くいくはずです。

Worksheets("抽出").AutoFilter.Range.Copy Worksheets("集約").Range("A1")

なお、貼付先に前の作業の結果が残っていると、その上に上書きされますが、
貼付前に、一旦消去しておくと、誤解が生じないでしょう。
そのあたりにも気を配ってください。

【77670】Re:オートフィルターについて
発言  β  - 15/11/21(土) 9:39 -

引用なし
パスワード
   ▼古 さん:

以下は参考コードとして。

SHeet1でオートフィルターをかけて、抽出があった場合、抽出されたものだけをSHeet2にコピーしています。
(抽出がなかった場合にこれを行うと全件コピーされるので、抽出有無をチェックしています)


Sub Test()
  With Sheets("Sheet1")
    .AutoFilterMode = False '念のため解除
    .Range("A8").AutoFilter '再設定
    .AutoFilter.Range.AutoFilter Field:=9, Criteria1:="<>4"
    '実際に抽出があった場合のみ
    If .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
      'オートフィルター領域をコピペすると、抽出部分だけがコピーされる。
      .AutoFilter.Range.Copy Sheets("Sheet2").Range("A8")
    End If
  End With
End Sub

【77671】Re:オートフィルターについて
お礼    - 15/11/21(土) 17:28 -

引用なし
パスワード
   ▼γ さん:
有難うございます。
出社後、即試してみます!
どこに原因があるか、教えて下さって
また、解決法も教えていただき、
有難うございました。

【77672】Re:オートフィルターについて
お礼    - 15/11/21(土) 17:30 -

引用なし
パスワード
   ▼β さん:
素晴らしいです。
大変助かります。
出社後、即試してみます!

γさんと同様に
どこに原因があるか、教えて下さって
また、解決法も教えていただき、
有難うございました。

ここを訪れて良かったです。

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