[[20040812094739]] 『文字の連結・単一化』(まちまち) ページの最後に飛ぶ

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

 

『文字の連結・単一化』(まちまち)

初めて質問します。
初歩的なことなのかもしれませんが、教えて頂ければ幸いです。

下記のような表があります↓

氏名 1日  2日  3日 …

A氏 東京  在社  愛知

A氏 東京      名古屋

A氏 東京      神奈川

B氏 在社  東京  神奈川

B氏     東京  東京

これをA氏の1日、2日…ごとの出張先に集計させたいのです。
集計後、

   1日  2日  3日

A氏 東京  在社  愛知名古屋神奈川

B氏 在社  東京  神奈川東京

と、同じ日に同じ場所が入っている場合は単一化され、
違う場所の場合は、連結させて出てくるような、いい方法はないでしょうか?
よろしくおねがいします。


 まこです。以下のユーザー関数ではいかがでしょうか?
 (エクセル標準関数でも可能かもしれませんが、思いつきませんでした)
 Alt + F11 で起動するVisual Basic Editor 上で、
 [挿入]-[標準モジュール]、右側に大きな白いウィンドウ?が表示されますので、
 以下のコードを貼り付けてください。
 その後、エクセル上で

     A      B      C       D
 1 氏名 1日  2日  3日 …
 2 A氏 東京  在社  愛知
 3 A氏 東京      名古屋
 4 A氏 東京      神奈川
 5 B氏 在社  東京  神奈川
 6 B氏     東京  東京
 7
 8 A氏  =rennketsu(A8,$A$2:$D$6,2) =rennketsu(A8,$A$2:$D$6,3) =rennketsu(A8,$A$2:$D$6,4)
 9 B氏  =rennketsu(A9,$A$2:$D$6,2) =rennketsu(A9,$A$2:$D$6,3) =rennketsu(A9,$A$2:$D$6,4)  

 などと、vlookup関数のように用いてください。
 なお、氏名の列は、並び替えされていることを前提としています。

 Function rennketsu(Key, Area, No)
 'Key  検索値
 'Area 範囲
 'No   列番号

    Dim ans As String, i As Integer
    ans = ""
    Dim tbl As Range
    Set tbl = Range(Area.Address)
    For i = 1 To tbl.Rows.Count
        If i = 1 And tbl.Cells(i, 1) = Key Then
            ans = ans & tbl.Cells(i, No)
        ElseIf tbl.Cells(i, 1) = Key Then
            If tbl.Cells(i, 1) <> tbl.Cells(i - 1, 1) Then
                ans = ans & tbl.Cells(i, No)
            ElseIf tbl.Cells(i, No) <> tbl.Cells(i - 1, No) Then
                ans = ans & tbl.Cells(i, No)
            End If
        End If
    Next i
    rennketsu = ans
 End Function

 PS 
 弥太郎様、[[20040811184828]]内でご紹介されていた関数keiko()をほとんどそのまま使わせていただきました。
 とても勉強になりました。感謝です。

コメント返信:

[ 一覧(最新更新順) ]


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