Excel VBA質問箱 IV

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

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


2819 / 13644 ツリー ←次へ | 前へ→

【65794】複数シートから一覧表を作成 10/6/28(月) 15:16 質問[未読]
【65795】Re:複数シートから一覧表を作成 かみちゃん 10/6/28(月) 15:32 発言[未読]
【65798】Re:複数シートから一覧表を作成 10/6/28(月) 16:41 質問[未読]
【65799】Re:複数シートから一覧表を作成 かみちゃん 10/6/28(月) 17:09 発言[未読]
【65800】Re:複数シートから一覧表を作成 10/6/28(月) 17:54 質問[未読]
【65801】Re:複数シートから一覧表を作成 かみちゃん 10/6/28(月) 18:28 発言[未読]
【65802】Re:複数シートから一覧表を作成 10/6/28(月) 18:33 お礼[未読]

【65794】複数シートから一覧表を作成
質問    - 10/6/28(月) 15:16 -

引用なし
パスワード
   お知恵を貸してください。

複数シートのセルH1:HP1までの範囲(全シート共通です)をコピーして
、”一覧表”というシートのA2から順に下へ張り付けをして、一覧表を作成しようとしています。

  (一覧表シート)

 (A列)
1 (Sheet1のセルH1:HP1までのデータ)
2 (Sheet2のセルH1:HP1までのデータ)
3 (Sheet3のセルH1:HP1までのデータ)

というように、300枚程のシートを一覧表にまとめたいのですが
どのようにしたらできますか?
各シートにはWebから張り付けたデータが入っていて、この中の必用な部分だけを
一覧表としてデータにしたいのです。
よい方法がありましたらよろしくお願いいたします。

【65795】Re:複数シートから一覧表を作成
発言  かみちゃん E-MAIL  - 10/6/28(月) 15:32 -

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

>複数シートのセルH1:HP1までの範囲(全シート共通です)をコピーして
>、”一覧表”というシートのA2から順に下へ張り付けをして、一覧表を作成しようとしています。
>
>  (一覧表シート)
>
> (A列)
> 1 (Sheet1のセルH1:HP1までのデータ)
> 2 (Sheet2のセルH1:HP1までのデータ)
> 3 (Sheet3のセルH1:HP1までのデータ)

まずは、3シート程度に絞って、手作業でする場合の操作を「マクロの記録」で記録してみればいかがでしょうか?

そのあと、300枚程度のシートの場合どうするかを考えていくようにすればいいです。
以下は、ヒントです。
Sub Sample()
 Dim WS1 As Worksheet, WS2 As Worksheet
 
 Set WS1 = Worksheets("まとめ")
 For Each WS2 In Worksheets
  If WS2.Name <> "まとめ" Then
   MsgBox WS2.Name
  End If
 Next
End Sub

【65798】Re:複数シートから一覧表を作成
質問    - 10/6/28(月) 16:41 -

引用なし
パスワード
   ▼かみちゃん さん:

こんにちは。
ヒントをありがとうございました。

マクロを作ってみてから、ヒントに書き加えてみたのですが
以下のは未完成で、各シートからコピーではなく、一覧表のRange("H1:HP1")が
コピーされてしまい、各シートに対応ができていません。
張り付け先(一覧表)へ1行づつ下にずれて張り付けることもまだ対応が
できていません。
これに何を加えて、何を修正すればよいか、もうひとつヒントを
いただけますか?
BVA初心者な者で申し訳ありません。


Sub 一覧表作成()

 Dim WS1 As Worksheet, WS2 As Worksheet
 Dim n As Long
 
 Set WS1 = Worksheets("一覧表")
 For Each WS2 In Worksheets
  n = 2
 
  If WS2.Name <> "" Then
  
  Range("H1:HP1").Select
  Selection.Copy
  Sheets("一覧表").Select
  Cells(n, "A").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  
  End If
    
 Next
 
End Sub


