[[20160927220823]] 『ここでの質問の趣旨と離れていますがvbaに関する早x(vo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ここでの質問の趣旨と離れていますがvbaに関する相談に乗ってください』(vo)

関東と東北にある会社員です。

東北支部で使用しているプログラムを頂き、こちらで使用するとうまく回りません(※デバッグにはならないが加工して出来たものが変)。上司が東北のプログラム作成者に問い合わせたところ「関東側で使うファイルと仕様が違う為です。こちらで改良する義務は無いのでそちらでお願いします」と言われ、最近vbaを学び始めた私に改良してくれと仕事が来ました。

Alt+F11で中身を見ると当然訳のわからない長いプログラムで何から手を付けてよいかわからない状態でした。

会社としてどこかへプログラム作成を依頼する空気でも無いですし、「時間かかってもいいから」としか上司は言いません。

そこで今思いつく解決法は以下の通りです

1.自腹で誰かに作成を依頼する
デメリット→メンテナンス等が出来ない。そもそも上司にばれたらまずい。

2.時間をかけて独学で改良する
デメリット→何か月かかるかわからない為、当然勤務中には出来ず、家でこつこつやっていかなければならない。何十時間のただ働きになるだろう。

3.vbaのスクールで教わりながら改良する
デメリット→10万はくだらない

これ以外にもっと良い案は無いでしょうか?
宜しくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 確かにちょっと変わった質問ですね
 (受け取り方によっては丸投げの質問につながりそう)

 >「関東側で使うファイルと仕様が違う為
 ファイルの仕様とは、読込み側のファイルですか?
 それとも出力用のファイルですか?
 読込み側なら、東北の仕様を聞き出して、関東のファイルをそれに合わせてから
 当該プログラムにかければいいのではないですか?

 長いプログラムということですが、何行くらいのものだったんですか? 

 加工してできたものが変ということですが、
 何をインプットするとどんなアウトプットがあるべきだと言うことは
 整理できているんですよね?
 それができていなければ、丸投げにもなりません。

 まぁ、丸投げにまともな定義はありませんが、
 システムの大掛かりさと、回答者の力量の相関関係で決まります。

 >メンテナンス等が出来ない。
 これは、あなたが未熟であるかぎり、ずーっとついて回ります。

 冒頭の質問文だと、この程度のことしか言えないです。

(半平太) 2016/09/27(火) 23:32


 本件、よくありがちで、でも指示された立場としては、悩ましい難題かもしれませんし
 もしかしたら、正攻法として考えるなら単純な問題かもしれません。

 その悩ましさを考える前に。
 こちらのフォーマットを東北のフォーマットに合わせたうえで処理をする。
 実は、これは、実際の業務処理の中で、緊急を要する場合に、結構使う方策です。

 流れは逆ですが、たとえば、企業間でデータ連携をする。ところが、先方の企業が、定期的にレイアウトを見直して変更。
 本筋としては、こちら側のうけがわプログラムを変更しなければいけませんが、間に合わない。

 で、元々のレイアウトを Aフォーマット、変更されたフォーマットを Bフォーマットとしますと
 BフォーマットをAフォーマットに変換するプログラムを書いて実行。できあがった (旧)Aフォーマットデータに対して
 既存プログラムを実行。

 今回の流れなら、その逆、こちらの Xフォーマット を 先方仕様の Aフォーマットに変換するコードを書いて
 Aフォーマット処理をする先方プログラムを、そのまま使う。

 でも、これは、あくまで「臨時的な緊急対応」だと思います。こういったことを繰り返すと何が何だかわからなくなります。
 ですから、半平太さんが示唆されたように、臨時対応ではなく、vo さんのところのフォーマットを、「正式に」先方の仕様に変更する。
 そうすると、同じ仕様のフォーマットを相手にするわけですから先方プログラムが問題なく利用できる ということになります。

 そういうわけにもいかない ということなら、冒頭で書きましたが、「悩ましいかもしれないけど、実は単純」な問題になります。

 vo さんは 選択肢を 3つあげましたげど、もう2つ。

 4.自分にはできないと上司に断る。その理由としては、これを達成するには、もっともっと勉強しなければいけない。
  勤務時間中に勉強していいならがんばる。家に持ち帰って勉強するということは、サービス残業になるから受け入れられない。
  かつ、独学では期待に応えられそうにないので、パソコンスクールに通わなければいけない。その費用を自腹というのも受け入れられない。

 このアクション、結構 リスクがありますね。「こいつ、つかえないやつだ」とみなされ評価が下がるかもしれない。
 あるいは、逆に、上司が、「そうだね。わかった。じゃぁ、会社が費用を持つのでパソコンスクールに通ってくれ」といわれたとして
 vo さんがスクールに通って、でも、結果として身につかなかったとします。勤務時間中に勉強させ、しかも費用を会社で持ったのに
 なんだ、こいつは! 時間と金を無駄遣いして!! と、そうなってしまうリスクもあります。(結構高いリスク)

 こういうリスクを、どう判断するか、それは、掲示板の回答者が答える範疇のものではなく、あくまで vo さんが腹をくくって判断すべきです。

 全く逆に、以下のような 5つめの選択肢も考えられます。

 5.「自分の会社内での価値を高めるための自己啓発」と考える。
  そう考えると、VBA習得は【自分自身に対する投資】になります。
  まぁ、そうしても、会社内での価値が上がるかどうか、それは、回答者がコミットできるものではありませんので、これも vo さんが判断してください。

(β) 2016/09/28(水) 07:04


 私が書いた方が「臨時的な緊急対応」のような気がするのですが・・

 考えてみると、そのまま使える訳でもないプログラムをなぜ関東にくれたのでしょうか。
 上司が無理やり貰って来ただけなんでしょうか。

 そもそも、東北でもちゃんと動いてるかどうかも分からないんじゃないですか?
 バグが発見されて手直ししたとしても、関東に逐一連絡してくれる訳でもないですよね。

 なら、いくら時間がかかってもいいという事なんですから、
 もらったプログラムのことは忘れて、関東側も独自に作るしかないんじゃないでしょうか。

 会社全体としては、無駄なことをしているなぁとは思いますけど。

(半平太) 2016/09/28(水) 08:07


2.時間をかけて独学で改良する
これが何で
当然勤務中には出来ず になるのでしょうか?それも勤務中の仕事に入るのではないですか?
(vv) 2016/09/28(水) 08:51

東北と東京で、シートのフォーマットが違うために、東北で作成したマクロが正しく動かないのですかね?
会社としてのフォーマットは、どちらが正しいのですか? 一般的に本社は大きな都市側なので、東京が正?

特にルールはなく、拠点毎に独自集計しているのならば、確かに東北の担当者さんが東京のシートに対応する義務はありませんね。しかしながら、おなじ会社内なのだし、東京のブックを見せて、何処を修正すれば良いかくらいは聞き出せないものでしょうか。

まぁ、マクロを作った事が無いのであれば、ピンポイントで要点を指摘できず、会話するのも大変かも知れません。それでも、直接顔を合わせた相手ならば、そこは昼飯1回くらいで頼めそうですが、見知らぬ相手には頼みにくいですね。

いずれにせよ、社内業務に関係するものなので、仕事時間中に対応できるでしょうし、お互いの上司同士で話をしてもらうことだってできそうに思いますよ。 少なくとも、ここで第3者にシートの詳細とデータ、マクロ内容を全て開示してアドバイスを受けるよりはマシかと思います。

できないことを無理して受ける必要はありません。できないならできないと言い、こうすれば実現できる、という提案をしましょう。 人と会話しネゴするのも、立派なスキルです。 コーディングができないから使えない奴。こうは判断されません。 できないことを安請け合いして結局時間をかけても駄目だった、とか、試しもしないで、代案も持たずに単に自分にはできないと言うとか、そういうのがマイナス判定材料かと思います。

なお、スクールに通うというのは、一番駄目なパターンです。先生に今のシートとマクロを見せて、作ってもらうという訳にはいきませんよね? 先生は、スケジュールに従って、既に用意されたコンテンツで教育するのみですよ。 時間とお金の無駄な上、結局マクロは直せない事でしょう。
(???) 2016/09/28(水) 09:17


こんにちは。

わたしならそのマクロを作った人を教えてもらって
雑談ベースで構わないので、どうやって勉強したか尋ねます。
それとぶっちゃけ、このコードがどのくらいむつかしいのか
勉強のための金を会社に出してもらうにしろ時間を取らせてもらうにしろ
「どのくらい」か具体的に言えないと はなしにならないでしょう。

ちなみに。
手っ取り早く勉強するならパソコン教室がお勧めです。
単位時間当たりの情報量が一番多いので。
10万円まではかかりません。わたしが料金を知っているところだと
http://officetanaka.net/seminar/seminar1.htm(約5万円、割引有り)
http://www.relief.jp/itnote/archives/013926.php(3万円)
http://tatehide-blog.net/seminar/excelvba_beginner(2万円)

また、地方公共団体や商工会議所が主催の講座は、お安く受講できます。
東京なら探せばいろいろあるのではないですか?

( 佳 ) 2016/09/28(水) 20:45


皆さんありがとうございます。

あるシステムから外注リストのcsvを抽出しそれをプログラムで読み込むと取引先別に分かれたExcelが生成されるんです。

システムとcsvは関東と東北で同じものです。

使っていたプログラムが全く違うもので東北側のものに合わせようということになりました。

ですが貰ったプログラムを回すとあちこちにバグが生じます。
名前が入るべきところにXXXXという文字列が入ったり、
同じ名前が重複して入ってしまったり、
全部訳が分からないということではなくて虫食いのように不備のあるファイルが生成されます

csvのフォーマットが一緒でもそもそものデータに違いがある為だと思うので、
どこがどういう風に違うのか調べることからですかね。

プログラムは標準モジュールが8つくらいあって一番長いモジュールで1000行くらいでした。
出来るかわからないことに毎月長時間残業をするのは会社に悪くて、、、

プログラムを変えるのではなくcsvを東北に合わすのは発想になかったです。有りですね。

やっぱり何とかお願いしてシステム開発者に教えを乞うことが近道ですかね、、、
(vo) 2016/09/28(水) 21:35


 >あるシステムから外注リストのcsvを抽出しそれをプログラムで読み込むと
 >取引先別に分かれたExcelが生成されるんです。 

 ふーん、そんな程度の処理に1000行も要るんですかねぇ。
 ピボットとかフィルターを使えば簡単じゃないですか?

 取引先コードの体系が複雑怪奇になっていたりする為なんでしょうか?
 でもそれは、プログラムで対処するより、取引先マスターを整備すればいい話ですからねぇ。

 ちょっと理解不能なプログラムの規模です。

 個人的な感覚では、一番簡単に作れるプログラムだと思います。

(半平太) 2016/09/28(水) 22:15


雑感。

東北の作成者の身になってみると、
作成したコードについて具体的に質問を受けることは、
本来は歓迎することではないかと思う。
技術者の感性は本来そうしたものではないかと想像。

だから本来は、こちらで作成する前提で、
基本的な考え方を教えて欲しい、
留意点についてもコメントをもらえると嬉しい、
といった言い方であれば、
普通は協力してもらえるはずだったと思う。
同じ会社内のことでもあるわけだし。

想像だが、そこを、「作ってくれや、いや、何でそんな言い方されないかんのや」
と関係をこじらせたのは貴君の上司ではないのか、と思う。
だから、貴君がストレートに作成者(ないしその部下)とコンタクトをとるのも一方法かもしれない。

いや、もうそういう時期は過ぎて、修復不可能ということなら、
上司に責任を取ってもらって、経済的援助をしてもらうことを考えるべきだろうと思う。
直接、そうは言えなくても、腹のなかでそうした考えをもって
臨んでも悪いことではないと思う。

(γ) 2016/09/28(水) 23:35


 (これは根拠の無い大変無責任な発言を含みますので、そのつもりで聞いて下さい)

 >こちらで改良する義務は無いのでそちらでお願いします
 >標準モジュールが8つくらいあって一番長いモジュールで1000行くらい

 あーこいつは、ひよっとしたら
 ウチの親会社のシステム担当ども(VBとCOBOL専門)にありがちなパターンかもデスよ?

 ・Excel固有の機能を活用しない(知らない)
 ・例外を「全く」考慮していない
 ・処理速度とかメモリコストとか気にしない
 ・リテラル値が大好き
 ・SelectとかSelectionとかも大好き
 ・なんだかいろいろ古臭い
 ・使用後、上書き保存したら次回使用時にエラー
 ・やたら縦に長い(あと空白行多過ぎ)
 ・モジュール数が多いけど別に役割分担してる訳ではない
 ・意味も無くDimをモジュールレベルに書きたがる
 ・そのくせに変数のネーミングが超テキトー
 ・更にLongとString以外は「徹底的に」データ型を宣言しない
 ・直接キックするプロシージャ(Main)はすごく短い
 ・んだけど、中核処理となるプロシージャはめっちゃ長い
 ・で、大抵は同じステートメントが何回も何回も出てくる(なぜソコを外に出さない!!)

 などという事がある「かも」知れないのです。(あくまで「かも」ね)

 いずれにせよ、
 >最近vbaを学び始めた私に改良してくれと仕事が来ました
 >時間かかってもいいから
 ということですので、

 >プログラムを変えるのではなくcsvを東北に合わす
 コレでとりあえずのりきれた後でも構わないとは思いますが、
 一度じっくり時間を掛けて「貰ったプログラム」の解読作業をやってみた方が良いと思います。
 それだけでもかなり「勉強」になりますよ?

 今は
 >訳のわからない長いプログラム
 にしか見えないものが、案外「え? 結局そんだけ?」って風に見えるかも知れません。

 その上で、入口の条件(外注リストのcsv)と出口の条件(取引先別に分かれたExcel)だけを「縛り」にして
 ご自分でプログラムを再現してみましょうよ。

 んで、その3年後に自分の書いたコードを久々に見て、ひとり赤面したりするんです。
 でチョチョイと修正して、更にその3年後にまだ赤面するんです。
 しあわせでしょ?

(白茶) 2016/09/28(水) 23:50


 私も雑感程度に。

 皆さんいわれるように、率直に、相手と話せば道は何かしら開ける可能性はありますね。

 ただ、もしかしたら・・・
 半平太さんがいわれるように、単純な処理でいけそうなのに、いくつものモジュールがあって、中には1000行もあるものも!!
 元ネタは【システム】から出力されているということですから、おそらく、ちゃんとしたシステムで、そこにはバグはないと思います。
 で、想像ですけど(結構ありがちなので)、そのちゃんとした統一フォームから、何かしらのレイアウトに加工する 東北のVBA、
 これは、全社的な要件をカバーしているのではなく、東北独自の、データのありようで、いろんな独自の加工をしている。
 しかも、コンスタント、どっさりで。
 客先が●●商事なら、□□情報は、会社のシステムに入れていないので、△△を無条件にセットとか、
 金額は、会社のシステムには、×××円としていれているけど、加工時は 1.5倍するとか、
 さらには、会社のシステムには、ここまでしか入力していないので、これこれを追加しておくとか 等々。

 あるいは、コード変換が必要だけど、マスタを準備して処理するのが面倒なので
 AAA なら、これこれ。BBBなら、これこれ、CCCなら これこれ。そのほかは東北では扱っていないので取り込みをしないとか。

 そんなばかな! と思われるかもしれませんけど、結構、ありがちなんです。

 もし、そういうものであるとしたら、東北にとっては、間違いのない出力がされるのでしょうけど、関東のデータを元にすると
 どんな結果になるか保証の限りではない。

 昔、あるブランドを扱っている有名企業の商品を保管し、入出庫を行う物流企業のシステムのお手伝いをしたことがあります。
 その有名企業さんがいうには、自分のところのデータは、とても特殊で、正しい処理をするには、膨大なシステム構築が必要。
 それを、今から作ると、システム品質で心配。安心して商品を預けることができない。
 ついては、すでに、過去から XXX倉庫 という会社と取引をしていて、そこのシステムは、問題なく処理できている。
 なので、システムを作るのではなく、そのXXX倉庫のシステムを借りて運用してほしいといわれました。

 で、XXX倉庫に出向き相談。結果は断られました。意地悪をされたのではなく、有名企業さんの、ややこしいデータを処理するために
 コンスタントをどっさりハードコーディングして、XXX倉庫用の独自処理を行っている、たとえば ■■■ブランドのバッグなら
 ロケAの棚Bに半分とロケXの棚Yに半分、わけて保管する 等々。

 東北のコードロジックも、そういった状況かもしれませんね。

(β) 2016/09/29(木) 00:12


>これ以外にもっと良い案は無いでしょうか?
ども^^

「手動で処理する」
という案は無いのでしょうか?
現状は手動でとりあえず、求めている結果が得られてるんですかね?

>あるシステムから外注リストのcsvを抽出しそれをプログラムで読み込むと
>取引先別に分かれたExcelが生成されるんです。

CSVファイルは、とりあえずエクセルで開けますし、
開けたら、フィルター機能や集計機能やピボットテーブル機能などで、
取引先毎に表示できるかと思います。
まずは、「ある程度Excelを使いこなす。」ことから始めてみてはいかがでしょう?

>取引先別に分かれたExcelが生成されるんです。
↑意味がよくわかりませんが、Excelは生成されるものじゃなくて、
アプリケーションソフトですよね?
生成されるのはExcelのファイル?あるいはエクセルのシート?
いずれにしても取引先毎に分ける作業は掲示板でよく質問されてますので、
あちこちの掲示板の過去ログを漁れば、似たような案件が見つかると思います。

また、
数十行のコードで処理できると思うので、
やりたいことを整理したら、
ここで興味のあるところから教えてもらえると思いますが・・・?
(まっつわん) 2016/09/29(木) 12:26


こんにちは。

>あるシステムから外注リストのcsvを抽出しそれをプログラムで読み込むと取引先別に分かれたExcelが生成されるんです。
>使っていたプログラムが全く違うもので東北側のものに合わせようということになりました。

関東にも同じような仕事をするプログラム(マクロ)は有ったのですね。
となると、ずいぶんと景色が違ってきます。
おそらく回答者のほとんどがこう考えていたと思います。
「同じ結果を出せるコードを自分で一から書くほうが簡単かも」
でも、「東北にあわせないといけない」なら、この方法は使えないことになりますね。

もしかして、関東側のマクロはvoさんが書かれたのですか。
それによっても見える景色はまた違ってきます。

東北側のプログラムにあわせるのはそちらのほうが秀でているから、でしょうか。
たとえば動作が速いとか。
であれば、速くするための仕組みがコードの中に組み込まれているはずなので
その部分を探して理解する気持ちで読むと理解が進むかな、と思います。

>やっぱり何とかお願いしてシステム開発者に教えを乞うことが近道ですかね、、、
システム開発者とは、東北側のマクロ作成者のことですか?
許されるなら教えを請うべきですが、なにをどう尋ねるかですね。

( 佳 ) 2016/09/29(木) 20:45


少し時間が経って読みなおしてみると、質問自体に疑問がわきます。
ご指摘のとおり、作業内容と1000行というのが、いかにも不釣り合いです。
1000行程度というのは実測なのか、印象なのか。
・作業内容自体を質問者さんが把握できていないのかもしれない。
 相当の多機能を持つのであれば、普通は個人の開発なんかに期待せず、
 組織として対応するはず。ITセクションというものが会社にはあるでしょう。
 個人商店でもないんでしょうから。共通のツールを作るはずじゃないですか。
・逆に、簡単な内容という印象を出すことで、実質的な助言を求めているのか。
 それならそうで、もっと具体的な説明をすれば、従来の示唆に加えて、
 詳しい助言も得られそうです。

(γ) 2016/09/30(金) 07:29


>プログラムは標準モジュールが8つくらいあって一番長いモジュールで1000行くらいでした。
    cellAdrsList(1) = "J": cellAdrsList(2) = "K": cellAdrsList(3) = "L": cellAdrsList(4) = "M": cellAdrsList(5) = "N"
    cellAdrsList(6) = "O": cellAdrsList(7) = "P": cellAdrsList(8) = "Q": cellAdrsList(9) = "R": cellAdrsList(10) = "S"

こんなことや、

'''''''''''''''''''''''''''配列設定''''''''''''''''''''''''''

    tate_9 = Array("", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AW")
    tate_10 = Array("", "AX", "AY", "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV", "BW", "BX", "BY", "BZ", "CA", "CA")

こんなことを延々と書いてるのかなぁと想像しますが。。。
(それにしても1000行にはならないか^^;;)

>システムとcsvは関東と東北で同じものです。

>csvのフォーマットが一緒でもそもそものデータに違いがある為
矛盾があるような気がしますが、結果が上手く出ないということなら、
Excelでファイルを開いたときに、列が微妙にずれるんでしょうね。

(まっつわん) 2016/09/30(金) 12:45


皆さん有難うございます!!
激務で明日も朝早く、今帰りの電車でスマホで打っています。皆さん色んな憶測をして時間を割いて頂いてるんですが、やはり私自身まだ東北のvbaの仕組みが把握できていなく、会社でもう少し色々聴取できそうなので出来ることはやっていきます。
あと、私の説明に語弊があったと思うのですが、回して生成されて出来たファイルが東北と同じものになっていれば良いのでプログラムを一から作るというやり方もありだと思います。現在は私が入社した時からあるプログラムを回していますが、東北のものより出来たものが情報やレイアウトがしょぼいのです。また、1000行と申し上げた点についても実際に生成ボタンを押して途中でescを押してコードを見ると一つの300行くらいののプロシージャを実行しているだけのようで、沢山のモジュールと沢山のプロシージャが入ってるだけで、それは使用されてないように見えます。あくまで憶測ですが。
すみません、頭がぼーっとしているので次の休日にもっと詳しく書きます!
(vo) 2016/09/30(金) 23:19

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.