Sub overwork_total_1()
'review [3]: 2015/2/11
Dim l, c, lng
lng = 6
For l = 6 To 33
If Range("C" & lng) < Range("C" & l) Then
lng = l
End If
Next
Range("K4").Value = Range("B" & lng).Value
Range("L4").Value = Range("C5").Value
Range("M4").Value = Range("C" & lng).Value
l = 0
For c = 4 To 8
For l = 6 To 33
If Range("M4").Value < Cells(l, c).Value Then
Range("K4").Value = Range("B" & l).Value
Range("L4").Value = Cells(5, c).Value
Range("M4").Value = Cells(l, c).Value
End If
Next
Next
End Sub
ゲストさんの投稿
(投稿ID: 1121)
Cellsを思い出したので、RangeとCellsのいいとこどりで書いてみましたヾ(*´∀`*)ノ。
(個人的にはRangeの方がセル特定しやすくて好きです)
「1月の最長労働者とその他の月の労働者との勝ち抜き」という発想で書きました。
ゲストさんのコメント
(コメントID: 2286)
> RangeとCellsのいいとこどりで書いてみました
やめたほうがよいです。
DPRの動画でもお話しているように思いますが、Process最適化のアプローチのひとつは、利用する手段の最適化(最小化)です。
ひとつの仕事でLotus123とエクセルを併用することも関数とマクロを併用することも非効率だというのと同様です。
典型的な、デキない子の仕事のやり方です。ゲストさんのような方の採るべきアプローチではありません。
この課題は、発展編1の知識があればもっとさくさくと解決します。
佐藤 あゆむさんのコメント
(コメントID: 2293)
指摘ありがとうございます。コードの短さを主眼に追求していました。
>DPRの動画でもお話しているように思いますが、Process最適化のアプローチのひとつは、利用する手段の最適化(最小化)です。
DPRの動画は昨日から見始めました。
確かに仕組みが単純なのは重要ですね。開発で言われる「例外はつくらない」とも重なります。
英語の小説と仕様書では、断然仕様書の方が読みやすいのを連想しました。
(小説では、表現の豊かさやイメージを膨らませるために同じ概念を表すが表記が全く異なる単語や表現がいくつも出てくる。
仕様書では、同じ概念を表すのに表記がばらばらということはない)
>関数とマクロを併用することも非効率だというのと同様です。
>典型的な、デキない子の仕事のやり方です。
これは...関数とマクロで役割分担するのがよいと思っていたのでやってますΣΣ(゚д゚lll)
セル内に関数を入れ、関数でカバーできない部分をマクロに組み込んでいました。
例えば、VBEに「Range("A11").value="=SUM(A1:A10)"」と入れるべきでしたか。。。
そうすると、関数を修正するときや、シートのどこに関数が入っているかを探すときにウインドウを切り替えずに済みますねヽ(*´v`*)ノ
発展編1に進むのが楽しみです(pq´v`*)
ゲストさんのコメント
(コメントID: 2294)
どういうプログラムが優れているのか?という問いの答えは、そのプログラムにどう関わる人にとって?という前提によって変わります。
http://www.exvba.com/blog/?p=4378
ですから一概には言えないですが、複数の道具が出てくる段階でメンテナンス性はイマイチですね。
>仕様書では、同じ概念を表すのに表記がばらばらということはない)
「このプログラムを書いた人がどの表現を採用したか」という情報は、そのマクロを編集する人にとって非常に重要です。
ごく簡単な表現以外知らないという人が書いたのでなければ、必ずそこには意図があるからです。
表現が違えば、抽象概念は共通でも実装は異なります。
たとえば、以下はシート「Sheet1」にある複数セルを選択する表現ですが、すべて実装は異なります。僕なら、最初のもの以外は、すべて強烈な関心を持ってその表現を採用した理由を追求します。
>これは...関数とマクロで役割分担するのがよいと思っていたのでやってますΣΣ(゚д゚lll)
>セル内に関数を入れ、関数でカバーできない部分をマクロに組み込んでいました。
>例えば、VBEに「Range("A11").value="=SUM(A1:A10)"」と入れるべきでしたか。。。
発展編1でお伝えしている内容に即して書くなら、むしろ以下ですね。
セルに関数が埋め込まれているとエクセルの動きが重たくなりますし、シロウトさんがそこだけいじってメンテナンスしようとするので。
あと、セルに関数が埋め込まれていると、元データとの結合度が高くて不便です。(配布先でファイルを開こうとするたびに警告される等)
以下、直接関係ないですが。
僕がよくするアドバイスとして、「完全最適化を目指す遊びは、ゲームとして、演習の中だけで楽しむように」というものがあります。
マクロのパフォーマンスを数%あげるための努力よりも、ムダな常駐ソフトを止めるとかOSを入れ替えるとかPCを変えるとかしたほうがよほど効果がありますし、もっと言えば、時間や集中力は、自分の仕事の専門性を高めるための研究とか一般教養のための読書とか、リフレッシュするためのゆっくりした休暇のために活用するほうが「仕事の質を高めるため」というより上位の目的に対してはよほど寄与するからです。
ゲストさんならご理解いただけるかと思いますが、エクセルのテクニック教えてはいますが、僕がいちばん作りたくないし関わりたくなのは、エクセルしか使えないエクセルバカです。
僕が受講生に期待するのは、くだらない手作業にかかる時間を省略することでできた時間をより人生を有意義なものにするために使って欲しいということです。
その一環の楽しみとしてコードの最適化を追求するというのは大いにありです。
佐藤 あゆむさんのコメント
(コメントID: 2300)
>僕が受講生に期待するのは、くだらない手作業にかかる時間を省略することでできた時間をより人生を有意義なものにするために使って欲しいということです。
マクロの存在を知らずエクセルで繰り返し作業をしていた時は、「エクセルは賢いっていうしなんとかすればこれって自動でできるんじゃないのかな?」と思いつつフラフラでした。
今はエクセル作業がくると喜びますヽ(*>∀<*)ノ
HPに書かれている「頭がよくなる、世界が広がる」という効果も実感中です。初めての業務でも、それほど途方に暮れることなく尻尾を探しそこから速やかに積み上げられるようになり、いい感じです。今までC言語でコンピューター言語がトラウマになりつつも「せっかくソフト開発会社にいるんだから一つぐらいコンピュータ言語を習得したい」とくすぶっていたのが、VBAが使えるようになるにつれて「これが身に着いたらほかの言語でもいけちゃうかも」と思うまでになっています。また、PCを滑らかに扱えるようになり、PCとかなり仲良くなりました(人´∀`)
小川 慶一さんのコメント
(コメントID: 2301)
>マクロの存在を知らずエクセルで繰り返し作業をしていた時は、「エクセルは賢いっていうしなんとかすればこれって自動でできるんじゃないのかな?」と思いつつフラフラでした。
>今はエクセル作業がくると喜びますヽ(*>∀<*)ノ
マクロ使えると仕事に対するときに感覚変わりますよね。
とにかく、楽しんでマクロ書いていれば仕事がさくさく終わりますw
>HPに書かれている「頭がよくなる、世界が広がる」という効果も実感中です。
最初から、そこ目指して講座作っていますからね。
> 「これが身に着いたらほかの言語でもいけちゃうかも」と思うまでになっています。
そう思いますよ。
もともと言語に興味関心がある人にとってはとくにそうかと。ひととおり学び終えたら自然に次にいけるように講座も設計しています。どんどん先に進んでください。
どうか、ひきつづきお楽しみを☆