引用元: http://hayabusa.open2ch.net/test/read.cgi/news4vip/1451211570/

645f94d0d286ed271363e3ebf6ce429a_s

1: 名無しさん@おーぷん 2015/12/27(日)19:19:30 ID:7kS
普通の事務職じゃここまでやらんだろ?
あと複数の列の値まで取得できるようにした

2: 名無しさん@おーぷん 2015/12/27(日)19:22:13 ID:Onx
一方俺はExcel代替ソフトを作って一切人が関わらなくても処理が終わるようにした

3: 名無しさん@おーぷん 2015/12/27(日)19:26:17 ID:2K7
手書き書類を全力でエクセルにしてマクロ組んだのはいいが、

そこまで効率化すると定時までの仕事がなくなることに気づき一部を手書きに戻した

5: 名無しさん@おーぷん 2015/12/27(日)19:27:59 ID:wuX
事務でコーディングするのは優秀

9: 名無しさん@おーぷん 2015/12/27(日)19:32:00 ID:7kS
>>5
まぁデータ分析がメインなんでマクロ組むのが日常的になってしまった
しかし、他の言語がもう書ける気がしない
Variant型が優秀すぎて型識別する必要ないしな
しかし、本当はそこら辺もう少し凝ればかなり高速化できるんだけどなぁ
多分数値型にするだけで100倍は早くなると思う

6: 名無しさん@おーぷん 2015/12/27(日)19:29:13 ID:edN
マクロは一生面倒見る気無いなら使うべきで無い

引き続きしないで去るとか最悪

7: 名無しさん@おーぷん 2015/12/27(日)19:30:13 ID:7kS
>>6
引継ぎってレベルはないし、改善しなくてもいいようにしてる
まぁドキュメントはもう作った
100行ないコーディングだから説明も何もないけどな
何も知らないやつに引き継ぐのは不可能だが

10: 名無しさん@おーぷん 2015/12/27(日)19:32:24 ID:edN
>>7
仕様が変わっても対応できるならともかく
メンテフリーとか有り得んやろ
100無い言うが知らん奴には未知の暗号解読に匹敵するんだぜ

12: 名無しさん@おーぷん 2015/12/27(日)19:34:30 ID:7kS
>>10
何が変わるかなぁ
単純な動作で動くから上位版になって出来なくなることが出来れば有り得るけど
ただ、マクロがなくなってもかかる時間が増えるだけだからなくなっても困らんよ

8: 名無しさん@おーぷん 2015/12/27(日)19:31:53 ID:2K7
元が手書きでやってた仕事ならマクロ組んだって構わねえよ。

マクロ理解できないなら手書きでやればいいだけ

11: 名無しさん@おーぷん 2015/12/27(日)19:33:01 ID:7kS
>>8
手書きっていうかただのVLOOKUPなんだけどな
10万行以上やろうとしたらPC使い物にならなくなったなら作ってみた
10秒くらいで終わるように高速化した

13: 名無しさん@おーぷん 2015/12/27(日)19:37:57 ID:GPW
ちゃんとテストしてるのならいいけどユーザ部門の糞スクリプトほど害悪なものは無いわ

14: 名無しさん@おーぷん 2015/12/27(日)19:39:45 ID:7kS
>>13
そう言われると難しいなぁ
想定されるテストはしたけど抜けがないとは言えない
1時間かからない程度で作ったやつだからな

15: 名無しさん@おーぷん 2015/12/27(日)19:40:13 ID:lJN
セルを変数にいれてループで回すだけなのになぜ100行もかかるのか

16: 名無しさん@おーぷん 2015/12/27(日)19:41:03 ID:7kS
>>15
正確には64行だった
単純にそんなやったら高速化できんよ

17: 名無しさん@おーぷん 2015/12/27(日)19:42:09 ID:lJN
できるよ
てか10万行で10秒って遅いし

18: 名無しさん@おーぷん 2015/12/27(日)19:42:39 ID:7kS
>>17
じゃあソースよろ
俺には限界だわ

19: 名無しさん@おーぷん 2015/12/27(日)19:47:05 ID:lJN
だからrangeで指定した範囲をそのまま変数に入れてループ回すだけだよ

21: 名無しさん@おーぷん 2015/12/27(日)19:50:19 ID:7kS
>>19
それだけじゃ全然高速にならないしVLOOKUPにならないんですがそれは

