[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字の連結・単一化』(まちまち)
初めて質問します。
初歩的なことなのかもしれませんが、教えて頂ければ幸いです。
下記のような表があります↓
氏名 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.