>こんにちは。かみちゃん です。
>
>>複数シートのセルH1:HP1までの範囲(全シート共通です)をコピーして
>>、”一覧表”というシートのA2から順に下へ張り付けをして、一覧表を作成しようとしています。
>>
>>  (一覧表シート)
>>
>> (A列)
>> 1 (Sheet1のセルH1:HP1までのデータ)
>> 2 (Sheet2のセルH1:HP1までのデータ)
>> 3 (Sheet3のセルH1:HP1までのデータ)
>
>まずは、3シート程度に絞って、手作業でする場合の操作を「マクロの記録」で記録してみればいかがでしょうか?
>
>そのあと、300枚程度のシートの場合どうするかを考えていくようにすればいいです。
>以下は、ヒントです。
>Sub Sample()
> Dim WS1 As Worksheet, WS2 As Worksheet
> 
> Set WS1 = Worksheets("まとめ")
> For Each WS2 In Worksheets
>  If WS2.Name <> "まとめ" Then
>   MsgBox WS2.Name
>  End If
> Next
>End Sub

【65799】Re:複数シートから一覧表を作成
発言  かみちゃん E-MAIL  - 10/6/28(月) 17:09 -

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

>以下のは未完成で、各シートからコピーではなく、一覧表のRange("H1:HP1")が
>コピーされてしまい、各シートに対応ができていません。

気づいた点のみ。

If WS2.Name <> "" Then

は、何をしようとしていますか?

私は、
If WS2.Name <> "まとめ" Then
というヒントを差し上げたと思います。

> 一覧表のRange("H1:HP1")がコピーされてしまい

Range("H1:HP1").Select
というコードにしているからです。
これでは、アクティブシートのH1:HP1になります。
マクロ実行開始時のアクティブシートが「一覧表」であれば、そのような事象になります。
これを回避するためには、

  Range("H1:HP1").Select
の前に、
  WS2.Acivate
