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