[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタ』(keisuke---2012)
外部データ取り込みで、全て文字列として取り込んだデータにオートフィルタをかけ、
可視できるデータのみを別のシートにコピーしたいのですが、
「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メソッドが失敗しました というのはどうしてでるのでしょうか?
このマクロを実行する時点ではオートフィルタは設定していません。マクロ中で設定しています。
頂いたマクロを、一部変更した、下記マクロで実行してみましたが、
★印のところで、
実行時エラー 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)
わざわざ、ありがとうございます!
問題なさそうですね・・・う〜んますます解らなくなってきました・・・
何か他に原因がありそうですね・・・もうすこし悩んでみます(T_T)
>編集のジャンプより可視セルを選ぶとSpecialCellsが記録されました。
あぁ、これでやったんだ。
kanabunさんからのコメントにもあるけど、フィルターを掛けた状態でセルをすべて選んで Ctrl/c.別シートのA1を選択して Ctrl/v。これで、抽出されたものだけがペーストされるし、 このほうが一般的かな?
(ぶらっと)
状況からすると、こちらに似た雰囲気が有ると思いますが。。。
Excel 2003 ブックでフィルタ処理されたデータのコピーと貼り付けをプログラムから実行しようとすると、 エラー メッセージ "実行時エラー '1004'" が表示される http://support.microsoft.com/kb/905164/ja
(HANA)
リンク先のページは確認済みです。もちろん記載されているマクロも実行してみましたが駄目でした。
一晩考えたのですが原因は解らずじまいです。一度マイクロソフトの相談窓口に相談してみます。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.