Excel VBA質問箱 IV

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

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


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

【60970】オートフィルタ抽出したデータをコピーしたい [名前なし] 09/3/28(土) 19:27 質問[未読]
【60971】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/3/28(土) 19:35 発言[未読]
【60972】Re:オートフィルタ抽出したデータをコピー... [名前なし] 09/3/28(土) 22:31 発言[未読]
【60973】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/3/28(土) 22:46 発言[未読]
【60974】Re:オートフィルタ抽出したデータをコピー... [名前なし] 09/3/28(土) 23:36 質問[未読]
【61037】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/5(日) 10:31 質問[未読]
【61038】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/4/5(日) 12:02 発言[未読]
【61040】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/5(日) 16:29 発言[未読]
【61041】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/4/5(日) 16:54 発言[未読]
【61042】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/5(日) 17:23 お礼[未読]
【61039】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/4/5(日) 12:43 発言[未読]
【61043】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/5(日) 17:51 質問[未読]
【61044】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/5(日) 17:53 質問[未読]
【61045】Re:オートフィルタ抽出したデータをコピー... かみちゃん 09/4/5(日) 18:27 発言[未読]
【61351】Re:オートフィルタ抽出したデータをコピー... aribaba 09/4/29(水) 13:58 お礼[未読]

【60970】オートフィルタ抽出したデータをコピーし...
質問  [名前なし]  - 09/3/28(土) 19:27 -

引用なし
パスワード
   すみません!
オートフィルタを利用してセルの値を抽出して、別のシートにコピーしたい。
ただし、セルの値が毎回変わりますので、たとえば、1〜10までの値を今日2の値をないどうか、、明日5の値をない時どうか...どうすればいいでしょうか?お願いします

【60971】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん  - 09/3/28(土) 19:35 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>オートフィルタを利用してセルの値を抽出して、別のシートにコピーしたい。
>ただし、セルの値が毎回変わりますので、たとえば、1〜10までの値を今日2の値をないどうか、、明日5の値をない時

VBAではなく、一般操作の「フィルタオプション」でできると思うのですが、
いかがでしょうか?
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm#tyusyutu
(先頭4文字は、全角になっていますので、半角にしてください)

【60972】Re:オートフィルタ抽出したデータをコピ...
発言  [名前なし]  - 09/3/28(土) 22:31 -

引用なし
パスワード
   すみませんが、これは毎日の作業なので、ボダンひとつで処理できないかな〜と思いまして、できないでしょうか?

【60973】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん  - 09/3/28(土) 22:46 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> これは毎日の作業なので、ボダンひとつで処理できないかな〜と思いまして、できないでしょうか?

もちろんできるのですが、
フィルタオプションの設定だと抽出条件をコードに記述しておく必要はありません。

あとは、いずれの方法も、「マクロの記録」で記録すれば、ある程度のコードは
自動的に記述されます。

一度試してみて、わからないことがあれば、記録したコードを提示して質問されては
いかがでしょうか?

【60974】Re:オートフィルタ抽出したデータをコピ...
質問  [名前なし]  - 09/3/28(土) 23:36 -

引用なし
パスワード
   ありがとうございます。一応自動記録しましたが、このような
Sheets("出荷明細_データベース)").Select
  ActiveWindow.SmallScroll Down:=-6
  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="2"
  Range("A2:L300").Select
  Selection.Copy
  Sheets("加工").Select
  Range("A2").Select
  ActiveSheet.Paste
  Sheets("出荷明細_データベース)").Select
  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="3"
  Range("A2:L300").Select
  Application.CutCopyMode = False
  Selection.Copy
  Sheets("加工").Select
  Range("A14").Select
  ActiveSheet.Paste
  Range("A24").Select
  ActiveSheet.Paste
  Sheets("出荷明細_データベース)").Select
  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="4"
  Application.CutCopyMode = False
  Range("A2:L300").Select
  Selection.Copy
  Sheets("加工").Select
  Range("A34").Select
  ActiveSheet.Paste
  Range("A44").Select
  ActiveSheet.Paste
  ActiveWindow.SmallScroll Down:=12
  Range("A54").Select
  ActiveSheet.Paste
  ActiveWindow.SmallScroll Down:=12
  Range("A64").Select
  ActiveWindow.SmallScroll Down:=-57
