Excel VBA質問箱 IV

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

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


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

【60082】データの統合について mao 09/1/26(月) 22:26 質問[未読]
【60083】Re:データの統合について ponpon 09/1/27(火) 0:01 発言[未読]
【60101】Re:データの統合について ponpon 09/1/27(火) 15:08 発言[未読]
【60085】Re:データの統合について にぃ 09/1/27(火) 9:34 発言[未読]
【60108】Re:データの統合について mao 09/1/27(火) 19:06 お礼[未読]

【60082】データの統合について
質問  mao  - 09/1/26(月) 22:26 -

引用なし
パスワード
   こんばんは。
質問させていただきます。

下記のAAA.xlsとBBB.xlsのL列を新しい.xlsに統合させたいのすが、

<AAA.xls>
  A     B   C  D  ・L
1 会社CODE 会社名      個数
2 00001   A会社      20
3 00002   B会社      
4 00005   C会社      30
5 00011   H会社・・           
 ・・・   ・・
<BBB.xls> 
  A     B   C  D  ・L
1 会社CODE 会社名      個数
2 00001   A会社      
3 00002   B会社      60
4 00005   C会社      
5 00011   H会社  ・・  50

<新しい.xls>
  A     B   C  D  ・L
1 会社CODE 会社名      個数
2 00001   A会社      20
3 00002   B会社      60
4 00005   C会社      30
5 00011   H会社      50

(AAA・BBBの項目行・A〜K列のセル内容は同じになります。データは100行〜200行位はいっております。)
(L列のセルのデータは、ランダムに重複することなく入っていることを
前提としています。データが入っていないセルは空白です。)

データの統合をしますと空白セルがあるせいか?統合がうまくいきませんでした。

L列を見て、データが入っていたらコピーという(「【59769】条件下でのコピー」を少し変更したようなもの?)マクロになるのでしょうか?

アドバイス等、いただければと思います。
どうぞよろしくお願いいたします。

【60083】Re:データの統合について
発言  ponpon  - 09/1/27(火) 0:01 -

引用なし
パスワード
   3つのworkbookは、すべて開いているもの
また、AAA.xls、BBBxlsのL列に重複がないものとして、

AAA.xls、BBBxls それぞれのL列を見ていって、""でなければ、
その行をコピーして新規ブックに貼り付ける。
(配列に入れて一気にはき出した方が速いと思います。)

最後に並べ替えをする。

新規ブックに

Sub test()
  Dim WB1 As Workbook
  Dim WB2 As Workbook
  Dim NWB As Workbook
  Dim r As Range
  
  Set WB1 = Workbooks("AAA.xls")
  Set WB2 = Workbooks("BBB.xls")
  Set NWB = ThisWorkbook

  Application.ScreenUpdating = False
  With NWB.Sheets("Sheet1")
    .Cells.Clear
    .Range("A1:L1").Value = WB1.Sheets("Sheet1").Range("A1:L1").Value
  End With
  With WB1.Sheets("Sheet1")
    For Each r In .Range(.Cells(2, "L"), .Cells(.Rows.Count, "L").End(xlUp))
      If r <> "" Then
        r.Offset(, -11).Resize(, 12).Copy NWB.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1)
      End If
    Next
  End With
  With WB2.Sheets("Sheet1")
    For Each r In .Range(.Cells(2, "L"), .Cells(.Rows.Count, "L").End(xlUp))
      If r <> "" Then
        r.Offset(, -11).Resize(, 12).Copy NWB.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1)
      End If
    Next
  End With
  With NWB
     .Sheets("Sheet1").Range("A1").CurrentRegion.Sort Key1:=.Sheets("Sheet1").Range("A2"), _
      Order1:=xlAscending, Header:=xlGuess
  End With
  Application.ScreenUpdating = True  
End Sub

【60085】Re:データの統合について
発言  にぃ  - 09/1/27(火) 9:34 -

引用なし
パスワード
   ▼mao さん:
こんにちは!

>(AAA・BBBの項目行・A〜K列のセル内容は同じになります。データは100行〜200行位はいっております。)
>(L列のセルのデータは、ランダムに重複することなく入っていることを
>前提としています。データが入っていないセルは空白です。)
とあるので、A〜K列のセル内容がまったく同じなら別案としてコピー&ペーストの
[形式を選択して貼り付け]ダイアログの[空白セルを無視する]をしては
いかがでしょう?

参考URL
ht tp://www.relief.jp/itnote/archives/002522.php

こちら手作業ですがもちろんVBAでも出来ます。
ただ、この方法でよければ手作業だけでも十分そうです^^;

【60101】Re:データの統合について
発言  ponpon  - 09/1/27(火) 15:08 -

引用なし
パスワード
   >配列に入れて一気にはき出した方が速いと思います。
DIctionaryで作ってみました。
Sub test()
  Dim myDic As Object
  Dim WB1 As Workbook
  Dim WB2 As Workbook
  Dim NWB As Workbook
  Dim r As Range
  Dim i As Long
  
  
  Set myDic = CreateObject("Scripting.Dictionary")
  Set WB1 = Workbooks("AAA.xls")
  Set WB2 = Workbooks("BBB.xls")
  Set NWB = ThisWorkbook

  Application.ScreenUpdating = False
  With NWB.Sheets("Sheet1")
    .Cells.ClearContents
    .Range("A1:L1").Value = WB1.Sheets("Sheet1").Range("A1:L1").Value
  End With
  With WB1.Sheets("Sheet1")
    For Each r In .Range(.Cells(2, "L"), .Cells(.Rows.Count, "L").End(xlUp))
      If r <> "" Then
        myDic(i) = r.Offset(, -11).Resize(, 12).Value
        i = i + 1
      End If
    Next
  End With
  With WB2.Sheets("Sheet1")
    For Each r In .Range(.Cells(2, "L"), .Cells(.Rows.Count, "L").End(xlUp))
      If r <> "" Then
        myDic(i) = r.Offset(, -11).Resize(, 12).Value
        i = i + 1
      End If
    Next
  End With
  With NWB.Sheets("Sheet1")
     .Range("A2").Resize(myDic.Count, 12).Value = Application.Transpose(Application.Transpose(myDic.Items))
     .Range("A1").CurrentRegion.Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess
  End With
  Application.ScreenUpdating = True
End Sub

【60108】Re:データの統合について
お礼  mao  - 09/1/27(火) 19:06 -

引用なし
パスワード
   ponponさま・にぃさま

返信が遅くなり、申し訳ありません。

ponponさま
・・・・すごいコードですね。。!
    まだまだ未熟なもので、ヘルプを見つつ、じっくりとコードを読ませていただきます。
    しかも二つも作成いただき、ありがとうございます。
    明日、会社で早速試してみたいと思います。

にぃさま
・・・・空白を無視する、ですね。普段形式を選択して貼り付けをしているのにもかかわず、全く気付きませんでした・・・。参考URLもありがとうございました!
    
    

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