23: 名無しさん@おーぷん 2015/12/27(日)19:52:54 ID:lJN
>>21
vlookupの真似事程度なら普通に1,2秒で取れるね
10万行ずつ持った2つのcsvをマージするマクロ書いた時が
これで大体10秒程度だったからな

25: 名無しさん@おーぷん 2015/12/27(日)19:56:53 ID:7kS
>>23
・・・・・・たぶん、君は理解してないようだわ

29: 名無しさん@おーぷん 2015/12/27(日)20:08:29 ID:lJN
>>25
いや理解してないのはお前だな
必要なデータを引っこ抜くんだから比較は当たり前
オンメモリで走らせれば10万行の比較くらい1秒もかからんわ

中身見ないってことはオブジェクトのまま処理しようとしてんだろ
んなもんで速度出るわけないんだが、高速化したコードまだですかー??

20: 名無しさん@おーぷん 2015/12/27(日)19:49:12 ID:lJN
objRng=Range(範囲)
for i = 1 to 100000
処理
next i

22: 名無しさん@おーぷん 2015/12/27(日)19:50:35 ID:lJN
処理の部分でoajRngを見るだけな
スマホだからこれ以上の説明はめんどい

24: 名無しさん@おーぷん 2015/12/27(日)19:55:35 ID:7kS
>>22
処理の中身書かないと何やってるか分からないだろ?
中身見るってわざわざ比較でもするの?

26: 名無しさん@おーぷん 2015/12/27(日)19:57:17 ID:lJN
>>24
要件が分からないんだから処理の中身なんて書きようがないだろ
まず10秒かかるとかいうお前のゴミコード貼れよ

27: 名無しさん@おーぷん 2015/12/27(日)19:58:31 ID:edN
ムキになんなよ…

30: 名無しさん@おーぷん 2015/12/27(日)21:07:27 ID:lJN
試しに作ってみたら1秒もかからずワロタ

31: 名無しさん@おーぷん 2015/12/27(日)21:26:31 ID:lJN
一応貼っといてやるかw

10万行7列のデータから左端の値にマッチしたレコードを返すマクロな
結果返すまでに1秒かからないんだが、この程度のことに64行も使って
しかも10秒かかるって君はどんなクソコードを書いてるのかな?w

あ、言っとくけどこれこのまま使わないほうがいいからね
まぁお前はその理由すら分からないレベルだろうけどwww

Dim objRng As Variant
Dim key As Double

objRng = Range(Cells(5, 1), Cells(100004, 7))
key = Cells(2.1)

For i = 1 To 100000
If objRng(i, 1) = key Then
Cells(3, 2) = objRng(i, 2)
Cells(3, 3) = objRng(i, 3)
Cells(3, 4) = objRng(i, 4)
Cells(3, 5) = objRng(i, 5)
Cells(3, 6) = objRng(i, 6)
Cells(3, 7) = objRng(i, 7)
End If
Next i

38: 名無しさん@おーぷん 2015/12/27(日)22:38:25 ID:isj
>>31のコードがドイヒーよって書こうとしたけど
わざとドイヒく書いてんだねww

32: 名無しさん@おーぷん 2015/12/27(日)21:29:48 ID:BTG
マクロ組んでマニュアルまで作っても後任の奴は理解しようとしないんでしょ?

34: 名無しさん@おーぷん 2015/12/27(日)21:36:04 ID:lJN
事務の雑魚がクソコード書く
その雑魚が辞める
他の奴はメンテできない
そうだ、情シスにお願いしよう

前職で>>1みたいな勘違いオナニー野郎の尻拭いを散々やってきたわ
雑魚は雑魚だと自覚してくれよほんとw

35: 名無しさん@おーぷん 2015/12/27(日)21:40:10 ID:DHj
>>34
お仕事お疲れさまです
他に使えるテクニックとか、わかりやすい書き方とか有ったら書き込んでくれたらうれしいな

36: 名無しさん@おーぷん 2015/12/27(日)21:44:05 ID:lJN
>>35
上の例で言えば、今は左端の列を判定に使ってるけど
汎用性持たせるなら判定列も変数にさせたほうが良い
あと、今だと毎回10万回ループしてるから、マッチした時点で抜けたほうがいい
てか、そもそも10万行を変数に入れるのも無駄だから、
データが入ってる行数分だけ変数に入れたほうがいい