ただし、先ほど話をしましたが、たとえば、ラベル枚数2〜4までを認識して捜操作しているですが(2の場合:元をコピーして、加工シートに貼り付け、3の場合:元をコピーして、加工シートに2回貼り付け、4の場合:元をコピーをして、加工のシートに3回貼り付け)、出荷明細_データベースの量によって、その数値を毎日変わります、いつかなの数値あるのか、もちろんない日もありますので、上記のままだと、枚数3ない場合、そのままコピーされます。最後加工シートに貼り付けたのをコピーして、出荷明細_データベースに最終セルに貼り付けして、Excelでデータ並び替えをしています。
得意先NO    指示コード    出荷日    種別コード    品名名称    センター名称    出荷数    出荷分割    客先注番    直送区分    名称コード    枚数
4    J03100022    20090323    CC    MTV2RNM6G     科学支店    60    1    134512799-01M    0    0    6
19    J03100041    20090323    CC    MTV35/16U2     thcare Bio-Sciences    29    1    2000221/111    0    0    3


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> これは毎日の作業なので、ボダンひとつで処理できないかな〜と思いまして、できないでしょうか?
>
>もちろんできるのですが、
>フィルタオプションの設定だと抽出条件をコードに記述しておく必要はありません。
>
>あとは、いずれの方法も、「マクロの記録」で記録すれば、ある程度のコードは
>自動的に記述されます。
>
>一度試してみて、わからないことがあれば、記録したコードを提示して質問されては
>いかがでしょうか?

【61037】Re:オートフィルタ抽出したデータをコピ...
質問  aribaba  - 09/4/5(日) 10:31 -

引用なし
パスワード
   >ありがとうございます。一応自動記録しましたが、このような
> Sheets("出荷明細_データベース)").Select
>  ActiveWindow.SmallScroll Down:=-6
>  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="2"
>  Range("A2:L300").Select
>  Selection.Copy
>  Sheets("加工").Select
>  Range("A2").Select
>  ActiveSheet.Paste
>  Sheets("出荷明細_データベース)").Select
>  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="3"
>  Range("A2:L300").Select
>  Application.CutCopyMode = False
>  Selection.Copy
>  Sheets("加工").Select
>  Range("A14").Select
>  ActiveSheet.Paste
>  Range("A24").Select
>  ActiveSheet.Paste
>  Sheets("出荷明細_データベース)").Select
>  ActiveSheet.Range("$A$1:$R$1552").AutoFilter Field:=12, Criteria1:="4"
>  Application.CutCopyMode = False
>  Range("A2:L300").Select
>  Selection.Copy
>  Sheets("加工").Select
>  Range("A34").Select
>  ActiveSheet.Paste
>  Range("A44").Select
>  ActiveSheet.Paste
>  ActiveWindow.SmallScroll Down:=12
>  Range("A54").Select
>  ActiveSheet.Paste
>  ActiveWindow.SmallScroll Down:=12
>  Range("A64").Select
>  ActiveWindow.SmallScroll Down:=-57
すみませんが、枚数4の数字ない時は、そのままA2:L300のデータをコピーされます。これはちょっと困る。枚数の数字はない時飛ばして、ある数字に対して、コピーしたいです、いい方法教えていただきませんか?

【61038】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん  - 09/4/5(日) 12:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 枚数4の数字ない時は、そのままA2:L300のデータをコピーされます。

そのような事象は、確認できないのですが、どのようになるのでしょうか?
L列(枚数)が4以外のデータがコピーされるということですか?

【61039】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん E-MAIL  - 09/4/5(日) 12:43 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> ラベル枚数2〜4までを認識して捜操作しているですが(2の場合:元をコピーし > て、加工シートに貼り付け、3の場合:元をコピーして、加工シートに2回貼り付
> け、4の場合:元をコピーをして、加工のシートに3回貼り付け)、出荷明細_デ
> ータベースの量によって、その数値を毎日変わります、いつかなの数値あるの
> か、もちろんない日もありますので、上記のままだと、枚数3ない場合、そのま
> まコピーされます。

