Excel VBA質問箱 IV

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

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


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

【76615】結合セルがあるシートを転記してまとめる あおもりVBA 15/2/10(火) 22:55 質問[未読]
【76616】Re:結合セルがあるシートを転記してまとめる マナ 15/2/11(水) 0:54 発言[未読]
【76617】Re:結合セルがあるシートを転記してまとめる あおもりVBA 15/2/11(水) 8:06 質問[未読]
【76618】Re:結合セルがあるシートを転記してまとめる マナ 15/2/11(水) 8:54 発言[未読]
【76619】Re:結合セルがあるシートを転記してまとめる あおもりVBA 15/2/11(水) 17:13 お礼[未読]

【76615】結合セルがあるシートを転記してまとめる
質問  あおもりVBA  - 15/2/10(火) 22:55 -

引用なし
パスワード
   VBA初心者ですが、業務で使用することとなり勉強しつつ対応しております。
今回、処理がわからず困っておりまして、ご教授頂けませんでしょうか?

やりたい事はファイルAに同じフォーマットのシートが数十枚あり、そのシートのデータを別のファイル、「統合」ブックの「まとめ」シート(フォーマットはファイルAと全く同じでデータが空のもの)に転記していきたいというものです。ただし、シートには転記不要なものが混じっており、そのシート名の一部には(不要)と記載があります。
データの一部に空欄があるのでまとめシートには一列だけ空欄を埋めたい列があります。
また、シートのフォーマットは結合セルでできており、そこがまた悩んでおります。

・データは6行目から入っている
・データはC6:J6、K6:L6、M6:T6、U6:V6、W6:X6、Y6:AL6の結合されたセルから縦に入っており、下行に同じように結合されています。C7:J7、K7:L7・・・。
・M6:T6の列に入っているデータは空白は無いのですが、他の列は途中に空白もあります。
転記した際に、まとめシートにはC6:J6の列のみ全て空白を埋めたく、どのシートもC6:J6の一行目セルには必ずデータが入っておりますのでそのセルの文字をコピーして最下行まで埋めながらまとめたいです。
・M6:T6のセルのデータのみ全項目入っているので最下行を求める時は、M6を基準にしてみました。
・ファイルAの複数シートのデータを転記したいが、(不要)と一部文字が入ったシート名については転記不要です。
・データは数字、文字です。

本を見ながら、ちぐはぐですがつなぎ合わせたコードが下記のものとなります。
ファイルAのシート全部(不要シートはあるが)を処理する繰り返し処理が上手く出来ず、とりあえず、「青森支店」シート「秋田支店」シートの二つのシートをコピーして貼り付け、C列にはM列に文字が入っていれば一番上の文字と同じ値を入れるとしてみましたが・・。
また、C列の空欄を埋める方法にも苦戦しています。

For Each〜を使い、*(不要)*シート以外でループするのだろうとは思うのですがなかなか上手くいかず、助けていただけませんでしょうか。
他サイトを見ましたが、結合セルが邪魔して同じように出来ず・・。

つたないコードですが、ご教授お願いできませんでしょうか。

Sub 統合()

Dim Co, Co2 As Integer
Dim sh As Worksheet
Dim all, Last, Last2,LastN As Integer

ThisWorkbook.Activate
Worksheets("青森支店").Select
Co = Range("M6").End(xlDown).Row
Range("C6:Y" & Co).Select
Selection.Copy

Workbooks("統合.xls").Activate
Worksheets("まとめ").Range("C6:J6").PasteSpecial xlPasteValuesAndNumberFormats

Last = Range("M6").End(xlDown).Row

For all = 1 To Last

If Range("M5").Offset(all).Value <> "" Then
Range("C6").Offset(all - 1).Value = Range("C6:J6").Value

End If
Next

Last = Last + 1

ThisWorkbook.Activate
Worksheets("秋田支店").Select

Co2 = Range("M6").End(xlDown).Row
Range("C6:Y" & Co2).Select
Selection.Copy

Workbooks("統合.xls").Activate
LastN = Range("C6:J6").End(xlDown).Row
Worksheets("まとめ").Range("C6:J6").End(xlDown).Offset(1).PasteSpecial xlPasteValuesAndNumberFormats
Last2 = Range("M6").End(xlDown).Row

For all = 1 To Last2 - Last

If Range("M" & LastN).Offset(all).Value <> "" Then
Range("C" & LastN + 1).Offset(all).Value = Range("C6:J6").End(xlDown).Value

End If
Next

Last2 = Last2 + 1

End Sub

【76616】Re:結合セルがあるシートを転記してまと...
発言  マナ  - 15/2/11(水) 0:54 -

引用なし
パスワード
   動かしていませんので、とんでもない結果かもですが、そのときはごめんなさい。

Sub 統合()
  Dim ws As Worksheet, dstWs As Worksheet
  Dim dstCel As Range
  Dim n As Long, r As Long
  
  Set dstWs = Workbooks("統合.xls").Worksheets("まとめ")
  
  For Each ws In ThisWorkbook.Worksheets
    If Not ws.Name Like "*不要*" Then
      Set dstCel = dstWs.Range("C6").Offset(n)
      With ws
        With .Range("C6:Y" & .Range("M" & .Rows.Count).End(xlUp).Row)
          .Copy dstCel
          r = .Rows.Count
        End With
      End With
  
      With dstCel
        .Resize(r).Value = .Value
      End With
      n = n + r
    End If
  Next

End Sub

【76617】Re:結合セルがあるシートを転記してまと...
質問  あおもりVBA  - 15/2/11(水) 8:06 -

引用なし
パスワード
   マナ様

ご教授ありがとうございます。
早速動かしてみましたが、以下の部分で
「結合されたセルの一部は変更することができません」
と表示されます。
私もサンプルで上記コードを作成している際によくでてきました。
結合セルですと、普通に「.copy」としてもダメなのでしょうか?

>          .Copy dstCel

【76618】Re:結合セルがあるシートを転記してまと...
発言  マナ  - 15/2/11(水) 8:54 -

引用なし
パスワード
   With .Range("C6:Y" & …
の部分を
With .Range("C6:AL" & …

どうなるか確認してもえますか。

【76619】Re:結合セルがあるシートを転記してまと...
お礼  あおもりVBA  - 15/2/11(水) 17:13 -

引用なし
パスワード
   マナ さん:

ご対応頂きありがとうございます。
上記のように変更しましたら、正しく動きました!

本当にありがとうございました。
教えて頂いたコードをこれからじっくり見させて頂いて勉強したいです。
私も早くこのようなコードが書けるようになりたいと思います。

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

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