Excel VBA質問箱 IV

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

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


5676 / 13645 ツリー ←次へ | 前へ→

【49451】ブックのデータを1ブックに統合する 生茶 07/6/5(火) 14:44 質問[未読]
【49459】Re:ブックのデータを1ブックに統合する Kein 07/6/5(火) 18:11 発言[未読]
【49477】Re:ブックのデータを1ブックに統合する 生茶 07/6/6(水) 9:39 発言[未読]
【49495】Re:ブックのデータを1ブックに統合する Kein 07/6/6(水) 17:45 回答[未読]
【49511】Re:ブックのデータを1ブックに統合する 生茶 07/6/8(金) 10:33 お礼[未読]
【49524】Re:ブックのデータを1ブックに統合する 生茶 07/6/8(金) 16:47 発言[未読]
【49525】Re:ブックのデータを1ブックに統合する Kein 07/6/8(金) 16:55 回答[未読]
【49535】Re:ブックのデータを1ブックに統合する 生茶 07/6/9(土) 8:38 お礼[未読]

【49451】ブックのデータを1ブックに統合する
質問  生茶  - 07/6/5(火) 14:44 -

引用なし
パスワード
   はじめまして。最近マクロを使うようになったのですが
早速壁に・・・・

出勤簿1.xls、出勤簿2.xls、出勤簿3.xlsがあります。
各ブックのデータ内容

  A      B C D   AE(月によって変動)
1 ○月分シフト
2 名      1 2 3........ 31
3 ○さん    A B C....... A (シフトコード:A勤やB勤)
4 ●さん
5 ■さん
6 □さん


n (人数変動するため最後を仮にn)

上記の様なファイルが3つありまして、
各ブックのデータをコピペで
一つのファイルにまとめたいと思っています。(出勤簿4.xls)

月によって変動する横の値(日数)と、
ファイルや月毎に変動する縦の値(人数)のおかげで
うまく、範囲のコピペが出来ずに困っております。

どなたか良い方法ありましたらお教えください。
宜しくお願いします。

【49459】Re:ブックのデータを1ブックに統合する
発言  Kein  - 07/6/5(火) 18:11 -

引用なし
パスワード
   月の初めか終わりに一度、処理すればよい。みたいな印象を受けましたが
>出勤簿1.xls、出勤簿2.xls、出勤簿3.xls
は、いつの時点でどのように作成(特に日付の部分など)し
>出勤簿4.xls
は、いつの時点でどの部分を、どうまとめたいのでしょーか ?
あと、それらのデータがあるシート名も書くこと。ブックに直接データを
入力することはできませんから。

とにかく現状ではあまりに説明不足で、答えようがありません。

【49477】Re:ブックのデータを1ブックに統合する
発言  生茶  - 07/6/6(水) 9:39 -

引用なし
パスワード
   ▼Kein さん:
>月の初めか終わりに一度、処理すればよい。みたいな印象を受けましたが
>>出勤簿1.xls、出勤簿2.xls、出勤簿3.xls
>は、いつの時点でどのように作成(特に日付の部分など)し
>>出勤簿4.xls
>は、いつの時点でどの部分を、どうまとめたいのでしょーか ?
>あと、それらのデータがあるシート名も書くこと。ブックに直接データを
>入力することはできませんから。
>
>とにかく現状ではあまりに説明不足で、答えようがありません。

Keinさん、ご返信ありがとうございました。
返事が遅くなり、また説明内容が足りなくもうしわけありません。

>は、いつの時点でどのように作成(特に日付の部分など)し
出勤簿1〜3は手打ちで作成され送られてきます。

>は、いつの時点でどの部分を、
纏める契機ですが考えてませんでした。
出勤簿4の中にボタンを作る方向で行こうと思います。
月に一度、出勤簿が3種類揃った時点で
出勤簿4のsheet1内にあるボタンクリックで3つのブックからデータをコピーし
4つ目に貼り付ける感じで。

6月の例)出勤簿1.xlsには30人(実際は固定ではない)6月分(30日まで)
だとすると、データを抜き出したいのは、A3〜AE32の範囲になります。

>どうまとめたいのでしょーか ?
出勤簿1のデータコピー、出勤簿4のsheet1のA1から貼り付けです。
出勤簿2のデータコピー、上記の続きから貼り付けといった感じです。
出勤簿3             〃

>あと、それらのデータがあるシート名も書くこと。ブックに直接データを
>入力することはできませんから。
各ブック(出勤簿1〜4)のデータがあるシート名はsheet1になります。

【49495】Re:ブックのデータを1ブックに統合する
回答  Kein  - 07/6/6(水) 17:45 -

