気が付いたら1月もも終わり・・・

正月に記事上げてから今日まで仕事が忙しくてここは手付かずに・・・^^;

やっと落ち着いて来ました。

 

作成中のACCESSEXCEL連携システムは結局、最初から作り直す事にしました。

テーブル構成から見直し、今の所ACCESSのクエリは使用していません。

ADOを使用して全てEXCEL側からVBAで操作しています。

ACCESSはデータ保持にのみ使用している感じ。

そうする事によってACCESS側もEXCEL側もすっきりした感じがしてます。

Collectionを作成しSQLを複数収め、テーブル操作を関数化し、それに引数として渡す事によって更新や削除等で1つ、テーブルからデータを配列に入れて持って来るのに1つ、接続1つ、切断1つの計4つのプロシージャでACCESSとのやり取りしてます。

まだ3分の1程ですが、これからガンガン作り込んで行きますよ♪

(会社でACCESS、未だ入れさせてくれないので自宅でですが ^^;)

下記コードがテーブル操作を関数化したもの。

 

Function GoExecute(ByVal sqlList As Collection) As Boolean
    Dim sList As Variant
    
    DataBaseConnect
    
    On Error GoTo errorHandler
    
    adoCn.BeginTrans
    
    For Each sList In sqlList
        adoCn.Execute sList
    Next sList
    
    adoCn.CommitTrans
    
    GoExecute = True
    
    DataBaseOut
    
    Exit Function
    
errorHandler:
    adoCn.RollbackTrans
    DataBaseOut
    GoExecute = False
    ErrorDisplay
End Function

師も走り切った

晦日

 

今日は朝から張り切って(とは言ってもまだ11時台ですが)動きました。

先ず、昨日まとめておいた家の中のダンボールを車に積んで近くの集積所へ。

ところが生憎29日までとの事。仕方ないので車の中で年越しさせる事に。。。

 

次にお風呂掃除。

まぁカビ取りスプレーして放置しとくだけですが ^^;

で、その間に近くのスタンドへ洗車しに。

ところが案の定大渋滞。2~3時間は待ちそうなので断念し、久々に自分でやる事にしたんだけど、寒くてとてもじゃないが水なんか使えない。何か良い道具はないかと近くのヤックスへ。

そこで見つけたのが、それを使って車体を拭くだけで良いという優れもの。

12枚入りで500円ちょっとだ。

速攻で購入し、拭いて拭いて拭き捲った ^^

通常2~3枚でキレイになると説明に書いてあったが、私が使ったのはなんと8枚。

そんだけ汚くしてたって事かな ^^;;

とにかく仕上がりに満足するまで拭いた。結構キレイになるよ、この商品。

その後、お風呂を流して(もちろんお湯で ^^)本日の、いや、本年の作業全て終了となりました。

今は既にお正月気分でこたつに入ってビール飲みながらこれ書いてます。

 

しあわせぇ~~♪

 

a chicken or egg situation

私的に本日結論が出ました。

 

今作成しているACCESSEXCELを連携させたシステムで色々データ処理をしていますが、ACCESS側で処理してからEXCELに落とすか、落としてからEXCEL側で処理するかでずっと迷いながらも、EXCELが今までメインで使っていた物であった為、ACCESSから一括でデータを取得しEXCEL側で処理をしていました。

ま、それはそれで困る事は無かったのですが、本日実装した処理で考えが代わりました。

その処理をEXCELで処理をすると、AutoFilterで3回処理した後、条件に合致する列を取り出すと言う事をしないといけなかったのですが、ACCESSからデータを取得する際にSQLで絞って取得すれば2次元配列に入れたデータをそのままシートに張り付ければ良い事に気付いたんです。

え、気付くの遅いって? ( ̄_, ̄;)

いやぁ、だってSELECT句にフィールド名羅列するの面倒だったんだもん。 ^^;

ほら、全てならアスタリスクで事足りるでしょ?

 

横着しないでSELECT句で必要なフィールドのみを指定し、WHERE句で条件指定すれば楽勝でした。

考えるに今までの幾多の処理も、そうすれば格段にコード量が減った気がする・・・

 

今、真剣に書き直すか悩んでます ,,ԾㅂԾ,,

 

 

 

 

 

関数とVBA

今日はクリスマスイブですが、全く関係ない話です。( ̄ ‘i  ̄;)

 

VBAで作成したものは保守がし辛い、関数使った方が良いなんて聞きますがホントですか??

私はEXCELVBAから入った人間なので、関数の方が保守し辛いです。

関数ってなんであんなにネストを繰り返すんでしょう。

パッと見て解る人は凄いと思います。

 

この間、退社した方が使っていた物を自分も使いのだがエラーが出て使えないから直してくれって依頼を上司から受けました。

見てみると関数だらけでネストネストネストネスト・・・(以下4回位続く)

それが上から下までズラッと並んでる o*1o.

ファイルサイズも大きいし動作も重い。

私には無理ですと断ったのだが、何とかしてくれと嘆願されたので、どういう機能でどんな結果が欲しいのか聞き取りし作り直しました。

 

VBAを使った物は解る人間が少ないから保守出来なくなると言う人が多いのですが、ネストを繰り返した関数を読み解く事が出来る人も少ないんじゃないかなぁ・・・

 

私は断然VBAの方が保守しやすい派です ^3^

そう思うのは私だけじゃないと思うなぁ。

*1:⊙﹏⊙

2件回答

1つ目は複数シートを1つに纏めたいと言うもの。

配列使って回答。

 

2つ目は人口数を更新したいと。

こちらはDictionary使って回答。

 

ここでふと思った事が。

 

私はワークシートを扱うのにオブジェクト変数をあまり使いません

With~End派です。その中で違うシートを扱う場合のみオブジェクト変数を使います。

よく見るのが、オブジェクト変数に入れてるのにそれをWith~Endで括ったコード。

・・・・・・・・・・・・

それなら最初からWith~Endだけで良い気がするのだが。。。。

入力時の規則ってとても大事だね

本日、つくづくそう思った。

 

私が現在仕事で使用している自作ソフト(在庫管理システムです)で売り上げ、其の他色々な数字を自動算出させているのですが、社の基幹システムと連動していない為、単価等の数値が実際のものと合わなくなっていました。

その修正を本日より行う事になったのですが、酷い目に合ってます。

準備されたデータから必要な数字をピックアップして取り込むのですが、そのデータがもう無茶苦茶≡(▔﹏▔)≡

全角半角の交じりを筆頭に、不必要な記号(ハイフンだったりコンマだったり、その他諸々)の混入、数字抜け等上げたら限がない。

極め付けは、部品番号が入力されるべき欄に名称が。しかも短縮名称で同じ物が5~6種類程在る為、なんだか判らないφ(* ̄0 ̄)φ(* ̄0 ̄)

こんなデータはただのゴミじゃぁ~!!

 

やっぱり規則に則った物でしか入力出来ない様にシステム側で規制するのはとても重要だと身に沁みました(┬┬﹏┬┬)