ようこそここは俺のチラシの裏だ。

専門学校卒のぽんこつえんじにあが個人事業主になって書いているただの日記。

ExcelのCONCATENATE関数にセル範囲を指定したいが出来ないので、代替手段として。(Twitterまとめ)

Excel先生の CONCATENATE関数 ないしは &結合 で、セル内容を文字列結合する事ができて便利。

多くのエンジニアはこれで、
マスタデータの管理表からマスタテーブルへのINSERT文を作ったり、
項目定義表からデータのマッピングクラスのプロパティ実装コメント付きで生成したり、
いわゆる定形コードの量産をやってるかと思います。

CONCATENATE

よく困ること

結合するセルの数が増えると、関数にせよアンパサンド結合にせよ、式を書いていくのがめんどくさいですよね。

f:id:sugaryo1224:20190706230857j:plain

こういうシチュエーション。

実際には あいうえお レベルじゃなく、もっと多くの列を結合しないといけないケースも普通に有り得ますね。

めんどくさいだけならまだしも、たまに間違って歯抜けにしちゃったり、どっかで重複させちゃったり、情報源が増えたり減ったりした時にどこが何番目か解らなくてメンテナンスする気が失せるなんてこともありますね。

つまり、作業ミスを起こしやすい。(そしてめんどくさい)

代替案

本当は A1 & A2 & A3 じゃなく CONCATENATE( A1:A3 ) みたいな指定が出来たら素敵、でも出来ない。

ので、こういう方法を考えました。

f:id:sugaryo1224:20190706231114j:plain

f:id:sugaryo1224:20190706231128j:plain

f:id:sugaryo1224:20190706231135j:plain

f:id:sugaryo1224:20190706231143j:plain

なんだろう、あんまり説明するようなアレじゃないんですが、強いて言えば以下のような擬似コードみたいなことをやってる訳ですね。

string[] parts = { "あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", }; // B2~K2 の内容
string result = "";
foreach ( string p in parts ) { // このロジックが B4~K4 部分に相当。
    result += p;
}
string L6 = result;

範囲コピーしてぴゃーってやるだけで、大量の列でも簡単に(間に無駄が挟まるけど)結合出来るんで、割と重宝するテクニックです。

Twitterのスレッド

別解(コメ欄で教えてもらった)

コメント欄に神が降臨されたので追記させて貰います。

Googleドライブのスプレッドシートだと、CONCATENATE関数の範囲指定で結合できました!

これは盲点!!

シチュエーション前提として「マクロを組むほどではないが、全部手でやるにはだるい」ってレベルの作業の自動化なので、GoogleSpreadSheetで出来るならそれも十分にアリですね。

こりゃすげぇや。

モノをgit管理に置けないって点だけがネック感ありますが、選択肢は多いに越したことはないし、その時々で一番良い方法を選択すれば良いでしょう。

(゚∀゚) とても良いことを教えてもらいました。

別解2(更に教えてもらいました)

TEXTJOIN 関数、あるで。

f:id:sugaryo1224:20190707183921j:plain

まじだああああああああああ!!!

しかもこれ、区切り文字の指定が出来るCSV形式みたいなのをやるのが主目的っぽい)みたいですね。

CONCATENATE関数事態を拡張しようとすると破壊的変更になるからやめた、新しい関数作るお!!

ってことなんですかね、普通に知らなかった。