引用なし
パスワード
   単純にコピペするだけでいい、ということでしょーか ? ならば・・

Sub MyData_Copy()
  Dim BAry As Variant
  Dim DCnt As Integer, i As Integer
  Dim MyB As Workbook, MyS As Worksheet

  BAry = Array("出勤簿1.xls", "出勤簿2.xls", "出勤簿3.xls")
  DCnt = Day(DateSerial(Year(Date), Month(Date) + 1, 0)) + 1
  Application.ScreenUpDating = False
  With ThisWorkbook
   .WorkSheets("Sheet1").Cells.ClearContents
   For i = 0 To 2
     Set MyB = Workbooks.Open(.Path & "\" & BAry(i))
     Set MyS = MyB.WorkSheets("Sheet1")
     MyS.Range("A1", MyS.Range("A65536").End(xlUp)) _
     .Resize(, DCnt).Copy .WorkSheets("Sheet1") _
     .Range("A65536").End(xlUp).Offset(1)
     MyB.Close False: Set MyS = Nothing: Set MyB = Nothing
   Next i
   .WorkSheets("Sheet1").Rows(1).Delete xlShiftUp
  End With
  Application.ScreenUpDating = True
End Sub

【49511】Re:ブックのデータを1ブックに統合する
お礼  生茶  - 07/6/8(金) 10:33 -

引用なし
パスワード
   ▼Kein さん:
>単純にコピペするだけでいい、ということでしょーか ? ならば・・
>
ご解答ありがとございます。
度々返事が遅くなりまして申し訳ありません。。

単純にコピペするだけで問題ありません。
大本といいますか、根本的なものができれば、細かい調整
をするだけになりますので。。。

すぐには無理なのですが、教えていただいた物で挑戦してみたいと思います。

【49524】Re:ブックのデータを1ブックに統合する
発言  生茶  - 07/6/8(金) 16:47 -

引用なし
パスワード
   やっと挑戦する時間が取れたのでやってみました。

結果、見事にコピペが出来ました。
ただ、各ブックのシート毎にある、
1〜30(月毎)
B〜AE
の値まで転記されてしまいます。

行の一番上のみ日付(1〜30)を入れるようにしたいのですが、
可能でしょうか?

【現結果】
  A      B C D   AE(月によって変動)
1 ○月分シフト
2 名      1 2 3........ 31
3 ○さん    A B C....... A (シフトコード:A勤やB勤)
4 ●さん
5 ■さん
6 □さん
(省略)
40        1 2 3.........31 ←省きたい行
41 △さん
42 ▲さん
(省略)
50        1 2 3.........31 ←省きたい行
.
.
.

【49525】Re:ブックのデータを1ブックに統合する
回答  Kein  - 07/6/8(金) 16:55 -

引用なし
パスワード
   つまり、最初のコピー以外は日付の行を入れたくない、というわけですね。

Sub MyData_Copy()
  Dim BAry As Variant
  Dim DCnt As Integer, i As Integer
  Dim MyB As Workbook, MyS As Worksheet
  Dim Ad As String '追加

  BAry = Array("出勤簿1.xls", "出勤簿2.xls", "出勤簿3.xls")
  DCnt = Day(DateSerial(Year(Date), Month(Date) + 1, 0)) + 1
  Application.ScreenUpDating = False
  With ThisWorkbook
   .WorkSheets("Sheet1").Cells.ClearContents
   For i = 0 To 2
     Set MyB = Workbooks.Open(.Path & "\" & BAry(i))
     Set MyS = MyB.WorkSheets("Sheet1")
    If i = 0 Then
      Ad = "A1"
    Else
      Ad = "A2"
    End If
     MyS.Range(Ad, MyS.Range("A65536").End(xlUp)) _
     .Resize(, DCnt).Copy .WorkSheets("Sheet1") _
     .Range("A65536").End(xlUp).Offset(1)
     MyB.Close False: Set MyS = Nothing: Set MyB = Nothing
   Next i
   .WorkSheets("Sheet1").Rows(1).Delete xlShiftUp
  End With
  Application.ScreenUpDating = True
End Sub

で、どうかな ?

【49535】Re:ブックのデータを1ブックに統合する
お礼  生茶  - 07/6/9(土) 8:38 -

引用なし
パスワード
   ▼Kein さん:
ご返事、ありがとうございます。
教えていただいた物で実行しましたところ、
思い通りの動きになりました!

まだまだ、知識が足りなく、どんな動きをどのコードでできるのかが
不明な点が多いため、色々知識をお借りすることも多々あると思いますが
これからも宜しくお願い致します。

では、ありがとうございました。

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