
Alteryxチームでプチハッカソンをやってみた Excelでセル結合しているフィールド名の処理編
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
社内でAlteryxでのワークフローの作成について問い合わせがあると、Alteryxチーム内でそれぞれ回答を持ち寄ることがあります。その様子は以前も以下のエントリで紹介しています。
今回はExcelでセル結合しているフィールド名(列名)の処理について持ち寄った回答のご紹介です。
プチハッカソン Excelでセル結合しているフィールド名の処理編
お題
以下のデータでは、「1月」「2月」といったフィールド名のセルが結合されています。

このフィールド名を、「1月計画」「1月実績」というように修正していきます。

解答1
まずはスズによる回答。

Sampleツール(Preparation -> Sample)を2つ追加します。1つは First N rows に N = 1 を設定し、フィールド名となる部分だけ抜き出します。

もう1つは Skip 1st N rows に N = 1 を設定し、フィールド名以外の部分のデータを用意します。

ここからは1つ目のSampleツールで用意したフィールド名を処理していきます。Transposeツール(Transform -> Transpose)を使用して縦持ちに変換します。Key Fields には何も選択せず、Data Fields に全てのフィールドを選択します。

「Name」列と「Value」列にフィールド名にしたいデータが出力される状態になりました。

Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して「Name」列のデータを更新します。「Name」列に「F」が含まれる場合は、1つ上の「Name」列のセルを出力するよう設定します。

Expression には以下のとおり設定しています。
if Contains([Name], "F") then [Row-1:Name] else [Name] endif
Formulaツール(Preparation -> Formula)を使用して新しく「Field」列を文字列型で作成し、「Name」列と「Value」列を続けて出力します。

Record IDツール(Preparation -> Record ID)を使用してIDを割り当てます。

Cross Tabツール(Transform -> Cross Tab)を使用して、データを横持ちに変換します。

- New Column Headers: 「RecordID」列
- Values for New Columns: 「Field」列
- Method for Aggregating Values: Concatenate
※Concatenateを選択していますが、「RecordID」列のIDがすべて異なるのでFirstやLastを選択しても同様です。
Dynamic Renameツール(Developer -> Dynamic Rename)を追加します。Rename Mode に Take Field Name from First Row of Data を選択します。

これでフィールド名の処理ができました。

最後に、フィールドの部分とデータの部分を結合します。Unionツール(Join -> Union)で Auto Config by Position を使用して結合します。

結果を確認して完成です。

解答2
続いてじょんすみすによる回答。

まずは以下の赤枠部分。

この部分では、回答1と同様、SampleツールとTransposeツールを使用して、データを縦持ちに変換しています。

続いて以下の赤枠部分。

Field Infoツール(Developer -> Field Info)を使用して、受け取ったデータのName、Type、Size、Scale、Source、Descriptionを出力します。

Multi-Row Formulaツールを使用して「Name」列のデータを更新します。「Name」列に「月」が含まれる場合は「Name」列をそのまま出力し、それ以外の場合は1つ上の「Name」列のセルを出力しています。

Expression には以下のとおり設定しています。
iif(Contains([Name], "月"), [Name], [Row-1:Name])
ここからは準備した2つのデータと元のデータを使用して処理を行っていきます。

Joinツール(Join -> Join)を使用して、2つのデータを結合します。データの結合には、Join by Record Position を設定します。

結合したデータは以下のようになっています。

Formulaツールを使用して、新しく「col_name」列を文字列型で作成し、「Right_Name」列と「Value」列を続けて出力します。

これでフィールド名の準備ができました。

元のデータのフィールド名を、Dynamic Renameツールを使用して置き換えていきます。

- Rename Mode: Take Field Names from Right Input Row
- Old Field Name from Column: -Use positional rename-
- New Field Name from Column: 「col_name」列
Sampleツールの Skip 1st N rows と N = 1 を設定して、初めの一行をスキップします。

結果を確認して完成です。

解答3
最後にniinoによる回答。

ワークフローを確認してみると、Selectツール(Preparation -> Select)を使用してフィールド名を直接編集しています。これまでの回答と違って分かりやすく、しかも簡単です。

フィールド名を編集した後は、回答2と同じくSampleツールを使用して初めの行をスキップします。結果を確認して完成です。

最後に
今回はExcelでセル結合しているフィールド名の処理について持ち寄った回答をご紹介しました。他の人が作ったワークフローを確認すると、自分では使わないツールが使われていたり、難しく考えすぎていたということに気付かされたり、新しい発見があります。皆様も同じテーマでワークフローを持ち寄ってみてはいかがでしょうか。
サンプルワークフローのご案内
クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。











