其ノ21 飛び飛びに入っている文字列を結合する
ハイ、本日は、飛び飛びのセルに入っている文字を結合する、というのをやりましょう。 どういうものかというと、こういうの↓です※1。

A欄~E欄まであって、それをカンマでつなぎたい。
これが今日のミッションです。
…実は、B列にすでに答えを入れてあります。
つまり、B列の値がゴール、なのですが、、じゃあここまでどうやってもっていくか。
一緒に考えてみましょう。
この問題、実はExcel2016だとtextjoin関数ってヤツを使うと解決する、らしいんですよ。 「らしい」って言うのは、…ぼくが実はまだExcel2016を使えてないからで、なのでたしかめたわけではないのですが、どうやらそうらしいです。 でも、2016より前のバージョンだと結局textjoinは使えないので、下記の話を一応は知っておいた方がよいでしょう。
とりあえずカンマでつないでみるか…
この作業、どうやってやりますか?
…とりあえず、手作業はちょっと手間がかかりすぎるよなあ。
だから、式を使ってやることになるんだけど、…どうやろうかなあ。
文字列の結合の仕方についてはもうやりましたよね。
セル内容の結合には「&」を使います。
例えば、C2セルとD2セルをくっつけるには「=C2&D2」、あいだにカンマをはさみたい場合は「=C2&","&D2」とカンマをアンドではさんでやります。
ここまでは覚えています?
じゃあとりあえず、今回は結合しなきゃいけないセルが5個あるけど、コイツらを結合してみますか。 作業用の列を新しく挿入して、式を入れてみましょう※2 ※3。


A欄からE欄まで全部結合し、間に「,(カンマ)」はさむわけだから、
=D2&","&E2&","&F2&","&G2&","&H2
となるよね。
アンド カンマ アンド、アンド カンマ アンド、…ってな具合に。
ここまではオケイ?
そいじゃあ、この式をおしりまでコピーすると…※4。
…まあ、予想はついてると思うけど…。

こうなる。
「,B,C,D,」とか「,,,D,E」とか、先頭がカンマで始まったり、その逆でカンマ終わりだったり、あと、カンマが2つ3つ並んだり。
でも今回は、そういうよけいなカンマはなくしたいんですよ。
間をつなぐカンマは1つ、先頭にもおしりにもよけいなカンマは要らない、としたい。
最初の答えの、B列のように。
じゃあ、どうしよう。
例えば、入れる式を行によって変えていって、「この行はA欄とC欄とE欄が入ってるから、くっつけるのは3つ」とか「この行はB欄しか入っていないから…」とか判断しながら式を入れてくやり方もある。
フィルタをかけて、「A欄に入っていて、B欄にも入っていて、C欄にも…」と抽出しながら、とか。
項目数が少ない場合はそれでもよいんですよ。
2つとか3つとかだったら。
でも今回は結合対象が5つもあるし、組み合わせの数もめっちゃある。
…うーむ。
うむむ。
じゃあ。
…もうちょっと、がんばってみましょうか。 とりあえず、今機械的に結合したヤツ、値貼りしておいてください※5。

複数カンマを1コにしたい→置換
ハイ、では。
機械的にカンマで結合したコイツを、なんとか求めるかたちにもっていくことにしましょう。
まず、複数カンマが並んでいるのを何とかしようと思います。
使う機能は置換。
Ctrl+Hで置換を呼び出し、,,→,(カンマ2つ→カンマ1つ)に置換します※6。

こうすると、カンマが2コ並んでいるところが1コになります※7。
あ、そうそう、式を値貼りしておかないと置換がはたらかない(式なので、文字列と見なしてくれない)ので注意。
忘れず値貼りしておいてね。

うん、置換できた。
でも、まだカンマ2つのところ、ありますよね。
なのでこれを、「置換対象が見つからないからもう置換できないよ」ってところまで繰り返し置換します※8。
今回のケースだとおそらく、3回目で全部カンマ1コに置き換えることができるのでは。

ハイ、これで、カンマ連続しちゃう問題は解決です。 カンマが複数続いてるところ、なくなりましたよね。
カンマはじまり→midで2文字目以降をもってくる
次に、先頭カンマとカンマ終わりを何とかしましょう。
先に、先頭カンマから。
まず、作業用の列をとなりに作ってください。
ここに式をいれていきますゆえ。
そしたら、カンマで始まるところをフィルタで抽出していきます。
「フィルタ」→「テキストフィルター」→「指定の値で始まる」とし、始まりの文字に「,(カンマ)」を指定します※9 ※10。
そうすると、カンマ始まりのものを抽出できます※11。



そうしたら後は、最初のカンマは要らない=2文字目以降を抜き出せばよいから、mid関数を使って「=mid(D8,2,len(D8))」と入れてやります※12。
要するに、「2文字目からうしろ、全部の文字抜き出すぞ」、と。