質問内容があまり理解できていないのですが、いただいたコードを眺めてみると、
以下のような感じのことがしたいのでしょうか?

Sub Sample1()
 Dim WS1 As Worksheet
 Dim WS2 As Worksheet
 Dim rngLast As Range
 Dim rngData As Range
 Dim intData As Integer
 
 Set WS1 = Worksheets("出荷明細_データベース)")
 Set WS2 = Worksheets("加工")
 
 Set rngLast = WS1.Range("A" & Rows.Count).End(xlUp)
 Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
 
 MsgBox rngData.Address(, , , True) & " から抽出します"

 For intData = 2 To 4
  rngData.AutoFilter Field:=12, Criteria1:=intData
  With rngData
   Select Case intData
    'L列が2のとき
    Case 2
     .Resize(, 12).Offset(1).Copy WS2.Range("A2")
    'L列が3のとき
    Case 3
     .Resize(, 12).Offset(1).Copy WS2.Range("A14")
     .Resize(, 12).Offset(1).Copy WS2.Range("A24")
    'L列が4のとき
    Case 4
     .Resize(, 12).Offset(1).Copy WS2.Range("A34")
     .Resize(, 12).Offset(1).Copy WS2.Range("A44")
     .Resize(, 12).Offset(1).Copy WS2.Range("A54")
   End Select
  End With
 Next
 rngData.AutoFilter
 MsgBox "処理を終了しました"
End Sub

一応サンプルファイルを作って動作確認しています。

> 枚数3ない場合、そのままコピーされます。
と [61037] でおっしゃっている
> 枚数4の数字ない時は、そのままA2:L300のデータをコピーされます。これはちょっと困る
は、同じ事象なのでしょうか?
困るのは、わかりましたが、具体的にどうしたいのかの説明がないのでわかりません。

上記コードでは、そのような事象にはならないと思います。

> 最後加工シートに貼り付けたのをコピーして、出荷明細_データベースに最終セ
> ルに貼り付けして、Excelでデータ並び替えをしています。

これも意味がわかりません。
今回の要件に追加ということですか?

なお、投稿の際、引用は、最低限のものだけで結構です。
スレッド全体を見ればわかることですので。

また、[名前なし]さんは、aribabaさんだったのですか?
それであれば、60977 のご質問とダブっていますので、向こうは、解決済みにして
おいていただけませんか?

【61040】Re:オートフィルタ抽出したデータをコピ...
発言  aribaba  - 09/4/5(日) 16:29 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> 枚数4の数字ない時は、そのままA2:L300のデータをコピーされます。
>
>そのような事象は、確認できないのですが、どのようになるのでしょうか?
>L列(枚数)が4以外のデータがコピーされるということですか?
お返事をありがとうございます。
枚数4:データA2:L300の中のデータ、列12オートフィルタ抽出してコピーしたいですが、先送ってだデータの中に、枚数4の数字でない場合。A2からL300のデータをコピーされる、このとき枚数の数字でない場合どうすればいいのか?

【61041】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん E-MAIL  - 09/4/5(日) 16:54 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 枚数4の数字でない場合。A2からL300のデータをコピーされる

[61039]で提示したコードでもコピーされますか?
こちらではコピーされないのですが・・・(コピーされないようにしているので)

【61042】Re:オートフィルタ抽出したデータをコピ...
お礼  aribaba  - 09/4/5(日) 17:23 -

引用なし
パスワード
   本当にありがとうございます。いろいろを教えてもらって。予想通りできました。
なかなかうまく説明できませんが、何度も申し訳ありません。

本当にありがとうございます。これからももっと勉強をしたいです。

