Excel VBA質問箱 IV

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

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


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

【63343】ループの記述について もん太 09/10/28(水) 17:05 質問[未読]
【63345】Re:ループの記述について Jaka 09/10/28(水) 17:40 発言[未読]
【63347】Re:ループの記述について もん太 09/10/28(水) 22:42 質問[未読]
【63348】Re:ループの記述について もん太 09/10/29(木) 8:58 発言[未読]
【63353】Re:ループの記述について Jaka 09/10/29(木) 10:48 発言[未読]
【63355】Re:ループの記述について もん太 09/10/29(木) 11:09 質問[未読]
【63356】Re:ループの記述について Yuki 09/10/29(木) 11:25 発言[未読]
【63360】Re:ループの記述について もん太 09/10/29(木) 11:51 質問[未読]
【63363】Re:ループの記述について Yuki 09/10/29(木) 12:27 発言[未読]
【63365】Re:ループの記述について もん太 09/10/29(木) 13:39 お礼[未読]
【63358】Re:ループの記述について Jaka 09/10/29(木) 11:35 発言[未読]
【63361】Re:ループの記述について もん太 09/10/29(木) 11:56 発言[未読]

【63343】ループの記述について
質問  もん太  - 09/10/28(水) 17:05 -

引用なし
パスワード
   シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C7」で条件を絞り
シート名「1」に貼り付ける

シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C8」で条件を絞り
シート名「2」に貼り付ける

シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C9」で条件を絞り
シート名「3」に貼り付ける
・・・・・・・・・・・・

といった処理を31回繰り返したいのですが
下記のように記述したら「リソース不足です」と表示されて
うまくいきません。

ループで記述できるのであれば
どのように記述すればよいのでしょうか?
初歩的な質問かもしれませんが教えてください。
宜しくお願いします


  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C7").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("1").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select
  
  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C8").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("2").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select
  
  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C9").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("3").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select

【63345】Re:ループの記述について
発言  Jaka  - 09/10/28(水) 17:40 -

引用なし
パスワード
   全体見てない上、勘だけど。

>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>  :=False, Transpose:=False
  Doevents  '←貼り付けた後に入れてみるとか。

【63347】Re:ループの記述について
質問  もん太  - 09/10/28(水) 22:42 -

引用なし
パスワード
   ▼Jaka さん:
>全体見てない上、勘だけど。
>
>>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>>  :=False, Transpose:=False
>  Doevents  '←貼り付けた後に入れてみるとか。


Jakaさん、回答ありがとうございます(^^)
明日会社で試してみますが、一番最後に Doevents を入れるという事でしょうか?
質問内容の記述をコンパクトにまとめる(ループですか)事は出来ないのでしょうか?初心者なので初歩的な質問かもしれませんが、教えて頂けると助かります。

【63348】Re:ループの記述について
発言  もん太  - 09/10/29(木) 8:58 -

引用なし
パスワード
   ▼もん太 さん:
>▼Jaka さん:
>>全体見てない上、勘だけど。
>>
>>>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>>>  :=False, Transpose:=False
>>  Doevents  '←貼り付けた後に入れてみるとか。
>
>
>Jakaさん、回答ありがとうございます(^^)
>明日会社で試してみますが、一番最後に Doevents を入れるという事でしょうか?
>質問内容の記述をコンパクトにまとめる(ループですか)事は出来ないのでしょうか?初心者なので初歩的な質問かもしれませんが、教えて頂けると助かります。

おはようございます、もん太です。
Doeventsを入れて色々試してみましたが、やはりリソース不足です・・・・。とのコメントが出てしまいました(´・ω・`)

どうしたらよいのでしょうか(w_−;

【63353】Re:ループの記述について
発言  Jaka  - 09/10/29(木) 10:48 -

引用なし
パスワード
   実際にコード動かして確認したわけじゃないけど、
オートフィルタした後に、オートフィルタ全体範囲のサイズを変えると思わぬ事になる。

これと似たような現象??
目安箱の87
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=87;id=FAQ

因みにオートフィルタ範囲は、これで取れます。
Sheets("Sheet1").AutoFilter.Range

この辺りを改善してみては?


ここは、メモリとは関係無いけど、
>  Range("A12:L12").Select
>  Range(Selection, Selection.End(xlDown)).Select
こういった、一食短な書き方は、止めた方がいい。
数年前に同じような書き方を見て「え、こんなのあり?」と、
試してみたけれど、やっぱり使えないじゃん、何考えているんがだか..。
と思った事があります。

また、Selectionとかあいまいにしないで明確に指定した方が良いと思います。

【63355】Re:ループの記述について
質問  もん太  - 09/10/29(木) 11:09 -

引用なし
パスワード
   Jakaさん、たびたびありがとうございます(o*。_。)oペコッ

>これと似たような現象??
>目安箱の87
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=87;id=FAQ
拝見させていただきました。
超初心者ですので、なんとなくしか意味が理解できていません。すみません。

>因みにオートフィルタ範囲は、これで取れます。
>Sheets("Sheet1").AutoFilter.Range
これは、オートフィルタで絞られた全ての結果の値と言う事になるのでしょうか?
オートフィルタをする表がA〜H列まであります。
その中のA〜L列まで取りたいのですがその場合はどうしたらよいのでしょうか。


  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C7").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("1").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select




  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C7").Value, Operator:=xlAnd
  Sheets("あああ").AutoFilter.Range
  Selection.Copy
  Sheets("1").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select

と書き換えてみましたが、動作が止まってしまいました。
「教えて」ばかりですみませんが、どうぞ宜しくお願いします(´・ω・`)

【63356】Re:ループの記述について
発言  Yuki  - 09/10/29(木) 11:25 -

