フォト

ウェブページ

無料ブログはココログ

MyList

Excel

2026年3月 5日 (木)

Excelマクロ <問題は禁止/許可の先にある>

XにExcelマクロに関する投稿が流れてきた。 


多くの人がそれぞれの立場で、レスを投稿している。
大抵は、自分の立場や環境だけを考えていると思う。

ユーザの立場も、情シスの立場も、マネージャーの立場も経験したのでそれぞれの立場で考えてみた。

Excel_20260226102301

【ユーザの立場】

Excelマクロは野良化しやすいという指摘は正しい。(Excelマクロがすべて野良という訳ではない)

これまで、目の前の作業を終わらせるために、野良アプリ、野良ツールをたくさん作ってきた。
これらの、自分が使うためにやっつけ仕事で作ったプログラムを配布したり、引き継ぐと後からトラブルに巻き込まれた経験が何度もあるので、配布も引き継ぎもしないようにしていた。

「配布しない!」というと、勿体ぶってると言われるし、「as isで!」 と念押しして配布しても、不具合の修正や機能追加の依頼がある。
「勝手に修正していいよ」と答えると、「それができるくらいなら、頼まない」と...orz

★今時、手作業でコピーしたり、手打ちで入力する作業は人の仕事ではない。
★経験的には、自分のためのツールを、配布したり引き継ぐと、トラブルの元になる。

【情シスの立場】
Excelマクロは、セキュリティ上の脆弱性になりやすいので禁止したい。
使ったこともない野良マクロの不具合や機能追加の相談を受けることがあるが、正直なところ面倒だ。
野良はいくら改修したところで、所詮野良だ。

Excelファイルはクラウドサービスでは使いにくい、マクロ付のExcelファイルはクラウドサービスでは使えない。
Excelマクロだけが使えないわけではなく、ネ申エクセルも同様に使えない。
Excelマクロや神エクセルが残る業務は整理されていないことが多く、クラウド化しても効率化できない。

★Excelマクロや神エクセルは、業務が整理されていないことを示していて、新しいクラウドサービスやAIなど新しい技術を導入する際の足かせになる。
★問題は業務が整理されていないことだから、Excelマクロを禁止しても効果がないどころか、逆効果になる可能性がある。

【マネージャーの立場】
正直なところ、目の前の仕事をExcelマクロなどで片付けてくれる存在はありがたいが、甘えてしまうと、無駄な業務は減らない。

無駄な業務と認識しながら、対応しなければならないことがあると、マネージャーとしては辛く、自分の無能さを感じる。
そのような時に、Excelマクロなどの野良ツールで解決してくれると、正直ありがたいと思う。

しかし、その仕事が無駄であることに変わりなく、さらに優秀な部下の能力を無駄使いしている。

マネージャーは無駄な仕事をなくしたり、必要なシステムを導入すべきだが、
マネージャーも人の子だから、つい目の前の無駄な仕事を片付けるために野良ツールを使い続けてしまう。

★正直なところ、業務フローの変更が必要なことは分かるが、実現可能性を考えると言い出しにくい。
★無能なマネージャーが野良マクロ、野良ツールの使用を助長し、有能な能力を無駄に使ってしまう。

【結論】
Excelマクロの使用はリスクがあることは事実だが、リスクを承知で使わなければ終わらない仕事があることも事実だ。
現場にいる人がそれぞれの立場で声高に賛成/反対を言うことでは、問題は解決しないし、不毛だ。

野良マクロを使用しなければ業務が回らない現実を見ないようにして、問題を先送りしていることが問題だと思う。
つまり、Excelマクロの禁止か許可かの問題ではない。
立場を超えて、真の問題に取り組んではどうだろうか。


最近の投稿
Yoshiのよしなしごと】【Yoshiのブログ】【よしなしごと】【Excel

2026年3月 1日 (日)

Excelの動的配列数式(2)

