Excel VBA質問箱 IV

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

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


12394 / 13646 ツリー ←次へ | 前へ→

【10712】抽出について ギン 04/2/9(月) 20:24 質問
【10714】Re:抽出について ichinose 04/2/9(月) 21:07 回答
【10738】抽出について ギン 04/2/10(火) 19:26 質問
【10739】Re:抽出について ichinose 04/2/10(火) 21:33 発言
【10742】有難うございました。 ギン 04/2/11(水) 10:22 お礼

【10712】抽出について
質問  ギン  - 04/2/9(月) 20:24 -

引用なし
パスワード
   またまた質問させて下さい。
抽出先のワークシートに抽出条件と位置を指定して
データベースのワークシートから抽出しようとして
まず記録マクロを行いました。(フィルタオプション)

Sub Macro1()
  Sheets("PKG名無しリスト").Select’抽出先ワークシート
  Range("A5:C100").Delete’前の抽出データを削除
  Sheets("次年度").Range("A1:V861").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("A4:C4"), _    Unique:=True
End Sub
とするとちゃんと抽出してくれます。
しかし、データ行が変わるので次のように書き換えましたがエラーになってしまいます。
Sub test()
  Dim rEnd As Integer
  Dim cEnd As Integer
  Sheets("次年度").Activate
  rEnd = Cells(65536, 1).End(xlUp).Row
  cEnd = Cells(1, 1).End(xlToRight).Column
  
  Sheets("PKG名無しリスト").Select
  Range("A5:C100").Delete
  
  Sheets("次年度").Range(Cells(r, 1), Cells(rEnd, cEnd)).AdvancedFilter _ Action:=xlFilterCopy, CriteriaRange:=Range("A1:C2"), _
     CopyToRange:=Range("A4:C4"), Unique:=True
End Sub

rengeの指定の仕方が悪いのでしょうか?
長々書いてしまい申し訳ありませんが宜しく御願い致します。

【10714】Re:抽出について
回答  ichinose  - 04/2/9(月) 21:07 -

引用なし
パスワード
   ▼ギン さん:
こんばんは。

>またまた質問させて下さい。
>抽出先のワークシートに抽出条件と位置を指定して
>データベースのワークシートから抽出しようとして
>まず記録マクロを行いました。(フィルタオプション)
>
>Sub Macro1()
>  Sheets("PKG名無しリスト").Select’抽出先ワークシート
>  Range("A5:C100").Delete’前の抽出データを削除
>  Sheets("次年度").Range("A1:V861").AdvancedFilter Action:=xlFilterCopy, _
>    CriteriaRange:=Range("A1:C2"), CopyToRange:=Range("A4:C4"), _    Unique:=True
>End Sub
>とするとちゃんと抽出してくれます。
>しかし、データ行が変わるので次のように書き換えましたがエラーになってしまいます。
今度は、エラーの個所とエラーの内容も教えて下さいね!!

>Sub test()
>  Dim rEnd As Integer
>  Dim cEnd As Integer
>  Sheets("次年度").Activate
>  rEnd = Cells(65536, 1).End(xlUp).Row
>  cEnd = Cells(1, 1).End(xlToRight).Column
>  
>  Sheets("PKG名無しリスト").Select
>  Range("A5:C100").Delete
>  
'  Cells(r, 1), Cells(rEnd, cEnd)のいづれもプロパテイです。
'  ということは、オブジェクトがあるはずですよね。
'  省略しているので、この場合、Sheets("PKG名無しリスト")になってしまいます。
'  よって、はっきり明示してあげる必要があると思います。   
  with Sheets("次年度")
    .Range(.Cells(r, 1),.Cells(rEnd, cEnd)).AdvancedFilter _
     Action:=xlFilterCopy, CriteriaRange:=Range("A1:C2"), _
     CopyToRange:=Range("A4:C4"), Unique:=True
    end with   
>End Sub
>
>rengeの指定の仕方が悪いのでしょうか?
>長々書いてしまい申し訳ありませんが宜しく御願い致します。

確認して下さい。

【10738】抽出について
質問  ギン  - 04/2/10(火) 19:26 -

引用なし
パスワード
   ichinose さん

こんばんは。

回答ありがとうございました。
コピーして出来ました。

Range(.Cells(r, 1),.Cells(rEnd, cEnd))   
このような使い方は初めてです。  
これだとオブジェクトになるのでしょうか?
勉強不足ですみませんが詳しく教えていただけないでしょうか。

【10739】Re:抽出について
発言  ichinose  - 04/2/10(火) 21:33 -

引用なし
パスワード
   ▼ギン さん:
こんばんは。


>Range(.Cells(r, 1),.Cells(rEnd, cEnd))   
>このような使い方は初めてです。  
>これだとオブジェクトになるのでしょうか?
>勉強不足ですみませんが詳しく教えていただけないでしょうか。
前後のWithステートメントとEnd Withステートメントによって、
上記の記述ができるということなんですよ。
Withを使用しなければ、

Sheets("次年度").Range(Sheets("次年度").Cells(r, 1),Sheets("次年度").Cells(rEnd, cEnd))

と記述しなければなりません。
Sheets("次年度")が何度も出てきて記述も面倒ですよね!!

Withステートメントについては、Helpを参照して下さい。
詳しく解説が出ていましたよ。

【10742】有難うございました。
お礼  ギン  - 04/2/11(水) 10:22 -

引用なし
パスワード
   ichinose さん

こんにちは。

いろいろ教えてくださり
感謝いたします。

>Withステートメントについては、Helpを参照して下さい。
>詳しく解説が出ていましたよ。

範囲選択でもwithステートメントが使えるとは
思いませんでした。
また一つ勉強になりました。

有難うございました。

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