[[20200522101002]] 『同じ日付を選択したデータの統合について』(tak) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同じ日付を選択したデータの統合について』(tak)

_A__B___C_____D___

 1   名前  日付     薬
 2    a   2002/8/1   A   
 3    a   2004/10/2  A     
 4    a   2004/10/2  B
 5    a   2004/10/2  C        
 6    b   2002/8/1   A  
 7    b   2002/8/1   C
…
このようなシートを同じ日付のものは以下のような形式に統合したいと考えております。
_A_____B____C_________D___
 1   名前  日付     薬
 2    a   2002/8/1   A   
 3    a   2004/10/2  A&B&C 
 4    b   2002/8/1   A&C

データが膨大なので関数でうまく処理できればと考えておりますが良い方法はございますでしょうか。ご教授よろしくお願い致します。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >>データが膨大なので関数でうまく処理できればと
こんにちは VBA、配列で。。。でも軽く済むと思いますが。。。多分(*^^;*)
まさか、100万件じゃないですよね。。。(#^.^#)
マクロ世界ゑのいざない。。。でした・・・(^◇^)。。。m(_ _)m
(隠居じーさん) 2020/05/22(金) 16:30

今回扱っているデータについてはそこまでの件数はございません。ご返事ありがとうございます。

マクロは勉強中で自分ではうまく組むことが出来ないのですが、マクロを使った場合にはどのようにするのがよろしいでしょうか?
(tak) 2020/05/22(金) 16:36


 こんにちはぁ〜 ^^ 
色々良い方法は有るとは存じますが概ね、下記のような事でも、出来なくは無いかと。。。m(_ _)m
Sheet1 が既存の情報シートで、選別したものをSheet2を初期化後書き出しています。保存名は現在固定です。zProgramIDで保存してからでないとエラー
になります。適宜、変更してください。
要バックアップ必須です。。。^^;。。。では
Option Explicit
Sub OneInstanceMain()
    Const zProgramID  As String = "IJ00015.xlsm"
    Dim zTb           As Workbook
    Dim i             As Long
    Dim y             As Long
    Dim x             As Long
    Dim zBase()       As Variant
    Dim zD            As Object
    Dim zVar          As Variant
    Set zD = CreateObject("Scripting.Dictionary")
    Set zTb = Workbooks(zProgramID)
    With zTb.Worksheets("Sheet1")
        zBase = .Cells(1).CurrentRegion.Value
    End With
    For i = LBound(zBase, 1) + 1 To UBound(zBase, 1)
        zD(zBase(i, 1) & Chr(31) & zBase(i, 2)) = zD(zBase(i, 1) & Chr(31) & zBase(i, 2)) & zBase(i, 3) & Chr(30)
    Next
    With zTb.Worksheets("Sheet2")
        .UsedRange.Clear
        y = 2: x = 1
        For Each zVar In zD
            .Cells(y, x).Resize(, 2) = Split(zVar, Chr(31))
            .Cells(y, x + 2).Resize(, UBound(Split(zD(zVar), Chr(30))) + 1) = Split(zD(zVar), Chr(30))
            y = y + 1
        Next
        .Cells(1).Resize(, 2) = Array("名前", "日付")
        .Cells(1, 3).Resize(, .UsedRange.Columns.Count - 2) = "薬"
    End With
    Erase zBase
    Set zD = Nothing
    Set zTb = Nothing
End Sub
(隠居じーさん) 2020/05/22(金) 17:44

隠居じーさん様、ありがとうございました。

無事コード実行することが出来ました。自分で今後はこういうコードが組めるように勉強していきたいと思います。ありがとうございました!
(tak) 2020/05/23(土) 06:57


 おはようございます。^^ すみません。。。
もう見ておられないかもですが。多分、ユニークなキー作成部分は問題はないと思うのですが
ただ、書き戻した時点で、日付が文字列になっていませんでしょうか。。。出来れば、連想配列
使用時点で数値に明示的に変換しておくと良いかもしれません。← やってないのでまだ解りません^^;
いまから、やってみます。 ← あわてている ^^;。。。m(_ _)m
(隠居じーさん) 2020/05/23(土) 08:02

 ま!ご必要でしたら変換お掛けいただくという事で ^^;。。。なんでしたら
また、お申し付け下さいませ。お騒がせいたしました。何れにいたしましても、
ご考察の一助にでもなれば、幸甚です。でわでわ。。。( ̄▽ ̄;)。。m(_ _)m
(隠居じーさん) 2020/05/23(土) 08:48

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.