【動的配列数式】
動的配列数式を簡単にいうと、1つの数式で隣接するセルに複数の値が出力される仕組みのこと。
従来のExcelは、関数を入力したセルに1つの値を出力していたが、2020年くらいに動的配列数式が導入されたらしい。
この時に、範囲を出力する関数、FILTER, UNIQUE, SORT, SORTBY, SEQUENCE, RANDARRAY が加わったようだ。

動的配列数式では、入力に範囲を指定できるようになった。(配列計算)
例えば、下のシートで、
A列(A3:A12)に入力された数値の10倍の数値をB列(B3:B12)に出力する処理を考える。
昔は、B3セルに =A3*10を入力して、B3セルをB4からB12にコピーしていた。
今は、B3セルに =A3:A12*10を入力すると、B3:B12に値が出力される。

条件式でも使えるので、C3セルに =IF(A3:A12<30, "LO", "HI") と入力すると、A3:A12の値が30より小さい場合は"LO"を出力し、30以上の場合は”HI"を出力する。

20260215-012015

Excelの配列式 (2022/01/06) でExcelの動的配列について書いた。

その中で、生徒を科目ごとに5段階評価した一覧表から、最も良い評価の生徒を抜き出すという例を取り上げた。
この処理は、単に評価5を抽出すればよいわけではなく、5がなければ4が最も良い評価になるというところだ。
この処理を、配列数式を使わないで書くと、補助列が必要になって、後から処理が分からなくなる。
これを、動的配列数式を使用すると補助列が不要になるし、数式が減るので後から処理を追いやすい。

=INDEX(FILTER($A3:$E22,RANK(B3:B22,B$3:B$22)<=$H$1),,1)
という配列数式を示したのだが、わかりにくい。

