管理部
Natsuki Kaburaki
2024.08.09 管理部
パワークエリで文字列を編集してみる
目次
最近需要があった文字列整形
同じコードの複数行をまとめて同じセルに改行で集約する。という整形です。

ビフォア

アフター
ボスからご依頼があり、普通にエクセルでこれをやろうと考えたのですが、ちょっと思いつかず。簡単なプログラムを書くしかないのではないかと一瞬、思ったのですが、パワークエリでできます。
簡単な、と言っていますが毎回忘れて思い出すのに時間がかかるので、ブログ当番なのを良いことに、自分のための備忘録として記録しておこうと思います。(お客様のIDやお名前は架空の名前です。偶然同じ名前の方がいらっしゃいましたら申し訳ございません)。
……私が読みたくないので画像いっぱいです!
【やり方】
下処理。
まず、元の表を少し加工します。「お客様名」と「商品」を一つのセルにまとめます。セルの文字を足し算です。まとめたセルは、「BとC」としておきました。名前は何でも良いです。

セルをまとめます。

パワークエリーに取り込みます。
表の範囲を選択し、「データ」タブメニューで「テーブルまたは範囲から」をクリック

「テーブルの作成」で「先頭行をテーブルの見出しとして使用する」にチェックを入れておきます。「OK」をクリック。PowerQueryのエディターが開きます。

まとめたいIDの行を選択しておき、「グループ化」をクリック。まとめたい列名の下に、新しい列名を入力します。名前は何と付けても良いので「なんでもいい」と入力しています。うふふ。


「操作」の欄は「すべての行」を選択して「OK」します。
そうすると、下の画像のようになります。「なんでもいい」の1行目をクリックしてます。そうするとグループでまとまっている内側のリストが画面下の部分に見えます。

ここからがキモなのですが(私も分からなくなるところです)
「列の追加」タブの「カスタム列」をクリック。カスタム列の画面で、下のように「カスタム列の式」を入力します。
式の背景が水色の部分は手書きです。どう書くかは上の画像の列名を参照してください。書き終わったら「OK」をクリック。


「カスタム」列の右「⇔」メニューで「値を抽出する…」を選びます。

「リストから値を抽出する」の画面で、「特殊文字を使用して連結」にチェック(※改行が特殊文字扱いなんです)。「復帰改行」を選びます。改行だけでも、いけそうな気もするんですが、たぶんこっちがいいです。


「復帰改行」を選択すると↑こんな感じです。「OK」ボタンをクリックします。そうするとパワークエリー上の「カスタム」の列にもうできてます。
やった。保存しましょう。
「ホーム」のタブで「閉じて読み込む」をクリックします。



左側の状態で、いままでのレガシーエクセルの画面に戻ってくるので、あれ? 改行されていないと一瞬焦りますが。画像だとB2のセルをダブルクリックしてみてください。右の画像のように改行が入っていることが分かります。
「テーブル」として、背景しましまの状態ですが、気に入らない場合は表をコピーして、他のシートに値貼り付けすると今まで通りのエクセルとして使えます。