【61043】Re:オートフィルタ抽出したデータをコピ...
質問  aribaba  - 09/4/5(日) 17:51 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> ラベル枚数2〜4までを認識して捜操作しているですが(2の場合:元をコピーし > て、加工シートに貼り付け、3の場合:元をコピーして、加工シートに2回貼り付
>> け、4の場合:元をコピーをして、加工のシートに3回貼り付け)、出荷明細_デ
>> ータベースの量によって、その数値を毎日変わります、いつかなの数値あるの
>> か、もちろんない日もありますので、上記のままだと、枚数3ない場合、そのま
>> まコピーされます。
>
>質問内容があまり理解できていないのですが、いただいたコードを眺めてみると、
>以下のような感じのことがしたいのでしょうか?
>
>Sub Sample1()
> Dim WS1 As Worksheet
> Dim WS2 As Worksheet
> Dim rngLast As Range
> Dim rngData As Range
> Dim intData As Integer
> 
> Set WS1 = Worksheets("出荷明細_データベース)")
> Set WS2 = Worksheets("加工")
> 
> Set rngLast = WS1.Range("A" & Rows.Count).End(xlUp)
> Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
> 
> MsgBox rngData.Address(, , , True) & " から抽出します"
>
> For intData = 2 To 4
>  rngData.AutoFilter Field:=12, Criteria1:=intData
>  With rngData
>   Select Case intData
>    'L列が2のとき
>    Case 2
>     .Resize(, 12).Offset(1).Copy WS2.Range("A2")
>    'L列が3のとき
>    Case 3
>     .Resize(, 12).Offset(1).Copy WS2.Range("A14")
>     .Resize(, 12).Offset(1).Copy WS2.Range("A24")
>    'L列が4のとき
>    Case 4
>     .Resize(, 12).Offset(1).Copy WS2.Range("A34")
>     .Resize(, 12).Offset(1).Copy WS2.Range("A44")
>     .Resize(, 12).Offset(1).Copy WS2.Range("A54")
>   End Select
>  End With
> Next
> rngData.AutoFilter
> MsgBox "処理を終了しました"
>End Sub
>
>一応サンプルファイルを作って動作確認しています。
>
すみませんが、枚数6から50までになるときはどうすればよろしいですか?
枚数2から5までは一つボダンにしていますが、枚数6から50まで7段階で分けてしたいですが。枚数5枚でひとつのボダンにしたいですが、先教えてもらったことを同じことしたいので、こんな時はどうすればいいですか?お手数ですが、お願いします。

【61044】Re:オートフィルタ抽出したデータをコピ...
質問  aribaba  - 09/4/5(日) 17:53 -

引用なし
パスワード
   ▼aribaba さん:
>▼かみちゃん さん:
>>こんにちは。かみちゃん です。
>>
>>> ラベル枚数2〜4までを認識して捜操作しているですが(2の場合:元をコピーし > て、加工シートに貼り付け、3の場合:元をコピーして、加工シートに2回貼り付
>>> け、4の場合:元をコピーをして、加工のシートに3回貼り付け)、出荷明細_デ
>>> ータベースの量によって、その数値を毎日変わります、いつかなの数値あるの
>>> か、もちろんない日もありますので、上記のままだと、枚数3ない場合、そのま
>>> まコピーされます。
>>
>>質問内容があまり理解できていないのですが、いただいたコードを眺めてみると、
>>以下のような感じのことがしたいのでしょうか?
>>
>>Sub Sample1()
>> Dim WS1 As Worksheet
>> Dim WS2 As Worksheet
>> Dim rngLast As Range
>> Dim rngData As Range
>> Dim intData As Integer
>> 
>> Set WS1 = Worksheets("出荷明細_データベース)")
>> Set WS2 = Worksheets("加工")
>> 
>> Set rngLast = WS1.Range("A" & Rows.Count).End(xlUp)
>> Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
>> 
>> MsgBox rngData.Address(, , , True) & " から抽出します"
>>
>> For intData = 2 To 4
>>  rngData.AutoFilter Field:=12, Criteria1:=intData
>>  With rngData
>>   Select Case intData
>>    'L列が2のとき
>>    Case 2
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A2")
>>    'L列が3のとき
>>    Case 3
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A14")
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A24")
>>    'L列が4のとき
>>    Case 4
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A34")
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A44")
>>     .Resize(, 12).Offset(1).Copy WS2.Range("A54")
>>   End Select
>>  End With
>> Next
>> rngData.AutoFilter
>> MsgBox "処理を終了しました"
>>End Sub
>>
>>一応サンプルファイルを作って動作確認しています。
>>
>すみませんが、枚数6から50までになるときはどうすればよろしいですか?
>枚数2から5までは一つボダンにしていますが、枚数6から50まで7段階で分けてしたいですが。枚数5枚でひとつのボダンにしたいですが、先教えてもらったことを同じことしたいので、こんな時はどうすればいいですか?お手数ですが、お願いします。
Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
このコードは17の数字の意味よくわかりませが、教えてもらえませんか?