【テーブルの構造化参照】 ※2
処理対象の一覧表(A1:E21)をテーブル(成績一覧)にすると、
・A1:E21 → 成績一覧 
・A1:E1  →  成績一覧[#見出し] 
・A2:E21 → 成績一覧[#データ] 
・A2:A21 → 成績一覧[算数] 
で参照できる。(構造化参照)

20260210-122056
=INDEX(FILTER($A2:$E21,RANK(B2:B21,B$2:B$21)<=$H$1),,1) ※1

=CHOOSECOLS(FILTER(成績一覧[#データ],RANK.EQ(成績一覧[算数],成績一覧[算数])<=$H$1),1) ※1
と書ける。(CHOOSECOLSとINDEXは範囲の1列目を抜き出す関数)
↑の配列数式をG3セルに書くと算数の1位がG3セルから下に抽出される。
G3セルをH3からJ3にコピーすると、成績一覧[算数]が自動的に成績一覧[国語]、成績一覧[理科]、成績一覧[社会]に変換される。

関数で範囲を指定する際に、A2:E21のような形式で入力しようとすると、テーブルのシートを行ったり来たりしなければならないし、テーブルが大きい場合は、マウスで選択するのも難しい。
構造化参照で書くと、式が入力しやすいし、分かりやすくなる。

【COPILOT関数】
Copilot有料ライセンスがあると、COPILOT関数が使える。
=COPILOT(
 "対象となるテーブルには,生徒毎に算数,国語,理科,社会,の教科の評価が記録されている。
 このテーブルから,算数,国語,理科,社会の教科毎に評価順位が高い側の
 1位の生徒を抽出してください。
 同じ順位に複数の生徒がいる場合はすべて抽出してください。
 評価は5が最も高く、1が最も低い。
 出力は教科と同じ行に生徒を出力します。
 生徒の評価(数値)は出力しない"
,成績一覧
)


↑をG2セルに入力すると、G2:K5に結果が出力される。
20260210-152012

プロンプトは何回か書き直した。
ざっくり分析する場合や、出力と元データを見比べながら検証できるなら良いが、
元データが大きくなって、目視で検証できない場合は、AIの結果に頼るのは危険だ。
ハルシネーションを含んだAIの出力で、成績が決まってしまうと考えると、コワイ。

AIを使うなら、この結果を出力するための式を出力させるのが良いと思う。


※1RANK.EQ関数は、動的配列関数ではなく、配列スカラー関数で、第一引数に配列をを与えた場合に出力も配列になる。
※2 テーブルにデータを追加した場合範囲が自動的に拡張されるため、成績一覧[#データ] 範囲を変更しなくてよいという利点がある。


最近の投稿
Yoshiのよしなしごと】【Yoshiのブログ】【よしなしごと】【AI】【Excel

2026年2月26日 (木)

混然一体Excel

データ再利用性の高いExcelブックの設計指針を考える 
~整然データをExcelテーブルで管理する~
Qiita @mochimo (2020/01/01)
Excel

@mochimo氏は「Excel方眼紙は悪か?問題」の中で、

~ 即ち「データから切り離された表現シートについては、Excel方眼紙を用いることは全く悪ではない」むしろ「Excel方眼紙を使わない」が教義と化してしまい、無理やり他の方法で表現を作り込むほうが生産性を落としてしまう可能性が高い。という立場だ。

とおっしゃる。

重要なことだと思う。
データ → Excel方眼紙 → 印刷 という使い方をする場合は、Excelは便利だ。
表示フォームや印刷フォームを作るのは面倒だが、Excelが使えると自分で作れるようになる。
特にExcelの印刷機能は充実しているし、PDFファイルにも出力できる。

「Excel方眼紙」だけで完結していて、データと表組が分離しない使い方をやめようということだ。

Wordが使いにくい <アプリの種類以前に問題がある> (2026/2/8) で
WordだけでなくExcelも清書(印刷)のためのツールとして使用していると書いた。

日本の罫線文化は、表計算ソフトと相性が良いので、Word vs Excelのような議論になりがちだ。
清書(印刷)の前に、データと表組(View)の分離が重要だと思う。

【昔話】(年寄り与太話がうっとうしい人は読み飛ばしておくれ)
40年くらい前に、表計算ソフトが使えるようになった時に、まず明細表を作った。
品名、規格、単価、数量、小計を入力すると自動的に小計、合計が計算できて、印刷できるのはありがたかった。
きれいな字は書けないし、注意散漫な性格なので、手書き・手計算で作成していると、何回計算しても合計が合わないのだ。
そろばんが使える人とか、ブラインドタッチで電卓を使っている人は神だった。

最初の頃は、前回作成したシートをコピーして使っていた。
使っているうちに、同じ品名を入力することが増えてきたので、品名、規格、単価を集めた表を作って、参照するようにした。
データと計算、印刷フォーマットを分離したのだが、今ほど機能がなかったので、同一シート内で工夫していた。
異なるシートのデータが参照できるようになってすごく便利になったのを覚えている。

その頃はまだ、案件ごとに、データと計算とフォーマットを混然一体に扱っている人が多かった。
アプリの機能が足りなかったし、PCのリソースも少なかったから、その方が手っ取り早かったのだ。

【そして時は流れ】
元号は2回も変わったのに、未だ渾然一体のExcelシートを見かける。

渾然一体Excelはデータだけ取り出すのが難しい。
取り出せたとしても、データベースとして使うには、手入れが必要だし、データの保守という概念が無い。
だから、そのデータを使い続けることが難しい。

クラウドやAIが使えるようになって、処理や出力は飛躍的に便利になったのに、渾然一体Excelのおかげで、便利な機能が使えないのだ。

【Excel活用能力】
Excel活用能力には
入力できる < 関数が使える < VLOOKUP関数が使える < マクロが使える
という段階的なレベルがあるといわれている。

未だに、VLOOKUP関数が使えると能力が高いという認識が残っている。
正直なところ、今時、せめてXLOOKUP関数を使うとか、FILTER関数を使おうよ、と言いたい。

VLOOKUP関数を使えることが能力が高いわけではなく、データとビューを分離することができる人だろう。
だから、VLOOKUP関数より、使いやすく、関数を入力するセルが少なくて済むXLOOKUP関数やFILTER関数を使うことで、データとビューの分離が簡単になることを広めるとよいと思う。



最近の投稿
Yoshiのよしなしごと】【Yoshiのブログ】【よしなしごと】【Excel