[[20120827161310]] 『オートフィルタ』(keisuke---2012) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタ』(keisuke---2012)
Excel2003、WindowsXPです。

外部データ取り込みで、全て文字列として取り込んだデータにオートフィルタをかけ、
可視できるデータのみを別のシートにコピーしたいのですが、
「rangeクラスのcopyメソッドが失敗しました」と表示されコピーすることが出来ません。

列はAA列まであり、行の最終は1000行前後です。

Sub 新規のチェック()

    Dim ws1 As Worksheet
    Dim ws5 As Worksheet

    Set ws1 = Sheets("データ")
    Set ws5 = Sheets("新規A")

    ws5.Cells.Delete Shift:=xlUp    

    With ws1.Range("A1").CurrentRegion
        .AutoFilter Field:=26, Criteria1:="新規"
        .SpecialCells(xlCellTypeVisible).Copy Destination:=ws5.Range("A1")
        .AutoFilter
    End With

End Sub

これではSpecialCell〜の所でデバックしてしまいます。
そこで、一度、マクロの記録をしてみました。

Sub Macro5()

    Sheets("新規A").Select
    Cells.Select
    Selection.Delete Shift:=xlUp
    Sheets("データ").Select
    Range("A1").Select
    Selection.CurrentRegion.Select
    Selection.AutoFilter

    Selection.AutoFilter Field:=26, Criteria1:="新規"
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Sheets("データ").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
End Sub

コピーしたデータを貼り付けたはずなのに、ペーストが記録されていません
なんだか、このあたりが原因ぽいので、色々調べたのですが、全然わかりませんでした。

だれか教えて下さい。お願いします。

外部データの取り込みや、データの量が原因でできない場合、できる方法も
教えて欲しいです。宜しくお願い致します。


 >コピーしたデータを貼り付けたはずなのに、ペーストが記録されていません 
 >なんだか、このあたりが原因ぽいので、色々調べたのですが、全然わかりませんでした。 

 それは考えられないなぁ。単に、ペーストの操作をやらなかったとか?

 それより、マクロ記録で、ほんとに SpecialCells が記録された?
 されないと思うけどね。

 1000行前後でAA列までなら量的にも問題ないとおもうし。

 ・まず、オートフィルタの設定そのものは、意図した領域に設定されている?
  つまり、1行目のA列からAA列までがタイトル行で、そこに▼がついている?
  .AutoFilter 実行でオートフィルターが解除されるので、そこにブレークポイントを設定して
  そこで止まった時のシートの状況を確認してはいかが?その時の抽出状況も。

 コード自体は、改善すべきところも多いけど、正常なオートフィルター領域なら、必ずタイトル行は表示されているので
 SpecialCells(xlCellTypeVisible) でエラーになるとは考えにくいね。

 追記)このマクロを実行する時点で、オートフィルターは設定済み?
    それとも、マクロで設定しようとしている?

 (ぶらっと)


 こんにちは〜

 > .SpecialCells(xlCellTypeVisible).Copy Destination:=ws5.Range("A1")
 とくに「可視セルだけCopy」と指定しなくても、コピーすれば、可視セルだけ
 が コピーされます。でも、.SpecialCells(xlCellTypeVisible) を付けてもまちがいじゃ
 ないので、上記構文でいいと思いますよ。
 マクロの記録で 貼り付けのところが記録されないとのこと。
 こちらでもやってみました。結果、ちゃんと記録されています。

 Sub Macro2()
 ' Macro recorded 2012/8/27 by kanabun

    Range("A1").Select
    Selection.CurrentRegion.Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Selection.AutoFilter Field:=2, Criteria1:="B"
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
 End Sub

 上記をマクロ編集すると、以下のようです。
 Sub test1()
  With Worksheets("Sheet1")
      .AutoFilterMode = False
      With .Range("A1").CurrentRegion
          .AutoFilter Field:=2, Criteria1:="B"
          .Copy Worksheets(3).Cells(1)
          .AutoFilter
      End With
  End With
 End Sub

   (kanabun)


ぷらっとさん早速のご連絡ありがとうございます。

ペーストの操作は何度も確認致しました。マクロを記録している時、マクロの記録にペーストは
記録されませんでしたが、データはペーストされていましたので、操作忘れでは絶対にありません。

今、再度確認してみましたが、編集のジャンプより可視セルを選ぶとSpecialCellsが記録されました。

量的にも問題ないと思っています。

オートフィルタの設定は意図した領域(タイトルである行1行目)で間違いありません。
▼もきちんとついております。
F8でひとつひとつ確認しながらしましたがオートフィルタの設定に問題はございませんでした。

エラー(デバッグ)
rangeクラスのcopyメソッドが失敗しました というのはどうしてでるのでしょうか?

このマクロを実行する時点ではオートフィルタは設定していません。マクロ中で設定しています。


kanabun さん 早速のご連絡ありがとうございます。

頂いたマクロを、一部変更した、下記マクロで実行してみましたが、

★印のところで、
実行時エラー 1004
worksheet クラスの paste メソッドが失敗しました。
とエラーしてしまいます。

 Sub Macro2()
 ' Macro recorded 2012/8/27 by kanabun

    Range("A1").Select
    Selection.CurrentRegion.Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Selection.AutoFilter Field:=26, Criteria1:="新規"
    Selection.Copy
    Sheets("新規A").Select
    Range("A1").Select
    ActiveSheet.Paste ★
    Sheets("データ").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
 End Sub

外部データを取り込んでいる点については如何でしょうか??関係あるのでしょうか??


 > 外部データを取り込んでいる点については如何でしょうか??関係あるのでしょうか??

 うん、関係あるかな、と思って CSVファイルをインポートしてそのまま(接続を切断せずに)
 AutoFilterかけて別シートにコピぺまでしてみました。
 結果ですが、こちらでは、とくに問題なくコピペできました。
 (↓マクロ記録です)

 Sub Macro3()
 ' Macro recorded 2012/8/27 by kanabun
 '
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;H:\(Data)\FData\F_Data.Csv", Destination:=Range("A1"))
        .Name = "F_Data"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 932
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 2, 1, 1, 1, 1, 1, 5, 1, 5)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Selection.CurrentRegion.Select
    Sheets("Sheet1").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=4, Criteria1:=">=50", Operator:=xlAnd
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste
 End Sub

  (kanabun)


kanabunさん、ご連絡ありがとうございます

わざわざ、ありがとうございます!
問題なさそうですね・・・う〜んますます解らなくなってきました・・・

何か他に原因がありそうですね・・・もうすこし悩んでみます(T_T)


 >編集のジャンプより可視セルを選ぶとSpecialCellsが記録されました。 

 あぁ、これでやったんだ。

 kanabunさんからのコメントにもあるけど、フィルターを掛けた状態でセルをすべて選んで
 Ctrl/c.別シートのA1を選択して Ctrl/v。これで、抽出されたものだけがペーストされるし、
 このほうが一般的かな?

 (ぶらっと)


 状況からすると、こちらに似た雰囲気が有ると思いますが。。。

 Excel 2003 ブックでフィルタ処理されたデータのコピーと貼り付けをプログラムから実行しようとすると、
 エラー メッセージ "実行時エラー '1004'" が表示される 
http://support.microsoft.com/kb/905164/ja

 (HANA)

HANAさんご連絡ありがとうございます。

リンク先のページは確認済みです。もちろん記載されているマクロも実行してみましたが駄目でした。
一晩考えたのですが原因は解らずじまいです。一度マイクロソフトの相談窓口に相談してみます。


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.