1519006959 住所録にチェックを入れた対象のメールアドレスを結合したいのですが、一括で処理する方法を教えて下さい

元データは画像の通りです。
A列に○印を付けた対象のメールアドレスを区切り文字「;」で連結して、
yamada@example.com;suzuki@ezweb.ne.jp
のように出力したいです。
例えばH列を作業列にして、
H1 =IF(A1="○",E1,"")
H2 =IF(A2="○",H1&";"&E2,H1)
としてH2をオートフィルで下まで持っていけば用事としては足りるのですが、
データ数が増えていく予定なのでなるべく手作業を減らしたく、関数で処理できればと思います。
TEXTJOIN関数・CONCATENATE関数を調べてみましたが、思う結果が得られそうになく質問しました。
宜しくお願い致します。
※セル当たりの32767文字制限がありますが、それは超えない予定です

回答の条件
  • 1人20回まで
  • 13歳以上
  • 登録:2018/02/19 11:22:39
  • 終了:2018/02/26 11:25:04

回答(1件)

id:kimuram No.1

kimuram回答回数19ベストアンサー獲得回数72018/02/19 14:40:59

"関数で処理できれば"
というところの意味、意図が読み取れないところがあるのですが、
VBA、ユーザー定義関数でも構わないのであれば、と考えてみました。
(ただし、VBA使用となれば、エクセルブックの保存タイプも「.xlsm」にしなければならない点はどうしてもVBAを全く使用しないブックのときの「.xlsx」で済むのに比べ異なる点となりますが。)

Function mailIdConcat()
Dim trgSh As Worksheet
Dim wkLastRow
Dim wkResult
Dim wkI
'処理対象とするワークシート
Set trgSh = ActiveSheet
'最終行番号を求める
wkLastRow = trgSh.UsedRange.Rows.Count

wkResult = ""
For wkI = 2 To wkLastRow
If trgSh.Range("A" & wkI) = "〇" And trgSh.Range("E" & wkI) <> "" Then
'〇印あってもメールIDが空の場合は処理対象外とする
wkResult = wkResult & trgSh.Range("E" & wkI) & ";"
'先頭にセミコロン付けない意味で最後に付加する方式で進める
End If
Next wkI

If wkResult = "" Then
mailIdConcat = "Data Nothing!"
'対象物がひとつもない場合のメッセージ代わり
Else
mailIdConcat = Left(wkResult, Len(wkResult) - 1)
'区切りセミコロンの最後のものを除去する
'(メールの送信先指定では最後にコロンが有っても支障ないと思うが)
End If
End Function


このユーザー定義関数を呼び出す式を例えばセルI1に次のように
=mailIdConcat()

入力すれば、そのセルに結果が表示される。

ただし、問題がひとつ。
ワークシート内のデータを変更しても、この結果表示内容は自動的には更新されない。
これを手動でキックする方法として、その式の入っているセルI1をダブルクリックするなりして編集モードにしてから空エンターをすることで、その時点で内容が更新される。

これが運用上問題であれば、さらに次の方法として、もう一つのsubプロシジャーを、例えば次のように
Sub mailIdConcat起動()
Range("I1") = "=mailIdConcat()"
'セルI1が結果を表示するセルの場合
End Sub

のように作成して、このマクロを起動する図形などをワークシートの見やすいところに配置し、
任意の時点でこの図形をクリックして、VBAマクロを起動し、その延長でユーザー定義関数設定のセルを再入力する形でのトリガーとして、ユーザー定義関数を実行する、
との仕掛けになる。
(この場合にはマクロでI1セルの式を入力することにもなってるので、あらかじめの式入力は不要とではあるが)

まあ、結局のところであるけど、このようにSubプロシジャーを経由してユーザー定義関数を起動することとしてしまうと、何もユーザー定義関数にするまでの必要もなく、subプロシジャーの中で処理をして、それを目的のセルに結果を表示すれば良い、ともなり、
回り道しているようなことになっている。
(意味としてはもっと別のことが考えられるかも知れないが)

以上、質問者様が初めから言われている方法でも、オートフィルをセル右下隅の+マークをダブルクリックするなどの操作なりで、結構運用には耐えるとも思ったりしたものですが、VBAで、起動用図形を設けての操作を構成すればワンクリックでの操作にもなって運用性は十分かと思います。あとはVBAに関するメンテナンス性とかでしょうか。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません