1

少し調整するまでは機能していたコード行を書きました。問題は、私の調整がエラーをスローする理由がわからないことです:実行時エラー1004、このコマンドには少なくとも2行のソースデータが必要です....

コードの作業行:

Range("E1", Range("E65536").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

壊れたコード: (LastRow は長い変数です)

Range("E1", Range("E" & LastRow).End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
4

3 に答える 3

2

私が生成した偽のデータセットで、コードの両方の例でエラーが発生します。どの範囲が選択されているかを把握しようとするときに、時々役立つトリックであることがわかったのは、activateメソッドを使用することです。

これを試して

Range("E1", Range("E65536").End(xlUp)).Activate

何が選択されるかを確認します。データがどのように表示されるかわかりません。また、どの範囲を選択しようとしているのかよくわかりませんが、セルE65536は実際には空なので、Range( "E65536")。End(xlUp )は、実質的にRange( "E1")。End(xlDown)と同じです。コードが機能しているので、選択されるのは複数行の範囲になると思います。

次は...

Range("E1", Range("E" & LastRow).End(xlUp)).Activate

ブックを見て、何が選択されるかを確認します。すべてのコードを見ずにLastRowをどのように定義しているかはわかりませんが、選択されるのは1つのセルだけだと思います。率直に言って、最善の解決策は(実際に、E1から開始して、すべての行が空になるまで取得したい場合)、これを行うことだと思います。

Range("E1", Range("E1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

これが希望どおりでない場合は、希望する範囲の種類を明確にしてください。そうすれば、より適切な作業を提供できる可能性があります。幸運を!

于 2012-06-05T20:41:44.360 に答える
2

試してみてくださいRange("E1", "E" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

.End(xlUp)すでに最後の行を参照しているときに使用していたようです。

于 2012-06-05T20:37:19.903 に答える
2

一生コメント リンクを見つけることができないので、これがコメントではないことをお詫びします。ExcelはそのxlUpを使用してデータの最後の行を見つけていると思います(データの最後の行と実際の最後の行--65536の間のすべての空白行を取得するわけではありません)。あなたの調整では、すでに最後の行から始めているか、知っているように見えるので、xlUp を使用する必要があるかどうかはわかりません。2 番目の例では、「.End(xlUp)」を取り出すことができると思います。それはうまくいくでしょうか?その場合、参照を次のように短縮することもできます。

Range("E1:E" & LastRow).AdvancedFilter...

それが役立つかどうか、または誤解している場合はお知らせください。

于 2012-06-05T20:37:38.257 に答える