
本日は仕事納めでしたが、来客あり、DIYは中途半端と、なんかスッキリしない仕事納めとなりました。つーことは納まってないのか・・・。11月中はトラックに乗っていたこともあって提出期限の仕事を延ばしまくっており、年末年始と出勤することに。まぁ仕方ないね、自己責任だ。
DIYの中途半端とは、職場の動噴のメンテができなかったことを指します。トラック他社用車10台ばかり動噴を使って洗車する予定だったんですが、エンジンがかからねぇ・・・orz。結局、時間が無くて自分ちの動噴も持ち込み、洗車した。動噴をメンテナンスしたかったのだが、来客あり~の、常務の挨拶だのでタイムアップ。来年の課題となったのだが、やれんのかね?
さてと昨日「お悩み」と書いた資料作成ですが、WORDはネットに記載してあった対処方法で無事解決。残りはEXCELだ。関数やマクロが組めなかったのが癪で、来客や電話がなかったこともあって少しEXCElを頑張ってみた。

まずは展開元データ、普通のマトリックスです。
これを、

こう印刷したい。
昨日もブログに書いた通り、行方向に個別のお客様データを入力しており、印刷用の単票には計算式を修正せずに簡単に展開させたい。何かをクリックか、矢印キーとかで次レコードや前レコードを単票に表示されられないだろうか?
そこで考えたのが『I列』に記した、”b”から”v”の文字と、同じく『I列』61行目の数字だ。

アップだと、こうなる(見出し行は元データのもので、単票とは関係ない)。
『I列61行目』に数字を入れれば、元データの表の6行目を参照しに行き、『H列』や『J列』にある文字が元データの列を示すようにすれば、合わせ技でセルの参照番地をダイナミック(都度都度ってこと)に参照できるのではないか?
昨日は元データと単票のシートを二つに分けていたので関数エラーになったのだが、いちシートに収めたら上手くいきそう。

右のブラウン囲みが生成されたセル番地を意味する文字列、これを関数が引数として認識してくれればいいわけだ。
その関数とは・・・、indirect(インダイレクト)関数!

文法はこうです。
『I列』のセル番地と、行番号を示す『I61』をアンパーサント"&"でくっつける(←これがキモ!)。
そうしたら、、、ちゃんと引数として認識する!『I列61行目』の数字を入力すれば直に単票にそのデータが反映されてるじゃありませんか!もちろん単票の計算式にはindirect関数を全て埋め込んであります。

大まかな動きが制御できるようになったので、今度はコテ先勝負。ボタン操作でレコード(行)の移動ができるようにします。
ボタンのコントロールに最小値、最大値、増分、反映するセル番地を指定します。元データの行は2行目から45行目まであるのこの範囲、増分は当然1、リンクセルはI61です。
おぉ!やったぜ。って、これを自慢したんだけど他の社員は「ふ~ん、それ美味しいの?」てなリアクションでした。若い衆でもマクロとか開発とか全く興味ないんですよね、スマホは触るのに。チョットしたアプリなんだけど、業務改善とか興味ないのかなぁ。いつまでも俺が開発やメンテの最前線じゃマズイだろ?
Posted at 2017/12/29 21:55:24 | |
トラックバック(0) |
パソコン | 日記