【61045】Re:オートフィルタ抽出したデータをコピ...
発言  かみちゃん  - 09/4/5(日) 18:27 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 枚数6から50までになるときはどうすればよろしいですか?

意味が全くわかりません。
枚数6から50までのときどうなってほしいのかの説明が一切ないからです。

> 枚数6から50まで7段階で分けてしたい。枚数5枚でひとつのボダンにしたい

これも意味がわかりません。
7段階とは何ですか?
5枚でひとつのボタンとは?

もっとしたいことを詳しく説明しないと誰もわかりませんよ。
レスが私以外つかないのも、その所為かもしれません。

ただ、繰り返し処理と分岐処理のことだけをいえば、
For intData = 2 To 4

For intData = 6 To 50
と、
Case 2
の部分を
Case 6
などと、L列の値によって分岐するように記述します。

For 〜 Next

Select Case
のヘルプを確認してください。

> Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
> このコードは17の数字の意味よくわかりません

Offsetプロパティのヘルプは確認されていますか?
(少し説明が難しいのかもしれませんが・・・)

Range("$A$1:$R$1552").AutoFilter
という記述をされていたので、A1セルから、A列の最終行の17行右方向のセルまでの範囲
と理解したので、このようなコードになっています。

Set rngData = WS1.Range("A1:R1").Resize(rngLast.Row)
としたほうがよかったでしょうか?

※【再度のお願いです】
投稿の際、引用は、最低限のものだけで結構です。
スレッド全体を見ればわかることですので。
また、[名前なし]さんは、aribabaさんだったのですか?
それであれば、60977 のご質問とダブっていますので、向こうは、解決済みにして
おいていただけませんか?

【61351】Re:オートフィルタ抽出したデータをコピ...
お礼  aribaba  - 09/4/29(水) 13:58 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>> 枚数6から50までになるときはどうすればよろしいですか?
>
>意味が全くわかりません。
>枚数6から50までのときどうなってほしいのかの説明が一切ないからです。
>
>> 枚数6から50まで7段階で分けてしたい。枚数5枚でひとつのボダンにしたい
>
>これも意味がわかりません。
>7段階とは何ですか?
>5枚でひとつのボタンとは?
>
>もっとしたいことを詳しく説明しないと誰もわかりませんよ。
>レスが私以外つかないのも、その所為かもしれません。
>
>ただ、繰り返し処理と分岐処理のことだけをいえば、
>For intData = 2 To 4
>を
>For intData = 6 To 50
>と、
>Case 2
>の部分を
>Case 6
>などと、L列の値によって分岐するように記述します。
>
>For 〜 Next
>と
>Select Case
>のヘルプを確認してください。
>
>> Set rngData = WS1.Range("A1", rngLast.Offset(, 17))
>> このコードは17の数字の意味よくわかりません
>
>Offsetプロパティのヘルプは確認されていますか?
>(少し説明が難しいのかもしれませんが・・・)
>
>Range("$A$1:$R$1552").AutoFilter
>という記述をされていたので、A1セルから、A列の最終行の17行右方向のセルまでの範囲
>と理解したので、このようなコードになっています。
>
>Set rngData = WS1.Range("A1:R1").Resize(rngLast.Row)
>としたほうがよかったでしょうか?
>
>※【再度のお願いです】
>投稿の際、引用は、最低限のものだけで結構です。
>スレッド全体を見ればわかることですので。
>また、[名前なし]さんは、aribabaさんだったのですか?
>それであれば、60977 のご質問とダブっていますので、向こうは、解決済みにして
>おいていただけませんか?

本当にありがとうございました。無事にうまくできました。

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