WRAPROWS 関数 / WRAPCOLS 関数


ここで解説する WRAPROWS関数 と WRAPCOLS関数 は、ProPlusに追加された関数です。Excel 2016/2019/2021では使用できませんのでご注意ください。また、本稿執筆時点(2022/3/20)では、まだInSider Programに実装されただけですので、製品版で使えるようになるには、まだ少し時間がかかると思います。なお、この関数については、YouTubeの動画でも解説しています。ぜひ、ご覧ください。また、この関数では「スピル」という機能が使われています。スピルに関しては「Excel 2016レビュー[Excelの使い方が激変する「スピル」]」をご覧ください。

WRAPROWS 関数 / WRAPCOLS 関数

TOROW関数とTOCOL関数の解説で「(これら2つの関数は)"一品料理"ではなく"調味料"みたいなイメージ」と書きましたが、本稿で解説するWRAPROWS関数とWRAPCOLS関数も、まさに調味料的な働きをします。しかも、めったに使わないというか、利用するケースが少ない関数なのではないかと。まずは、動作をご覧ください。

分かりますか?1行のデータを、各行N列の表(リスト)に変換します。WRAPCOLS関数も一緒っちゃ一緒です。

こちらは、1列のデータを、各列N行の表(リスト)に変換します。言葉で表すと、ちょっと難しいですね。動作をイメージしてください。引数は、次のとおりです。

WRAPROWS(vector,wrap_count,pad_with)
WRAPCOLS(vector,wrap_count,pad_with)

う~む、これは日本語化が難しいな。

WRAPROWS(1行データ,列数,代替文字)
WRAPCOLS(1列データ,行数,代替文字)

こんな感じかな。引数について解説します。まずひとつめの「vector」なんですが、最初この単語の意味が分かりませんでした。いや、何を指定するのかというのは理解できるんですが、なんでそれを「vector」という単語で表すのかと。もちろんこれは、たくさんのフリーソフトが登録されている有名なサイト"ベクター"ではありません。要するに、数学で用いられる単語"ベクトル"なんですね。ちょっと調べたら、"ベクトル"ってのはドイツ語「vektor」の読みだそうです。"ベクター"にしても"ベクトル"にしても、結局これは英語やドイツ語の発音を、日本語のカタカナで表したに過ぎず、要するに同じことだと。で、この「vector」を調べると、次のような意味もあると書いてありました。

《数学》ベクトル,方向量;1行[1列]のマトリックス[行列]
(小学館 プログレッシブ英和中辞典より)

この「1行[1列]のマトリックス[行列]」という表現が、今回の引数「vector」という用語にピッタリだと思います。余談ですが、このへんまで調べたら、さらに「ベクトルって何だろ?」って興味がわきました。高校の数学で、何か矢印を足し算したり合成した記憶があります。そのうち、大好きなYouTube「ヨビノリ」チャンネルの動画で学習しようかと。

話を戻しますが、WRAPROWS関数で1つめの引数「1行のデータ」に指定するのは、スバリ"1行のデータ"です。複数行を指定することはできません。まさに"ベクトル"のイメージでしょうか。

この"1行の"というところがポイントですね。逆に言えば、元の値たちが"1行になっていれば"、WRAPROWS関数を使うことで、複数行×複数列のリストに変換できるわけで。何らかの値たちを"1行にする"といえば、別のコンテンツで解説していますけど、TOROW関数というのも今回一緒に追加されています。これ、セットで使うと便利なのではと期待できますね。なお、WRAPCOLS関数の引数「1列のデータ」には、もちろん"1列のデータ"を指定します。

このへんまで理解すると、2つめの引数「列数」の意味も分かってきます。1行のデータを、複数行×複数列に変換するのですが、そのリストを"1行につき何列"にするかを指定します。

さて、元の値たち「1行のデータ」を、「列数」ごとのリストにしていくのですが、ピッタリ埋まらない場合もあり得ます。

上図では、セル範囲A1:F1という6個のデータを、4列ずつのリストに変換させました。すると、2行目はデータの数が足りません。データがないセルは「#N/A」エラーになります。こんなとき、「#N/A」ではなく別の値を代入したいときは、最後の引数「代替文字」に指定します。

使用例

さてさて、このWRAPROWS関数やWRAPCOLS関数ですが、実務ではどんなケースで役立つのでしょうか。正直に言って、あまり良いケースは思いつきませんでした。ほとんどは「いや、そんなこと実務ではやらねーし」ってことばかりです。強いて思いついたのは、次のようなケースです。

A列~C列の表は極悪非道です。1件分のデータが、2行にわたって入力されています。こういう形式は、印刷したとき見やすいという目的で、出力用の表として作成されるべきなのですが、いきなりこうした表を入力してしまう人がいます。言語道断ですね。「1データ1行の原則」を守っていただきたいものです。さて、上図では何をしているかというと、まずセル範囲A3:C12の全データを、TOROW関数で長~い1行に変換しました。それだけでは意味がありませんけど、1行になってしまえばWRAPROWS関数の出番です。長~い1行を、1行が6列のリストに変換しています。

すみません、この程度しか思いつきませんでした。他に良いケースが思いついたら、また紹介します。ああ、ちなみに、もし「田中さん、こういうケースで使えますよ」とアドバイスをいただけるのでしたら、そのケースが"実務で、よくある"という話でお願いします。