- ベストアンサー
同じグループの人のメアドを1つのセルにまとめたい
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
マクロで宜しければ Sub Test() Dim c As Range, myR As Variant For Each c In Range("A1", Cells(Rows.Count, "A").End(xlUp)) myR = Application.Match(c.Value, Columns(6), 0) If Not IsError(myR) Then Cells(myR, "G").Value = Cells(myR, "G").Value & ";" & c.Offset(, 1).Value Else With Cells(Rows.Count, "F").End(xlUp).Offset(1) .Value = c.Value .Offset(, 1).Value = c.Offset(, 1).Value End With End If Next End Sub
その他の回答 (3)
- msMike
- ベストアンサー率20% (364/1804)
[No.3]に対してナシのツブテですかぁ~! 最大10個としておきませう。 ちなみに、貴方は明記してないけど、私のは Excel 2013 でっす。 お示しのシートを Sheet1 としておきます。 1.Sheet1 の列Aを Sheet2 の列Aにコピべ 以下は Sheet2 における操作です。 2.Sheet2 の列A選択 ⇒ Alt+AM ⇒ “現在選択されている範囲を  ̄ ̄並べ替える”に目玉入れ ⇒ [重複の削除]をチョーン ⇒ [OK] ⇒  ̄ ̄[OK] 3.式 =COUNTIF(Sheet1!A1:A10,A1) のフィルハンドルを  ̄ ̄「エイヤッ!」とダブクリ 4.次式を入力したセル C1 を右方にズズーッと(セル L1 まで)  ̄ ̄オートフィル  ̄ ̄ =IF(COLUMN(A1)>$B1,"",INDEX(Sheet1!$B$1:$B$10,SMALL(IF(Sheet1!$A$1:$A$20=$A1,ROW($A$1:$A$20)),COLUMN(A1))))  ̄ ̄【お断り】上式は必ず配列数式として入力のこと 5.範囲 C1:L1 のフィルハンドルを「エイヤッ!」とダブクリ 以下kは Sheet3 における操作です。 6.列Aは空白のまま放置して、式 =A1&" "&Sheet2!C1 を入力  ̄ ̄したセル B1 を右方にズズーッと(セル K1 まで)オートフィル 7.範囲 B1:K1 を下方にオートフィル(その必要行数は実行して  ̄ ̄みれば自ずから判明!) 以下は Sheet1 における操作です。 8.式 =SUBSTITUTE(TRIM(Sheet3!K1)," ","; ") を入力したセル  ̄ ̄G1 を下方にオートフィル
お礼
なかなか見に来られなくてすみません。10個でOKでした。ありがとうございました。
- msMike
- ベストアンサー率20% (364/1804)
》 1グループのメアドは最大3個とは限りません。) じゃあ、最大何個とすれば御の字ですか? 5個?10個?50個?100個?1000個?まさかぁ!
- imogasi
- ベストアンサー率27% (4737/17069)
処理ステップは大きく分けて (1)修正キーを作成 (2)ソート (3)完成表作成 Split関数の多用が特徴。 ーー Sheet1 元データシート Sheet3 完成表シート (B列は幅を十分広く取っておく) ーー 例データ Sheet1のB、C、D列 ただしC,D列はプログラムで作成し付け加えたもの D列データは、後処理に重要。 B列 C列 D列 aaa@kuma.ne.jp kuma.ne.jp kuma ddd@kuma.ne.jp kuma.ne.jp kuma bbb@1.neko.ne.jp 1.neko.ne.jp neko fff@2.neko.ne.jp 2.neko.ne.jp neko ccc@usagi.com usagi.com usagi eee@usagi.com usagi.com usagi ggg@usagi.com usagi.com usagi ーーー 標準モジュールに Sub urlhenkei2() Worksheets("Sheet1").Select lr = Worksheets("Sheet1").Range("B100000").End(xlUp).Row MsgBox lr For i = 1 To 7 w = Cells(i, "B") '---第1文字から、@までを削除ーー>結果C列へセット p = Split(w, "@") w = p(1) 'wは@マーク以後文字列 Cells(i, "C") = p(1) '======================== '---ピリオドの数をカウント w1 = Replace(w, ".", "") 'ピリオッドを消して psuu = Len(w) - Len(w1) '減少文字数を計算 '======= v = Split(p(1), ".") '-ピリオドの数で、場合分け Select Case psuu '--結果D列にセット '--- Case 1 '1つの場合 Cells(i, "D") = v(0) '--- Case 2 '2つの場合 v = Split(p(1), ".") Cells(i, "D") = v(0) '--- Case 3 '3つの場合 Cells(i, "D") = v(1) '--- End Select Next i '===== '--D列でソート Range("a1:d7").Sort key1:=Range("d1") '====結果表作成 Sheet3に作る 'Sheet3の B列の列幅を十分広く設定のこと k = 0 mae = "" '--- For i = 1 To 7 If Worksheets("Sheet1").Cells(i, "D") = mae Then Worksheets("Sheet3").Cells(k, "B") = Worksheets("Sheet3").Cells(k, "B") & "; " & Worksheets("Sheet1").Cells(i, "B") mae = Worksheets("Sheet1").Cells(i, "D") 'Key項目 Else k = k + 1 Worksheets("Sheet3").Cells(k, "B") = Worksheets("Sheet1").Cells(i, "B") mae = Worksheets("Sheet1").Cells(i, "D") 'Key項目 End If Next i End Sub ーー Sheet3は(1-3行目) aaa@kuma.ne.jp; ddd@kuma.ne.jp bbb@1.neko.ne.jp; fff@2.neko.ne.jp ccc@usagi.com; eee@usagi.com; ggg@usagi.com ==== 質問文の >同じグループの人 の解釈(割り出し方)に不十分な点があるかもと、思いながら作った。 1.neko.ne.jpと2.neko.ne.jp2 は同グループと考えるのかな。ISPなどは、 会員によって、サーバーを分けている例は多いようだが。 別にして考える場合も、上記コードを数行修正すれば出来そうだが。
お礼
ありがとうございました。
お礼
ありがとうございました。 いちばん作業工数が少なくて簡単でしたので、ベストアンサーとさせていただきました。