はてなキーワード: マクロとは
じゃあ「行頭に今日の日付を入れて、この列をこの列を入れ替えて、この「A」を「A社」に変えて、空白行を消して、ソートして…」って30段階くらいのCSVの加工を1時間かけて手動でやれって言われたら大抵の人は発狂すると思う。
その程度、ちゃんと保守管理してくれる業者に頼んで作って貰ってくださいよって言っても、「何で人が手でできる作業を金を払って自動化しなければいけないんだ」って真顔で返されるよ。DX?デジタル化?効率化?そんなもの考えてくれるだけマシな職場だぞ。
1時間の手間がかかってるなら、従業員に1時間残業させればいいと言うのが零細の現場。当然残業代は出ない。残業代の規定がないからだ。下手すれば夜間電気代の名義で給料減るぞ?そんな現場に何を期待できると言うんだ。
そうなれば自分しか使えず、自分しかメンテできない負の遺産のエクセルマクロであってもなんでも、残業しないのが正義となる。
VBA嫌いのExcel師(営業事務)なんだけど、その程度のことをVBAでやろうとするヤツを駆逐したい。
お前は営業や他のユーザーの理解度を自分レベルだと勘違いするのをやめるべき。
うちの会社はVLOOKUP(最近はINDEXとMATCH)組めるのが「Excelできる」と名乗っていい最低限のラインで、営業と営業事務では名乗れないやつはほとんどいない。でもVBAは使える人は稀。
基本はその「難しくてもVLOOKUPの知識を駆使すればなんとかなるレベル」でExcelを組まないと破綻する。
うちの会社の一事業部は複数の会社に発注をしていて、そうすると会社ごとにデータを比較して見たいのに項目や項目順が違って簡単に比較できない、ということがよくある。
その場合マッピングと呼ばれるデータ項目の統一化が必要なんだけど、会社によって合算したいデータがそれぞれ別の方法でしか取れないとか、合算値に余計なデータが入ってるからrawデータ取ってきて件数はレコード数でカウントしないといけないとか、まぁ色々出てくる。
全取引に対してのデフォルト対応としての統一マッピングはしてるけど、そういうのはVBAでやらずにSaaS使ってるし、ものによって重視する値が変わるので例外が2割くらいある。うちの会社はその辺りの裁量が営業に認められているので例外も多め(なおオンリーワンになりたいためだけに特殊対応した奴は一人を除いて矯正or自滅済)
そういう融通をきかせるのにExcelの計算シートでマッピングするのは絶対。
あとVBAだと営業側が「どういう計算をしてるのか」とか「正しい数値が出てるのか」が確認できない。
っていうのは例えば100円3件と150円2件の仕入れにうちの取り分2割乗せて720円として見せたかったのに、『=100*3+150*2*1.2』って数式書いたせいで660円になっとるやんみたいな。こんなんよくある眠い時のヒューマンエラーで、VBA書く人ならやらかさない、なんてことは絶対ない。
しかも営業がこういうのの修正とか提案用にちょいちょいと列増やして数式入れようとしても「マクロ壊れるからやめて」とか言われる。営業が自分で調整可能なら1時間以内でできるものでも、VBA書いた人に依頼しなきゃいけないんだと、書いた人の通常業務との兼ね合いで1週間待たされたりする。
営業に金稼がせるためには営業の利便性と裁量は必須で、Excel利用者に裁量権が認められてないVBAのツールなんか全体最適化されてないクソ。
※なお裁量大きいからってあんまり好き勝手するとやらかした時に他の助けも得られず(やれることに限界がある)自滅ルート
自分も軽くVBA習得してるんだけど、フォルダ内のデータ一括読み込みとシートの分割統合の関数代わりにしか使ってない。しかもただの効率化なのでVBAが死んだところで手作業に戻せる範囲。
他人が保守できるように作るのならVBAなんか入れるべきではないし、VBA入れないなら計算シートは必須。あと計算周りを大掛かりにやるならSaaS入れてDX検討すべき。
原則関数とピボットテーブルのみで完結させ、マクロは使わない。ってのが良いと思う。
DBからデータぶっこ抜いたり(今のご時世は出来ないと思うが)、外部ファイルを読み込むとかしないで、ブック内のデータを処理するだけならマクロいらんやろ。
数十万以上のデータ件数になるとさすがにきついけど、そうでもなければ関数駆使すればだいたいいける。
てか、Excelはお絵かきソフトであって、表計算として使うんならGoogle Spreadsheetの方が絶対に良いわ。
EXCEL原理主義からするとマクロを入れる時点でワークシート関数は入れない。
複数行コピペでやりたい時だけ、入力用の空シートにするけど、それだったらCSVのファイル連携。
1ファイルを配列に突っ込むのはメモリが怖いのでやらない。今ならほぼ大丈夫だと思うけど、ストリームで処理する呪いにかかってる。
商品マスタとか参照するときに、外部データ範囲でDBからマスタをシートに張り付けて使う。1万件ぐらいまでならデータをADOとかで取ってdictionaryに入れて検索するより、シートからVLOOKUPで取るほうがよっぽど早い。
この日記の内容は、会社の後輩から「最近エクセルマクロを勉強し始めて(キラキラ)」という話を聞いて、先輩ムーブをかますために話した内容になります。
とにかくこれから説明する「計算用シート」が憎くて憎くてたまらず、ちょっと引かれるほど熱弁してしまいました。
ただ、他の方がどうされているのかや、逆に「計算用シート」を愛用する方の意見も聞きたくなり、増田に書いてみました。
エクセルマクロのお作法とか書きましたが、要するにエクセルマクロで「計算用シート」って色々な意味でよくないよね、という話をしたいです。
3行でまとめます。
〇 エクセルシートはユーザーインターフェース(インプット)か出力結果(アウトプット)のためのものとすべき
〇 データ加工をする場合には、原則配列や辞書型配列(連想配列)に格納して加工を行い、最後の結果だけシートに出力するべき
〇 何事にも例外はある。
エクセルマクロにも色々あると思いますが、今回は下記を想定します。
日付や人物名などを入力し、データベースや別のエクセルファイル、別のシートから取得したデータを入力された値を基に加工し、加工後のデータをシートに出力する
この場合、入力欄があり編集可能なシートがユーザーインターフェース、最終的に加工されたデータが出力されるシートが出力結果です。
(もちろん、ユーザーインターフェースの別の欄(セル)に出力する場合もあるし、その場合はユーザーインターフェースと出力結果が一体のものとみなします。)
また、データ用シートは同じエクセルファイル内に基となるデータが含まれる場合を想定します。
(これ自体が非推奨で、SQLデータベースかせめてAccessを使え、という意見はありますがそれは別にして…)
ではここで定義する計算用シートとはなにかというと、文字通り計算を行うためのシートです。
1.元となるcsvファイルをエクセルに読み出してシートに格納
2.そのデータは日付が数値型になっているので、日付(数値型)の入った列を文字列に変換した日付(文字列型)列を新たに作成
これは極端な例ですが、とにかく変数や配列を定義せず(あるいはエクセルのセルオブジェクトを変数のように扱い)、エクセルに値を入力し、それを直接加工することで目的となるデータ加工をしたり、様々な処理をします。
なんかこんな感じの処理をしているエクセルマクロ、どこの会社でも腐るほどあるんじゃないでしょうか。
ある程度マクロに慣れた気の利く人なら、このシートはロックや非表示にして、ユーザーから触れないようにするでしょう。
・・・これ、やめたほうが良くないですか?。
ある程度詳しい人なら同意してくれると思いますが、このやり方でダメな理由はいっぱいあります。
後で説明する配列や辞書型配列(連想配列)と比べると格段に処理が遅いです。
ちょっと詳しい人が知っている「画面更新の非表示」を駆使しても、配列を使った処理からみれば止まったハエです。
いったんエクセルシートにデータを格納して加工しているので、コードとエクセルシートを両方見る必要があり、とても読みにくいです。
変数として命名されていないのも致命的で、処理の意図が余計に分からなくなります。
計算用シートを事前に用意して、別のセルに関数を格納しておき、マクロと関数を使ってデータ加工をするものも見たことがあります。
あまり知られていませんが、セルの最大文字数は32,767 文字です。
セルの最大文字数を超えると自動的に隣のセルに値が入り、シートが滅茶苦茶になります。
他にもエクセルの数値を丸める自動変換の仕様とか文字列→日付の自動変換とか、いくつものバグに苦しめられます。
できる人だと、いちいち最大文字数が多い場合の処理を書いたり自動変換機能を殺したりしてくれますが、そんなことに手間をかけているから日本のGDPは上がらないんだと思います。
他にも、データが大きくなると処理が重くなり不安定になる、計算用シートを人が触ってしまうリスクがある、などいくらでも理由は上げられます。
(逆に利点は、目の前でガチャガチャ動いてスーパーハッカーになった気分になれるくらいしか思いつかない・・・)
配列を使いましょう。
配列とは何ぞや、という人はググってください。
配列にデータを入れて、データ加工は配列や変数に対して行い、一番最後の出力だけセルに値を格納する。
個人的にオススメしたいのは辞書型配列(連想配列)で、うまく使うとデータの管理が簡単になり、処理も爆速になります。
(参考)【VBA】大量データから高速で値を検索【Dictionaryを使う】
csvファイルもなまじエクセルで開けるだけに別のブックやシートで開きがちですが、これは悪魔のささやきです。
直接ファイルを読み出してLine InputやSplitで配列に格納しましょう。
エクセルとして開くやり方はコード書くのは簡単でも、実行時間に天と地ほどの差が出ます。エクセル開くと処理もめちゃ不安定です。
(参考)Excel VBAでCSVオープンするときのパフォーマンス比較
いや、冒頭のマクロを書く人の気持ちも分かるつもりです。自分もコードを書き始めたころは全部シート上で操作していました。
冒頭のマクロのほうが直感的なんですよね。自分が手で書くことをマクロにやらせる、というマクロ本来の趣旨にはあっていますし。
途中の計算過程もすべて目の前で展開されるから分かりやすいです。
ただ、それではダメなんです。。。処理は遅いし挙動は不安定だし後で改修・保守する人が死にます。
あと、エクセルシートやセルは当然エクセルにしかないので、エクセルマクロ(VBA)から他の言語に移れなくなります。
自分もエクセルマクロの里の出なので、計算用シート脱却には苦労しましたが、苦労して会得した配列や辞書型配列(連想配列)のスキルはそのまま他の言語に活かすことができました。
配列の中身を見る方法は別にある(ローカルウィンドウやDebug.printを使うなど)ので、リハビリに取り組んでほしいです。
(参考)VBA デバッグの仕方
計算用シートを許容できる、使うべきケースもあると思います。。
個人的には、
(最後のは、なんでも自分で確認しないと気が済まない上司の発注で、意味不明と思いましたしたがしぶしぶやりました。)
この場合、インプットのエクセルシートに直接加工するのは論外なので、計算用(加工用)のシートを用意してそこで操作を行うことは必要だと思います。
他にも、こういうときは「計算用シート」があったほうが良い、という状況があれば教えてもらえると嬉しいです。
そもそもツッコミとして、「データ加工するならエクセルマクロを使わずにpythonとかRとかもっとまともな言語使えよ」という言葉が来そうな気がします。
ただ、個人的にはエクセルマクロ(VBA)は大好きですし、初心者にもおすすめしたいです。
自分のような非エンジニアだと、セキュリティの関係などでPythonの開発環境とかすごく用意しにくいんですよね。
(あと、コマンドプロンプトの真っ黒な画面が怖かった)
その点エクセルマクロは、開発環境の用意はプロパティでチェック項目を一つオンにするだけだし、入門書がたくさんあるし、セルの挙動を追えば視覚的にプログラムを理解できるし、初心者に優しいです。
(そのやさしさが上述したとおり悪魔の罠なわけですが。)
最初は計算用シートに頼ってでもエクセルマクロからプログラミングを始めて、本格的なデータ加工をし始めたあたりで計算用シートという諸悪の根源から脱却する。
さらに本格的なデータ処理を行うために、PythonやRなど別の言語を習得したり、エクセルからSQLデータベースやACCESSなどに切り替えていく、というプロセスがいいのではと個人的に思います。
昔は本を読めば知識が増えるし賢くなると思っていたが一回読んでノートにまとめたくらいだと使わない知識は普通に忘却していくので
想像するより遥かに効果が弱い、という結論に達した。なのでその人が実際に実践する可能性が高い知識が書かれている本を読むことを薦める。
ただ一般化されたメタ的な知識は覚える内容が比較的少ない上に応用が聞くし思考の型に出来るので具体的な知識系に比べると効果的であるように思う。
学習それ自体のやり方やエネルギー保存則や相対論といった普遍的な科学知識、目的達成のためには何を重視すべきかといった合理的思考法とかPDCAサイクルとかの失敗から学ぶ方法とか、
原理的に無限に創造出来るものはそれ自体が不足して困ることはない、といような論理的思考とか。あと科学的とはそもそもどういうことか、とかより学問的なら疫学とかの統計分野。
軍事だったら総力戦や持久戦、包囲戦、斬首作戦とかの概念を知ってるだけでもウクライナ侵攻の行方を理解する上で役に立つし、ルトワックの戦略の逆説的論理とかは単純で説得力があって応用性も高い。
超限戦とかも有名だけどあれは戦争には兵器といったハード的なもの以外にも文化やら法律やら宣伝やら何でも使えるというような話だったので、あの分厚い本を一冊読まなくてもいいように思う。
まああとは無意識に関する本は一冊ぐらい読んでおいたら人間や自身の捉え方が変わるので何か役に立つかもしれない
(まあ自由意志が存在しないっぽいこととか世界が量子以上のマクロな領域では物理的な法則に従って動いていることを考えれば宇宙誕生以来世界は演繹されつづけてるだけで生物は自身も含めて観測しているだけで演繹結果に干渉出来るわけでないことくらい想像つくだろうけど)、。
しょうがないなあ……。
まさに、俺は最低賃金ギリギリで働いてるし、労働時間はほぼフルタイムだ。
職場ではシルバーさんとかと一緒に働いているし、周りのお爺ちゃんのギリギリ具合を見て自分の立場のヤバさを日々実感している。
そんな職場抜けちまえって話なんだろうけど、メンタル壊して15年ぐらいやってた業界から逃げ出した身分なんで簡単じゃない。
スキルは年齢に対して全く足りてなくて、強いて言うなら「キーボードを10本の指で打てるよ!」ぐらいが強みだ。
エクセルはマクロどころか計算式も良くわからないし、ワードもしょっちゅう書式を壊しては周りの爺ちゃんに教わってる状態。
一番まずいのがメンタルだなあ。
週40時間でも結構ギリギリで、家に帰ってからはスプーン持ったまま台所でボーっと10分ぐらい立ってることとかもあるよん。
正直、経営者目線で見たら俺に時給1500円払うのは無理だと思う。
シルバーの水準がせいぜいだよね本当。
まあ数合わせになるだけマシって扱いで、ごみ掃除とかシュレッダーの手伝いとかやって何とか居場所を維持してるよ。
確かに給料は低いけど、ここを辞めて期間工になったりするのは根性が必要過ぎるな。
確かにコンビニ夜勤でもするほうが給料は良いだろうし、なんならウーバーとかでもまだ沢山稼げるかも。
なんか勘違いした年だけ食ったデブオヤジとか、いい学校出てるのか知らんけどやたらウエメセの新卒とか、そういう連中にアゴで使われるとイラっとくる。
でもさ、その程度なんだよね。
仕事の責任はそれこそ雇った側が取ってくれるっていうか、そもそも責任なんてあってないレベルの書類整理みたいなのばかりだからさ。
責任感を持ってスキルを活かしつつ働くのは上手くいってるうちは楽しいけど、失敗しだすと死にたさが凄いことになるし周囲からのプレッシャーもエグいからなあ。
こんな人生だけど、もう俺はこれで十分だよ。
ヌルい仕事をして、ショボイ給料をもらい、安い飯を食って、金がないから無課金でソシャゲでもして、適当に時間を潰したらXvideosでシコって寝る。
生産性は低いだろうなあ。
でもさ、俺が生産性の低い労働をすることで、良く分からん高学歴のウエメセキッズが生産性が高いらしい仕事にバリバリ集中できてるわけだろ?
役割分担って奴さ。
8:2の法則っていうかさ、社会にはどうやってもブルシットな仕事が残るもんだよ。
全部をGPTやルンバにやらせられるようになるにはまだまだ時間がかかるんだから、俺たちみたいな低生産性で満足してる奴隷階級があと50年は必要になるんじゃないの?
必死に暴れまわるか、完全に意気消沈してしまうか、どっちにしろしんどいことになるのは身を持って知っとる。
今の自分のレベルに見合った人生で満足しておくのが結局幸せなんだよ。
鎖自慢?
の元増田
・まず大切な子供がいて
・子供が将来まともな職(高給・安定)に就けるようにしてあげたい
・そのために、いい学校に入れてあげたい
・それにより、教育費が上がり
という問題
「予算が一定であるとき、1人に全部使ったほうが強い個体を作れる」
という問題だと思う
一次産業・二次産業のときだって人間はスマートに「できるだけたくさん産む」という戦略を取っていたわけで、本質的に変わったわけではないと思う
じゃあ市場を「2,3人生むのが最適」という状態に上手く持っていく必要があって、そうじゃないと絶滅は避けられれない
・教育費を固定
色々あると思うけど、どれも難しそうだ
ーーーー
もちろん教育以外の要素(例えば娯楽の増加による婚姻率の低下)とかもあるんだけど
儒教問題もデカそうだけど、アッパー層ですら1人に絞るのが奇妙に感じた(無尽蔵に教育費をかけられる問題)
でも着実に増えていると言うデータもある
「担当者が効率的な業務フロー化やマニュアル整備、独学でマクロ組んで作業時間を10分に縮めた場合」
「現場の人間が勝手にマニュアルやツール作って運用してる。トラブルが起きた際の対応や保守運用とか明確に定まってないから今後使い続けれるかもわからない。下手したら法規に触れてる可能性まである」
っていう厄介極まりない存在だからそんなもん評価するわけないし、評価されたきゃ上司とかに相談した上でやれって話なんだけど、この手の話を喜んで聞く人はコミュ力低めなのか「周りは評価しないが実は俺は隠れたry」な人が多いせいかそこら辺を指摘する人いないんだよな
こう言うネタよく見るんだけど、マクロやシステムの効率利用などで業務効率あげて自分の仕事量を減らした後、減らした分だけ新たな仕事を入れられるのは別に仕事増えてなくね?
増えてるのはアウトプットだけど、同じ仕事でアウトプットが増えるのは別にかまわないよね。普通に考えて。
それでもこういった愚痴が出てくるのは
ってだけだよね。そして、端から見てるとこれ、増田が無能扱いしてる相手と同じかそれ以下だよ。 足の引っ張り合いはやめような。
業務効率化し手が空いたらそこに新しい仕事を入れられるのは増田の仕事が評価されてるからだよね。逆に効率化して手が空いてるのに新しい仕事が入ってこない方がまずいでしょ。そうなったら左遷秒読みじゃん。中小企業だとそりゃ首になる直前だぜ。
調整云々も関係ないよ。そりゃあんたの仕事じゃない。するべきは他人との調整じゃなくて自分のキャパの見極め。無理なぐらい仕事を持ってこられたなら拒否して無理だと調整が仕事の人に伝える所からやってみ。