Excel VBA質問箱 IV

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

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


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

【60404】Excelシートの結合 えあ 09/2/19(木) 10:15 質問[未読]
【60405】Re:Excelシートの結合 えあ 09/2/19(木) 11:15 発言[未読]
【60406】Re:Excelシートの結合 トト 09/2/19(木) 12:40 発言[未読]
【60407】Re:Excelシートの結合 Jaka 09/2/19(木) 12:50 発言[未読]
【60513】Re:Excelシートの結合 えあ 09/2/25(水) 15:34 お礼[未読]

【60404】Excelシートの結合
質問  えあ  - 09/2/19(木) 10:15 -

引用なし
パスワード
   お世話になっております。

早速ですが、ExcelシートがSheet1〜Sheet50まであります。
各シートの中身は1000件ずつデータが入っております。
各シートの先頭行はフィールド名があります。

やりたい事は、Sheet1の1000件のデータの下行にSheet2から順に
Sheet50までのデータを一括で移したいのです。
※先頭行を省いたデータを移したいのです。

どのような方法がありますでしょうか?
ヒントでも構いませんので宜しくお願いします。

【60405】Re:Excelシートの結合
発言  えあ  - 09/2/19(木) 11:15 -

引用なし
パスワード
   ▼えあ さん:
>お世話になっております。
>
>早速ですが、ExcelシートがSheet1〜Sheet50まであります。
>各シートの中身は1000件ずつデータが入っております。
>各シートの先頭行はフィールド名があります。
>
>やりたい事は、Sheet1の1000件のデータの下行にSheet2から順に
>Sheet50までのデータを一括で移したいのです。
>※先頭行を省いたデータを移したいのです。
>
>どのような方法がありますでしょうか?
>ヒントでも構いませんので宜しくお願いします。

【追記】
Sub CopyPro()
  Dim R As Long
  Dim LastR As Long
 
Application.ScreenUpdating = False
 
  LastR = Range("A65536").End(xlUp).Row
  
    For R = LastR To 2 Step -1
     'もし、対象セルと対象セルの下のセルが違った場合、
      If Cells(R, 1).Value <> Cells(R + 1, 1).Value Then

     'Sheet1のデータがある一番下のセルの次にSheet2のA1:A999のデータ
      を転記する。
        Worksheets("sheet1").Cells(R + 1, 1).Value = _
        Worksheets("Sheet2").Range(Cells(1, 1), Cells(1, 999))
      End If
    Next
 
Application.ScreenUpdating = True

End Sub

エラーになります。

それと、上記の方法ではSheet2からSheet50までのデータを一括で転記できません。
できる方法をお願いします。

【60406】Re:Excelシートの結合
発言  トト  - 09/2/19(木) 12:40 -

引用なし
パスワード
   ▼えあ さん:
移動(?)ということで、カット&ペーストをマクロ記録し、
それを元に、Sheetの分だけLoopしてみました。

バックアップ後、実行して下さい。

Private Sub sub_kopi()
  Dim myRow As Long
  Dim myLoopSheet As Long
  
'  Application.ScreenUpdating = False
  
  For myLoopSheet = 2 To 50
    With Sheets("Sheet" & myLoopSheet)
      .Select
      myRow = Range("A65536").End(xlUp).Row
      Rows("2:" & myRow).Select
      Selection.Cut  'またはコピー?
    End With
    With Sheets("Sheet1")
      .Select
      Range("A65535").End(xlUp).Offset(1, 0).Activate
      ActiveSheet.Paste
    End With
  Next myLoopSheet
  
'  Application.ScreenUpdating = True
End Sub

テストはしてないので、動かなかったらゴメンなさい。

【60407】Re:Excelシートの結合
発言  Jaka  - 09/2/19(木) 12:50 -

引用なし
パスワード
   >     'もし、対象セルと対象セルの下のセルが違った場合、
>      If Cells(R, 1).Value <> Cells(R + 1, 1).Value Then
この比較が何のためにあるのか解りません。
×列最後の行のセルと次の行のセルの内容は一致する事ないです。
次の行のセルは、空白だから.....。

最後行以降、空行が999行以下だった場合の処理も考えた方が
いいのかも知れませんが、51000行ぐらいのようですので。
こんな感じでいけると思います。

For i = 2 To 50
  LastR = Sheets("Sheet1").Range("A65536").End(xlUp).Row
  Sheets("Sheet1").Range("A" & lastr + 1).Resize(999).Value = _
      Sheets("Sheet" & i).Range("A2:A1000").Value
  DoEvents
Next

【60513】Re:Excelシートの結合
お礼  えあ  - 09/2/25(水) 15:34 -

引用なし
パスワード
   ▼Jaka さん:
>>     'もし、対象セルと対象セルの下のセルが違った場合、
>>      If Cells(R, 1).Value <> Cells(R + 1, 1).Value Then
>この比較が何のためにあるのか解りません。
>×列最後の行のセルと次の行のセルの内容は一致する事ないです。
>次の行のセルは、空白だから.....。
 
>最後行以降、空行が999行以下だった場合の処理も考えた方が
>いいのかも知れませんが、51000行ぐらいのようですので。
>こんな感じでいけると思います。
>
>For i = 2 To 50
>  LastR = Sheets("Sheet1").Range("A65536").End(xlUp).Row
>  Sheets("Sheet1").Range("A" & lastr + 1).Resize(999).Value = _
>      Sheets("Sheet" & i).Range("A2:A1000").Value
>  DoEvents
>Next
上記の内容で、欲しい結果となりました。
ただなぜそうなるのかが理解できておりませんでの、
理解できるように勉強致します。

また解らない事がでてきたら、質問させていただきます。

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