引用なし
パスワード
   ▼もん太 さん:
>オートフィルタをする表がA〜H列まであります。
>その中のA〜L列まで取りたいのですがその場合はどうしたらよいのでしょうか。

A〜L列はA〜H列列より大きいですけど

Sub test()
  Dim i  As Long
  For i = 1 To 31
    With Sheets("あああ")
      .AutoFilterMode = False
      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
        Criteria1:=Sheets("0").Cells(i + 6, 3).Value, Operator:=xlAnd
      With .AutoFilter.Range
        ' 見出し行を外す         8だとH,12だとL(全体の時は無しでよい)
        .Offset(1).Resize(.Rows.Count - 1, 8).Copy Sheets(cStr(i)).Range("B2")
      End With
    End With
  Next
End Sub

【63358】Re:ループの記述について
発言  Jaka  - 09/10/29(木) 11:35 -

引用なし
パスワード
   回答が出ている用ですので、
ここだけ、
>Sheets("あああ").AutoFilter.Range

オートフィルタ状態で(▲のボタンが表示されている状態)
Activesheet.AutoFilter.Range.select
とやってみてください。
オートフィルタの全体範囲の事。

【63360】Re:ループの記述について
質問  もん太  - 09/10/29(木) 11:51 -

引用なし
パスワード
   Yukiさん、回答ありがとうございました。
しかしながら、まだうまくいきません(´・ω・`)

この記述は31回繰り返すのをまとめてくださったものなのですよね?
「あああ」というシートにある表にオートフィルターオプションにて
「カレンダー」というシートにある値を入れて(一個ずつ下にずれます)
抽出した結果を、それぞれ「1」〜「36」という名のシートに貼り付けたいと思っています。

>        Criteria1:=Sheets("0").Cells(i + 6, 3).Value,
ちなみに「シート名」「0」というシートはないのですが
これはどういう意味でしょうか?

>A〜L列はA〜H列列より大きいですけど
すみません(恥)
本当にその通りです。
抽出した結果すべてをコピーで間違いありませんでした。
しかし今回教えていただいた事は次に役立てる事ができそうです。
ありがとうございます。

下記の記述31個を全て消して、
Yukiさんに教えていただいた記述をいれてみました。
「インデックスが有効範囲にありません」というエラーが出ます。

Sub test()
  Dim i  As Long
  For i = 1 To 31
    With Sheets("あああ")
      .AutoFilterMode = False
      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
        Criteria1:=Sheets("0").Cells(i + 6, 3).Value, Operator:=xlAnd
      With .AutoFilter.Range
      End With
    End With
  Next
End Sub

もしよろしければ、またご回答ください。
すみませんが、宜しくお願いします。

最初に書いた記述です↓↓↓
------------------------------------------------------------------
シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C7」で条件を絞り
シート名「1」に貼り付ける

シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C8」で条件を絞り
シート名「2」に貼り付ける

シート名「あああ」にある表から、オートフィルターのオプションにて
シート名「カレンダー」にある、セル「C9」で条件を絞り
シート名「3」に貼り付ける
・・・・・・・・・・・・

といった処理を31回繰り返したいのですが
下記のように記述したら「リソース不足です」と表示されて
うまくいきません。

ループで記述できるのであれば
どのように記述すればよいのでしょうか?
初歩的な質問かもしれませんが教えてください。
宜しくお願いします


  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C7").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("1").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select
  
  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C8").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("2").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select
  
  Sheets("あああ").Select
  Selection.AutoFilter Field:=4, Criteria1:=Sheets("カレンダー").Range("C9").Value, Operator:=xlAnd
  Range("A12:L12").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy
  Sheets("3").Select
  Range("B2").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Range("A1").Select

【63361】Re:ループの記述について
発言  もん太  - 09/10/29(木) 11:56 -

引用なし
パスワード
   ▼Jaka さん:
>回答が出ている用ですので、
>ここだけ、
>>Sheets("あああ").AutoFilter.Range
>
>オートフィルタ状態で(▲のボタンが表示されている状態)
>Activesheet.AutoFilter.Range.select
>とやってみてください。
>オートフィルタの全体範囲の事。

Jakaさん、たびたびありがとうございますm(。_。;))m ペコペコ…

>Activesheet.AutoFilter.Range.select
やってみました!
これでオートフィルターの結果が全て選択できるのですね。
ありがとうございます。
勉強することがたくさんあって頭がこんがらがってきました(泣)

これが完成したら一からきちんと勉強したいと思っています<(_ _)>
ご親切にありがとうございます。

【63363】Re:ループの記述について
発言  Yuki  - 09/10/29(木) 12:27 -

引用なし
パスワード
   ▼もん太 さん:
>      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
>        Criteria1:=Sheets("0").Cells(i + 6, 3).Value, >Operator:=xlAnd

      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
        Criteria1:=Sheets("カレンダー").Cells(i + 6, 3).Value, Operator:=xlAnd
に変更して下さい。

【63365】Re:ループの記述について
お礼  もん太  - 09/10/29(木) 13:39 -

引用なし
パスワード
   Yukiさん!
ありがとうございました!

初歩的な質問で本当に申し訳ありませんでした。
おかげさまで、希望通りの処理をすることができましたm(_ _"m)ペコリ

大感激です!!
ありがとうございました(*´∇`*)


▼Yuki さん:
>▼もん太 さん:
>>      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
>>        Criteria1:=Sheets("0").Cells(i + 6, 3).Value, >Operator:=xlAnd
>
>      .Range("A1").CurrentRegion.AutoFilter Field:=4, _
>        Criteria1:=Sheets("カレンダー").Cells(i + 6, 3).Value, Operator:=xlAnd
>に変更して下さい。

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