として、アクティブシートを変更するか、

  Range("H1:HP1").Select
  Selection.Copy
  Sheets("一覧表").Select
  Cells(n, "A").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False



  WS2.Range("H1:HP1").Copy
  WS1.Cells(n, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

とします。

なお、この部分は、
 
  With WS2.Range("H1:HP1")
   WS1.Cells(n, "A").Resize(, .Columns.Count).Value = .Value
  End With

というように書き換えることもできます。

> 貼り付け先(一覧表)へ1行づつ下にずれて貼り付けることもまだ対応が
> できていません。

ここまでできたのですから、もう一歩です。
n = 2
という使い方ができているということですから、どのようにしたらいいかは、
もう少し自分で考えてみましょう。

自分で考えたコードが思うとおり動くようになったら、たぶんうれしいと思いますから。

【65800】Re:複数シートから一覧表を作成
質問    - 10/6/28(月) 17:54 -

引用なし
パスワード
   ▼かみちゃん さん:

ご返信ありがとうございました。
少しずつやりたいことに近づいてきているのですが、ひたすら同じページのみが
一覧表にコピーされています。
次のシートへ・・・と進む部分はどこになりますか?
理解に時間がかかってしまってすみません。

Sub 一覧表作成()

 Dim WS1 As Worksheet, WS2 As Worksheet
 Dim n As Long
 n = 2
 
 Set WS1 = Worksheets("一覧表")

  If WS2.Name <> "一覧表" Then
     
   WS2.Range("H1:HP1").Copy

  Do
  
  Sheets("一覧表").Select
  Cells(n, "A").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  
  n = n + 1
  Loop
  
  End If     
 Next  
End Sub


>こんにちは。かみちゃん です。
>
>>以下のは未完成で、各シートからコピーではなく、一覧表のRange("H1:HP1")が
>>コピーされてしまい、各シートに対応ができていません。
>
>気づいた点のみ。
>
>If WS2.Name <> "" Then
>
>は、何をしようとしていますか?
>
>私は、
>If WS2.Name <> "まとめ" Then
>というヒントを差し上げたと思います。
>
>> 一覧表のRange("H1:HP1")がコピーされてしまい
>
>Range("H1:HP1").Select
>というコードにしているからです。
>これでは、アクティブシートのH1:HP1になります。
>マクロ実行開始時のアクティブシートが「一覧表」であれば、そのような事象になります。
>これを回避するためには、
>
>  Range("H1:HP1").Select
>の前に、
>  WS2.Acivate
>として、アクティブシートを変更するか、
>
>  Range("H1:HP1").Select
>  Selection.Copy
>  Sheets("一覧表").Select
>  Cells(n, "A").Select
>  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>
>を
>
>  WS2.Range("H1:HP1").Copy
>  WS1.Cells(n, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>
>とします。
>
>なお、この部分は、
> 
>  With WS2.Range("H1:HP1")
>   WS1.Cells(n, "A").Resize(, .Columns.Count).Value = .Value
>  End With
>
>というように書き換えることもできます。
>
>> 貼り付け先(一覧表)へ1行づつ下にずれて貼り付けることもまだ対応が
>> できていません。
>
>ここまでできたのですから、もう一歩です。
>n = 2
>という使い方ができているということですから、どのようにしたらいいかは、
>もう少し自分で考えてみましょう。
>
>自分で考えたコードが思うとおり動くようになったら、たぶんうれしいと思いますから。

【65801】Re:複数シートから一覧表を作成
発言  かみちゃん E-MAIL  - 10/6/28(月) 18:28 -

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

>少しずつやりたいことに近づいてきているのですが、ひたすら同じページのみが
>一覧表にコピーされています。
>次のシートへ・・・と進む部分はどこになりますか?
>理解に時間がかかってしまってすみません。

理解に時間がかかることは仕方ないことなので、構いません。
「自分で作ってみる」ということが大事ですし、それができると思います。

さて、次のシートへ・・・と進む部分とのことですが、
65798 で提示されたコードに対して、65799 でコメントしていますが、
それが、ほとんど活かされていません、というか、余計なことをしています。
Do 〜 Loop などというヒントは差しあげていませんが、何をしたいのでしょうか?

まずは、65798 でご自身で提示されたコードについて、65799 で書きました修正点だけを修正してみてください。

あとは、

>> 貼り付け先(一覧表)へ1行づつ下にずれて貼り付けることもまだ対応が
>> できていません。
>
>ここまでできたのですから、もう一歩です。
>n = 2
>という使い方ができているということですから、どのようにしたらいいか

だけです。

変数n は、何を意味していると思いますか?

【65802】Re:複数シートから一覧表を作成
お礼    - 10/6/28(月) 18:33 -

引用なし
パスワード
   ▼かみちゃん さん:

あ、、、できました。
Do 〜 Loop がなくても、繰り返しの処理をしてくれているのですね。
これがあるためにぐるぐる同じことだけをしていたんですね。

理解しました。
どうもありがとうございました。


>こんにちは。かみちゃん です。
>
>>少しずつやりたいことに近づいてきているのですが、ひたすら同じページのみが
>>一覧表にコピーされています。
>>次のシートへ・・・と進む部分はどこになりますか?
>>理解に時間がかかってしまってすみません。
>
>理解に時間がかかることは仕方ないことなので、構いません。
>「自分で作ってみる」ということが大事ですし、それができると思います。
>
>さて、次のシートへ・・・と進む部分とのことですが、
>65798 で提示されたコードに対して、65799 でコメントしていますが、
>それが、ほとんど活かされていません、というか、余計なことをしています。
>Do 〜 Loop などというヒントは差しあげていませんが、何をしたいのでしょうか?
>
>まずは、65798 でご自身で提示されたコードについて、65799 で書きました修正点だけを修正してみてください。
>
>あとは、
>
>>> 貼り付け先(一覧表)へ1行づつ下にずれて貼り付けることもまだ対応が
>>> できていません。
>>
>>ここまでできたのですから、もう一歩です。
>>n = 2
>>という使い方ができているということですから、どのようにしたらいいか
>
>だけです。
>
>変数n は、何を意味していると思いますか?

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