mid関数は以下のように使います。 覚えてますよね? 不安な方は其ノ3まで戻りましょう。
・left関数 =left(取り出す元となるセル , 左から何文字分?)
・right関数 =right(取り出す元となるセル , 右から何文字分?)
・mid関数 =mid(取り出す元となるセル , 何文字目からスタート? , 何文字取り出す?)
上記mid関数内のlen関数のところですが、厳密には「=mid(D8,2,len(D8)-1)とマイナス1するのが正解なのですが(全文字数 - 最初の1文字)、別に元の文字数より多く指定しちゃってもエラーになったりはしないので問題ありません。
また、このmid関数のところは、right関数を使って「=right(D8,len(D8)-1)としてもOKです。
要は、最初の文字の手前(その分がマイナス1)まで、右から文字列引っ張る、ということ。
後はこの式をコピーしてやります。 先頭のカンマが消えていること、確認しておいてください※13。

ハイ、まだ終わりじゃないですよ。
先頭カンマのところが解決したら、一度フィルタを元に戻して※14、式の入っていないところ、つまり空白のところだけにします※15。
カンマはじまりじゃないところは、とりあえずそのままでよいですもんね。
なので、その処理をします。


作業列が「空白」のところはカンマはじまりじゃないので、そこはとなりとイコール、とします※16 ※17。 イコール式を入れてあげてください。


これでフィルタを戻せばOKです※18。 値貼りしておいてください。

これで、先頭カンマ問題は解決しました。
カンマ終わり→leftを使う
では次に、おしりのカンマ問題。
こちらも、先頭カンマのときと考え方は一緒です※19~24。
カンマ終わりのところを抽出して、今度はleft関数で「全文字数-1」を抜き出してやります。






こんな感じです。
よけいなカンマを取り除いたかたちで、A、B、C、D、E、を結合することができました。
飛び飛びのセル内容も、こういう手順をとれば結合できるんですね。
つまり、
・「置換」でカンマ2コ→1コに
・カンマはじまりをmid関数で処理
・カンマ終わりをleft関数で処理
という具合です。
ガッテンしていただけましたでしょうか。
…もうちょっと効率良いやり方ないのかな [trimした後空白を置換]
…うーん、なんとか、できた。 …だけど、もうちょっと楽なやり方、ないかなー…。
うん、ですよね。
じゃあ、もう1回やってみましょう。
さっきまで作業に使った列を削除して、初期状態に戻してください※25。

で、またA~Eまで結合するんだけど、今度は間にはさむ文字を半角スペース(空白)にします。
つまり、" "と、ダブルクォーテーション(チョンチョン)で半角スペースをはさんで、
=D2&" "&E2&" "&F2&" "&G2&" "&H2
と式を入れてやります※26。

「結合するのはカンマなのに、なぜ半角スペース?」と思う方もいらっしゃるかと思いますが、これにはワケがあるのです。
その点は後々処理しますので、とりあえず半角スペースでくっつけといてください。
じゃあ、式を入れたら、式をおしりまでコピーして、値貼り※27。

半角スペースで結合できたら、もう1列追加して、今度はtrimって関数を使います※28。
trim関数は、
=trim(対象セル)
って感じで指定し、対象文字列の単語間のスペースを1つずつ残して、不要なスペースは削除するというはたらきをします。
ちょっと、画面見ながら、ついてきてください。

式を入れたら、おしりまでコピーしてください※29。 trimの作用がわかります。

ね?
先頭のスペースは消えた、(実はおしりのスペースも消えてる、)そして文字間の連続スペースも1コになってる。
上で、trim関数について、「単語間のスペースを1つずつ残して、不要なスペースは削除する」と説明しました。
このはたらき、より詳細には、
・スペースが何個も続いている場合、文字間のスペースは1つだけにする
・スペースはすべて半角にする
・文字列先頭がスペースのとき(スペースはじまりのとき)は、それをトル
・スペース終わりの場合もトル
となります。
こういう汚いスペースの使い方、手入力の際にしばしば見受けられますね。
trimはそれを整理してくれるんです。
で、今回は、それを応用しよう、というワケです。
ということで、trimでスペースを整理することができました。
そうしたら、…あとやることわかります?
…置換を使って、半角スペース→カンマに換えてやればよい※30。
あ、置換する前に値貼り、しておいてね。

ハイ、できあがり※31。
左の答えと同じになったかと思います。
こっちの方が、手数少なくて済みますよね。

ということで、飛び飛びの文字の結合、やってみました。
もっと効率のよいやり方もあるかもしれませんが、ひとまずこれでくっつけることができます。
この作業が直接仕事の役に立つかどうかは人それぞれかもしれません。
けど、「自分の仕事と関係ないよ」って人でも、考え方を知っておくってのは無駄じゃないと思いますので、そんなふうにとらえていただけるとよいかな、と。
というわけで、シーユーアゲン!