• 締切済み

VBA作業の効率化

お世話になります。 さて、少し取り留めのない質問なのですが よろしくお願いします。 お陰様ある程度VBAの作業に慣れてきた感じがしています。 それで作業量が多くなってくると 同じような構文などを入力したりコピーしたりすることに疑問を持ち始めました。 例えば、作業の内容で、 for~のループの構文を書くことが多いです。  ワークブックを取得するループ  シートを取得するループ  セルの値を取得するループ  HTMLのタグを探すループ  ...etc などその都度構文を入力していますが、 もっと効率的にできないものかと思っています。 他のサイトの引用ですが 感じていることはこのようなことです。 ・時間がかかる ・大量の「コピー&貼り付け」は人間なのでミスが発生する可能性がある。 ・この仕様が変更になった場合、修正個所が多すぎる。 http://homepage1.nifty.com/rucio/main/shokyu/jugyou30.htm 定番のモジュールをエクスポートしておいて 新しく作る時にインストールするとかもあるのでしょうけど あまり効率的でないなぁと感じています。 そもそもコピペなども 大量になってくるとコピペ元を探すのも大変になってきます。 今後、どのようなことに心がければ、  作業を効率化していけるか?  入力する量を減らしていけるか?  が、さっぱり想像がつかないので質問させていただきました。 なにかヒントでももらえれば幸いです。 よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

みんなの回答

回答No.7

こんばんは。 #4からの続きです。 >一通りやった後、どうするんだ?っていう本がなかなか見当たらないですし、 そういえばそうなんですが、VB6がなくなったということが、やはり大きいのではないでしょうか。 いろんなことは、VB6から覚えましたから。VB6は、似ていて、違う書き方をします。ここの掲示板の常連の方に発言をひるがえすようなのですが、「アルゴリズム」というのも、VB6からです。しかし、昔は、私の知らないようなアルゴリズムを書いていた人がいましたが、今は、まったくいなくなってしまいました。 下の本は、今では、二束三文になってしまっていますが、これを半分ぐらいはVB6で実行しています。 とても覚えられるものではありませんが、勉強になるのは、プログラミング言語には、関わらないということです。だから、私は、同じシリーズのC++も持っています。 『Visual Basicによるはじめてのアルゴリズム入門』河西 朝雄著 http://amazon.co.jp/dp/4774107824 それから、Excel VBAのテキストでは、ActiveX コントロールの使いこなしは、よく使うものしか書かれていません。河西朝雄さんのVB6の著書で、ほぼ全域に渡って学びました。現在では、VB6 Runtime は、フルには使えなかったと思います。 #5さんの >・ひょっとしてVBAの開発を一人でやっていませんか? >開発の作業は必ず、複数でチームで行ってください。 私も、ずっと一人でしたね。仕事も一人が長かったです。 十数人いる部署でしたが、リストラ続きで、最後に私だけが残ってしまいました。 だからこそ、私の作ったマクロ(VBAではない)は、3人分ぐらいの仕事をしてくれました。 半日も掛かる計算の作業を、たったの10分で終えられるのだから、それは珍重しました。 個人的には、プログラミングを覚えるのは、一人の方がよいと思いますが、開発作業は、複数のほうがずっと良いでしょう。コーディング・ルールというのは、複数の人が共同開発するところから始まったわけですが、どういうわけか、Excel VBAになると、身勝手なコードが横行しているような気がします。自分とそっくりな書き方をする人がいると、ほっとさせてくれます。 >エクセルでのネット環境が数段進歩してきたので本腰を入れようとしているところです。 これは、日進月歩ですね。私が、数年VBAをやっていない間に、世間でも、掲示板でも、私の知らないコードが出てきたりしています。DOMに移行し、JavaScriptで取得というのが大流行です。VB系の古い人は、Javaスタイルには、なかなか追いついていけませんね。しかし、もはや知らないというわけには行かなくなってしまいました。 古い記事です。 DOMを使って目的の情報へダッシュ http://www.atmarkit.co.jp/ait/articles/0103/23/news004.html 私自身は、もうVBAはほとんどやる気がありません。私のPCライフの岐路は、1989年で、あの頃、MS-DOSは、OS/2から、本格的にUnix系になるものだと思っていました。しかし、それなのに、VB系などに手を出してしまったという感が残っています。 余談ですが、VBAでも、コードはテキストファイルでの管理のほうが安心です。VBEの中を検索できればよいのですが、マクロでできることは出来ても、あまり褒められたコードではありませんね。 それと、もう一つ余談ですが、ここの掲示板は、Excel VBAでアクセスし、書き込みのログ管理などもVBAで行われています。ログはテキストファイルですが、UserFormのコマンドボタンから、Grep検索を使って開くようになっています。ただ、掲示板へのアップロードは、万が一もあるので、手動で行っています。 またまた、余談ですが、数年前になりますが、半年ぐらいWindows OS系/ハード系の師匠の仕事に同行させてもらいました。Officeなどのアプリケーション系では知り得ないことも、結構あるものです。師匠にくっついていて気がついたのは、勉強のために、持ち出し(=自腹)のお金が多いなって気がしました。そのわりには、収入は高くないようなのです。私は、同じようには、続けられないなと思いました。

ken123
質問者

お礼

WindFaller さま 再々のお返事ありがとうございます。 本当にここまでしていただいて感謝・感謝です。 本のご紹介ありがとうございます。 早速注文いたしました。(アマゾンでプレミア価格になる直前で助かりましたw) 結局のところ、いろいろなテクニックを今すぐに身につけられるわけでもないことは理解していますし 一体、自分は何に困って悩んでいるのだろう? ということを、ちょうどこの2,3日、いろいろと探っていました。 それで、ちょうど今日なのですが 2つのポイントに絞られてきた気がしてます。  1 処理がその都度になっていて、ベースとなるものが不安定  2 技術の再利用・蓄積ができていない 2についてはこれまでいろいろと教えていただき 皆様のご指摘とおり、textファイルに落とし込みながら管理していきます。 それで、1が大きく欠けていることに気づきました。 簡単な言葉で表現するとデータベースです。 断片的な処理しかできてこなかった感があります。 ご紹介いただきましたサイトの DOMを使って目的の情報へダッシュへの記事も つい最近に身に着けた技術で、逆にそのことで出来ることの幅が大きく広がって 混乱してしまったところがあります。 ------- それで、早速データーベースの再構築からやり直し始めたところです。 >ここの掲示板は、Excel VBAでアクセスし、書き込みのログ管理などもVBAで行われています。 大変恐縮なのですが、下記について教えていただいてよろしいでしょうか? ----------  質問1 巡回の仕組み  質問2 情報を蓄積するDBの作り方 (APIもあるようですが、とりあえずWebサイトの巡回ということで・・・) ---------- ■質問1 巡回の仕組み 例えばこの掲示板でWebサイトからの情報取得の場合 ・「VBA」のキーワードで新規質問のレスを抽出・転記  →これはできます。 ・回答がつけばテキストを抽出・転記    →ここが少しあやふや 考えられる仕組みとして、 sub   KWで新規質問の有無の確認 → URL取得  「締め切りました」テキスト表示の有・無確認    無の場合      回答数を取得      回答数が前の巡回時よりも多ければ、テキストを抽出・転記     有の場合、上記の回答数を確認して、以後の巡回を止める end といった仕組みでしょうか? ----- ■質問2 情報を蓄積するDBの作り方 上記の質問1の情報を蓄積するデーターベースのテーブルを持っていらっしゃると思います。 ・VBAでアクセスとのことですが、DBは何をご利用でしょうか? (WindFaller さまの場合、エクセルではたぶん大きさ的に無理ですね) ・無理やりエクセルだけで管理すると仮定してもらってデータを蓄積していくとすると  少なくてもKW単位くらいでDBを分けて行かないとかなり重たくなると思います。  このときに、方法として2つ考えられると思います。   A  サイトを巡回するブック自体をKWごとにわけて作っていく   B  サイトを巡回するブックは1つで、DBに格納した後に、KWごとにDBをわけていく もし、WindFaller さまがエクセルだけで作っていくとするならば、 AとBのどちらの方法と使われますでしょうか?   ---------- 長文になり誠に恐縮です。 どうぞよろしくお願いします。  PS1 grep検索はじめて知りました。。。これも重宝させていただきますw PS2 >私は、同じようには、続けられないなと思いました。 小規模企業の悩みもある意味同じだと思っています。 それぞれレベルは違うにしろ、PCを使いこなすようになるには それなりの時間とコストが必要になります。 外に出すにしてもコストが大きくなります。 この辺りの解決策を探っているところです^^

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.6

何度も失礼します。 >事業はネット通販系です。 との事なので Webで顧客からの注文がメールで届く仕組みは出来ていませんか OutLookの受信メールをエクセルに落とすVBAを紹介しておきます。 1行目に  A    B     C   D  F フォルダ 受信日時 送信者 件名 本文 と準備 Sub ボタン1_Click() Dim olFolder, olSecFolder, olItem, olIndex As Long Dim objOL, myNaSp Set objOL = CreateObject("Outlook.Application") Set myNaSp = objOL.GetNamespace("MAPI") Set myFolder = myNaSp.GetDefaultFolder(6) For olIndex = 1 To myFolder.Items.Count Set myItem = myFolder.Items(olIndex) GYOU = Range("A" & Rows.Count).End(xlUp).Row + 1 Range("A" & GYOU) = myFolder Range("B" & GYOU) = myItem.ReceivedTime Range("C" & GYOU) = myItem.SenderName Range("D" & GYOU) = myItem.Subject Range("E" & GYOU) = myItem.Body Next End Sub を実行してみてください。受信メールの一覧がエクセルに取り込めます。 本文に品名や住所などあれば Split関数で分けると良いでしょう。 ついでに、発送があると思いますので ヤマト運輸 ビジネスメンバーズ で検索してみてください。 エクセルの住所データを取り込んで送り状を発送したり、配達完了などが確認できます。 発送が完了したら、自動で送り状番号などをメールで送信する仕組みも出来ると思います。 参考にならないアイディアであったり、既にご存知でしたらスルーしてください。

ken123
質問者

お礼

hallo-2007さま 何かすいませんです^^ ありがたく使わせていただきます。 こうやってスラって出るレベルまで 早くいきたいですね!w こうやってアドバイスいただける環境だけでもありがたいです。 WindFallerさまにもご教授いただきましたが 公開していただいているコードなどを うまく活用して、そして蓄えながら 基礎力UPしていくようがんばります。 重ね重ね、本当にありとうございます!

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

No1です。 まだ空いていたのでもう一言 ・ひょっとしてVBAの開発を一人でやっていませんか? 開発の作業は必ず、複数でチームで行ってください。 先輩が居ればベストですが、居なければ助手を探します。 自分でコードを書くより、助手を育てる方が時間がかかります。 もし貴方が移動になったり、退職したり、不慮の事故にあったりした時に 必要になります。 そうすると、必然とガリガリのコードが書けなくなります。 ・プログラムが複雑になっているのはデータベースがしっかりしていない と云うことはないですか。 データベースをきちんと準備されている場合とそうでない場合で プログラムの量は全く違ってきます。 あるベンダー会社に依頼した場合の見積もりですが、データベースの構築費が 50%で、システム開発費が50%でした、出来上がったデータべースを拝見して 感動した覚えがあります。 会社の中には、取引先などの住所系データ、商品系のデータ等があります。 これらは共通仕様になっていますか。 実例ですが、大したシステムではありませんが、 発送の為の取引先の住所データにしたエクセルシートを見ました。  A    B   C 郵便番号 住所 電話番号 会社名 部署名 担当氏名 と云った具合でした。 速攻で指導したのが  A   B    C コード 郵便番号 住所1 住所2 ・・・ に変更させました。 住所1は郵便番号情報と同じ内容です。 理由は、大手運送業者のデータフィールド、会社のデータフィールドと同じにしたのです。 他に見つけた事例では、社内の担当者と組織名などもあります。 それぞれの部署で新たに作っているのを見たときに止めさせました。 会社の中で、担当部署に相談すれば全社分でも一瞬で作成できるのです。 それに担当氏名などの編集の手を加えさせます。 県名の一覧データをお持ちでないですかと相談を受けました。もちろん手元にもありますが ネット上で検索する方法を教えておきました。 基本的なデータベースを共通にするようにしておけば、プログラムの共通化が出来ます。 プログラムの共通化は、後輩の指導上ではどれだけ便利なツールになるかも考えてみてください。 ・作成したプログラムを機能別に別途管理していますか。 私自身、プログラム開発が専門ではありません(別に自分の業務を持っています) しかし、過去に作成したVBAを機能別にサーバに保存しています。 入力系 インポート系 エクスポート系 印刷系 検索、抽出系 Web操作、メールなどに分けています。 これがあって、基本的なデータが統一されていれば、新しくシステムを依頼されても 簡単なメンテナンスで済みます。 これでVBAが使える人も増やすことが出来ました。 エクセルの場合ですが、案件が発生した場合、基本的なシート構成を準備して 必要とする機能を紹介し、ボタンの配置 Or ユーザーフォームの必要性などアドバイスをして 担当者に返します。もちろん出来上がったコードを手直ししたりはしますが・・ 状況によっては、誰々の部署に似たようなファイルがあるので相談してみては等と返事します。 部署レベルの開発はOfficeレベルまでと注意します。 オラクルやVB、専用ソフトで開発されたシステムにもさんざんな目に合いました。 Xp終了やOfficeのバージョンンの変更などです。 Win7では作動しなかった、エクセルで言えばXlsxは読み込みできないなど・・ 基幹システムに絡む、社外との連携などの場合は、専門部門に任せるのが良いと思います。

ken123
質問者

お礼

hallo-2007 さま お世話になります。 再度のご回答ありがとうございます。 ・ひょっとしてVBAの開発を一人でやっていませんか? まさしく悩みはここなのです。 共有化はご指摘いただいた通りなのですが、 問題はその手前で、まず、私自信がそれほどのレベルでもないので 共有化する作業の方法をまだ理解できていないのですね。  エキスパートな人 → 私 みたいな感じが理想なのですが、 数人の小規模な事業なので、そういう訳にもいかないのです。 事業はネット通販系です。 ですので、ネットとデーター管理でできることや 以前から、やりたいことは山ほどあったのですが 先にも書かせてもらったのですが、 エクセルでのネット環境が数段進歩してきたので 本腰を入れようとしているところです。 ・・・が技術が伴っていないという状況です。 うまく外注さん(助手)などを活用させてもらって 共有化の方法を学んでいこうとしているところです。 というわけで、私がエキスパートな人にならないといけない立場なのですが ちょっと時間がかかりそうですね。 ・プログラムが複雑になっているのはデータベースがしっかりしていない これもしかりなのですが、 まだまだ基本的なところの未熟さの方が大きいです。 IF文、for文、配列・・・とうまく使い分けできるレベルにならないといけないです。 今回質問させていただいたのは このあたりのところで、 IF文でこれこれするなら、For文でこういう風にまとめられるよ For文でこうするなら、配列もっとすっきりできるよ~ というところのレベルアップが、自分で調べながらなので どうしても時間がかかってしまいます。 エキスパートな人が傍にいて、 ここはこうできるよ!って教えてもらえると ずいぶん違ってくるとは思うのですが・・・ コードの修正みたいなサービスもあっても良いような気がしますが どうなんでしょ? ・作成したプログラムを機能別に別途管理していますか。 そして、今、みなさまにこの質問で教えてもらっているのが 作ったコードの再利用ですね。 本当にありがとうございます。 少しずつですが、なんとなくイメージとして できないこともないという気がしてきたところです。 個々によって管理方法は異なるからだとは思いますが、 それにしても情報量が少ないような気がします。 そもそものファイル管理の概念かとも思いますが、 もう少し取っ付きやすい仕組みが欲しいところです。 これだけやってきて、コード・スニペットも気づかなかったって ちょっとかなり寂しかったですwww 独学でもできる中級者~上級者あたり向けの 書籍や情報がVBAでは、ちょっと少ないような気がしています。 >オラクルやVB、専用ソフトで開発されたシステムにもさんざんな目に合いました。 こことの話とは別件で、私もすこし経験があります。 そんなこともあって、結局自分でしないといけないというのが根にあります。 >Xp終了やOfficeのバージョンンの変更 Win10・・・どうなるのでしょうねwww  orz(爆 一時期XPレベルで世間から取り残されてしまって 最近やっと追いついてきたかな?感があるので 今度はついて行きたいと思います(爆 本当にどうもありがとうございます。 今後ともよろしくお願いします

回答No.4

こんばんは。 #2の回答者です。 お話、よく分かりました。もう少し、情報を書いておきます。 1980年代前半のプログラミングなどを知っていると、「構造化」は驚きます。 Excelの前身、Multiplanのマクロ言語は、本当にベーシックと同じような書き方で、本格的な「構造化」は出来ませんでした。それでも、1980年代は、思想界では、「構造」いや「脱構造」とか、喧々囂々で、その内容自体はさっぱり理解しませんでしたが、プログラミング側でも、その波はやがてやってきました。 Excel Ver.4 のマクロ関数は、いわゆる関数型言語といって、また全然違う種類のものです。 ただ、VBAで、Transpose やIndexを使う技術は、この頃のものです。 Excel Ver.5 または、95から、ダイヤログシートでのVBAのスタイルが始まりました。 >複数のループを作っているとだんだん混乱してくるところが今回の質問のキッカケでした^^) VBAのプロのの人などのコードを鑑賞したほうがよいです。本当に偉い人たちのコードは、公開されています。しかし、Office Tanakaの田中亨さんや、『Excelでお仕事』の井上さんのコード全体の雰囲気は、違うようです。 プロでは、Mougの井川はるきさんが挙げられます。おなじプロジェクトAの大村あつしさんを始め、とてもユニークな人物です。井川さんのすごいのは、有名になっても、Mougの掲示板を続けていたからです。井川さんを知らない人からは、無視されたりしても、ひたむきに続けているところが、とても気に入りました。 しかし、彼は、VBAの業界のてっぺんの技術までに到達するのに、確か3年程度ですから、あまりにも凄すぎます。世の中には、時々、そういう人もいるものです。彼は、歯科大学を中退して、この道に入りました。10年掛かっても、彼には追いつきません。ちなみに、私は、ひと通り使えるようになるまで、3年も掛かってしまいました。 市井(しせい)の達人というか、別の掲示板で、目立った人に、私は、ネット・ストーカーではありませんが、ある人のコードの書き方を1年間ぐらい学びました。その人が公開しているブックのマクロも、プロテクトがかかっていないので、それも勉強しました。ここのサイトは、専門サイトではありませんから、らしさを求めるぐらいだけになってしまいます。 達人と称される日経BP21の芳坂和行さんのホームページでは、プロテクトされていないブックも多数あったはずですから、それをみるのもよいと思います。コードとしては、今は古いかもしれません。中には、Win32 APIオンパレードのものも多いです。 http://hp.vector.co.jp/authors/VA016119/ オープンソースとして公開されているものの中では、チームで作ったものとしては『郵便番号変換ウィザード』があります。これは、VBAとはちょっと違う雰囲気を持っています。これは、構造化について学べます。 https://excelzipcode7japan.codeplex.com/ それと、コーディングルールという話もあるのですが、それは、ベテランの人のプログラミングを見れば、だいたいは分かるはずですから、割愛します。時には、古いスタイルのものもあります。 他にも、VBAへのCOMアドインのユーティリティがあります。ショートカットでコードが貼り付けられるのは、ユーティリティのおかげです。日本ではユーティリティの数は少ないのですが、海外では、値段の高いものから、フリーのものまで、いろんなものがあります。マルウェアに気をつけながら、試してみるのもよいかと思います。 >配列とかクラス化など技術的なことを学んでいけばもっと楽に作っていけたりもすると思いますが、 これらは、いわゆる「上級文法」と言いますが、なんとか、これはクリアしておいてください。使うかどうかは別です。 自分のことを少し書いておきます。 私は、分散型のシステムを作って、それを10年近く使っています。もし、分散型でなかったら、大変なことになってしまいます。全体では、数万行になっているはずですが、Public 定数を始め、Win32 APIなどの、システムの初期の入口から、その中身の処理によって、小分けにしてあります。一般的に、ワン・プロシージャは、100行以内にしなさい、というきまりがあります。実は、ここのサイトの一覧表示と、そのログの管理と発言管理ですが、サイトが改編は、半年に1度ぐらいあっても、一部のサブ・プロシージャを直すだけで済みます。ワークシートには、タイトルだけで、その中身は、テキストファイルになります。他の言語ではマネできないほど簡単に修正できます。また、最後は、保存する時のマクロで終わるようになっています。 なお、小さな規模で、よく使うものは、個人用マクロブックに入れます。 それを、メニューに登録して、タブには、UserToolsとしています。 また、ユーザー定義関数は、アドインにしています。そうすれば、グローバル関数になるからです。 テキストファイルも、マクロ編、ワークシート編、オートメーション編など、それぞれに分けて、ヘルプは、Excel のVer.5~全部そろえています。あまり使うことはありませんが、手に入るなら、古いヘルプを入れておくとよいです。邪魔にはなりません。昔、私のことを目の敵にして、Ver.4マクロ関数などすぐに廃止されると言っていましたが、あれから、10数年、今の時代では完全に復帰してしまいました。だから、Ver.4マクロ関数(Ver.5用)のヘルプも入れています。 >VisualStudioなどはそのような発想で進歩していると聞いています。 それは、無償のVSも出ていたので、興味があれば、手を出してもよいのですが、シモニーの旧VBとは違いますから、なかなか切り替えができないかもしれません。 ながながすみません。VBAに対する情熱は当分なくさないでください。私としては、そういう人に出会うのはうれしいものです。ただ、私はもうVBA自体は引退しています。

ken123
質問者

お礼

WindFallerさま 再度のお返事ありがとうございます! 本当にどの書籍よりも身になるご回答です。 リファレンスやテクニックの書籍は山ほどありますが、 一通りやった後、どうするんだ?っていう本がなかなか見当たらないですし、 ご紹介いただいたようなサイトを含め その都度その都度の情報は拾えても、 全体像がわかる情報ってなかなか見つけられなくて 本当にありがたかったです。 個々にアドバイスいただいた件につきましては すごい情報ですので、私のレベルで、この場ですぐに返事することはできなく恐縮なのですが これから日々参考にしながら精進します。 >VBAに対する情熱は当分なくさないでください。 #3のHigh_Scoreさんにもお返事いただきましたが 困っている人やもしくは気づけない人って多いと思うのですよ。 今、エクセルは2013まできていますが、 情報としては少ないですが、いわゆる「開発」のところで 大きな進歩をしていると思っています。 例えば、WEBSERVICE/ENCODEUR/FILTERXMLなどのWeb関数です。 (個人的にはMSさん遅いんだよ、って思っているのですがwww) これまでエクセルといえば、社内業務の管理ソフトでしたが この辺りが進んでくると、これまで庶民(?)ではなかなか手が出なかった ネットへの敷居がずいぶん下がると思いますし、 実際、今、私自身が体験しているところです。 プログラマーへ転身というわけにはいかないのですが、 社内本職でなんとかなるか?というところで、気持ちに火が付き始めたところです。 少し残念なところは、 >VSへは、なかなか切り替えができないかもしれません。 というところなのですが、その通りのようで、 ここらあたりが将来的に新しい壁になるかもしれませんが、 それは他の技術の進歩としてとらえるしかないと思っています。 少し話が逸れてしまいましたが いずれにしても基本が大事で、ご回答いただいた個々の内容が とても大事だと感じています。 ご指導いただいたことを頭に置いて、頑張っていきます。 >私としては、そういう人に出会うのはうれしいものです。 こちらこそ、この度は本当にありがとうございました!!!

回答No.3

私も同じ問題を抱えてます。 「毎回毎回同じ処理するなら、VBAにすれば数秒で終わる!!」 ところが、VBA作成には時間がかかる 「構造化プログラミングですよ。ひとまとまりのマクロを保存しておいて効率化しましょう」 保存はしてるけど、変更したらそれを使うマクロ全部変更する必要あって、実際は管理が難しい 「個人用マクロブックがありますよ」 配布できない。かっこ悪い(笑) 本職のプログラマならともかく、業務の片手間に必要なマクロだけ作る片手間プログラマには荷が重いですね。 私が最初に目指してたのは利己的で「自分だけの」業務効率化だったので、VBAは便利な処理機能に過ぎず使い捨てのようなマクロが多かったです。使い捨てでもやっぱり使用頻度の多い使い方が出て来るので、「ひな型」を作ってたりしました。 しかし後に残って使い易いのは、やっぱりひとまとまりの「ソフト」として完成されたものです。しょうもない小道具のようなソフトでも、まとまってると使いやすいです。Macro1(a as Long,b as string)としてひとまとまりを保存するよりも、完成された単位として残す方向に変わってきてます。業務上必要なサブルーチンが揃ってきたというのもありますけど。

ken123
質問者

お礼

High_Score さまお返事ありがとうございます というか、思いの代弁をしていただきありがとうございますw 私も本職ではないのですが、今さらですがこれだけPCとネットに管理された社会になってきて 社内での本職にならざるを得ないのですが、 >ところが、VBA作成には時間がかかる と、本来の業務から離れしまって本末転倒と言わざるを得ないことに頭を抱えています。 外部に出すことも時々はしたりやってみたりしているのですが、 小規模な仕事ですので、金銭面でも時間面でも合わないのですね。 結局、自分のスキルが上がれば問題は解決するはず・・・というところになるのですがwww ちょうど、High_Scoreさんが >使い捨てでもやっぱり使用頻度の多い使い方が出て来るので、「ひな型」を作ってたりしました。 ってところくらいをやっていると思うのですが、 ご指摘いただいた点に気を付けながらやっていきたいと思います。 今後ともよろしくお願いします

回答No.2

こんにちは。 ご質問が少し抽象的ですが、 >定番のモジュールをエクスポートしておいて >新しく作る時にインストールするとかもあるのでしょうけど >あまり効率的でないなぁと感じています。 そうなんですか?効率的ではないでしょうか。 私などは、 Ctrl + Shift + D で、Option Explicit やFind メソッドなど、定番のコードは、ショートカットでVBEペインに出せるようにしています。 Microsoft 側には、作ったコードを共有できるように、"Visual SourceSafe (VSS)"もありましたが、くだらないコード(junk code)も自動収録してしまうのでやめてしまいました。まして、私自身は、個人で書くのが常ですから、自分のテキストエディタで収録するようにして、いわゆる"スニペット"として、何年も前でも、内容的に許容範囲のものなら、再利用しています。ソースコントロールは、プロのプログラマとしては宿命かもしれません。 リンク先の >・時間がかかる >・大量の「コピー&貼り付け」は人間なのでミスが発生する可能性がある。 >・この仕様が変更になった場合、修正個所が多すぎる は、本来、それは構造化の話だと思います。システムを作った時に初めて有用であって、Excel VBAで、それほどのものを作ることは滅多にありません。もちろん、そういう場合には、いくつかの注意点があります。以前、そのような話も書いたことがありますが、あまりVBA向きではありません。 > 作業を効率化していけるか? > 入力する量を減らしていけるか?  私のコードなどは、上記の趣旨からは、批判されるべきものです。エラー処理は、プログラマとしての最低限度のマナーだと思います。私は、ムッとして、どこかのレスで、そういう要求なら、エラー処理をなくしてしまえば簡単になります、と書きました。それから、最近目立つのは「入れ子」にして、まるで、言語のLispのように書くわけです。要するに、変数を置くことを嫌い、一行内で収めようとするのです。メソッドやプロパティには、基本的に変数を置くのが常識なのに、直接、パラメータの中で計算式を入れたりする、しかし、直接書けば、致命的なエラーやランタイムエラーにまみえることも多かろうと思います。どこでエラーが発生しているのかさえ分からないこともあるかもしれません。 ここ数年で、急に、VBAでは、そういう書き方が多くなってきたようです。 そのような、無理な方法で、入力量を減らして、効率化がエラーを増やすなら、あまり意味がないように思っています。よく質問の最後に出てくる「スマートな方法」というのも、私はあまり応援する気になれません。 本来、プログラミングで、効率化を考えるよりも、旧VB系では、古臭いのですが、構造化の発想が必要だと思うのです。構造化というのは、簡単に言うと、「プログラム全体を,いくつかの独立した小部分に分割し,それらを一定の構造で組み合わせる」ことです。もう少し具体的に言うと、それぞれのプロシージャには、それぞれの目的があるわけで、その目的に似ているものをモジュールに分けて、つないで行くという作業があります。 コード全体を分かりやすく分散型にし、分類するわけです。それが第一歩なのです。よく構造化というと、Goto をなくせと言う人がいますが、それを主にしてしまうと、無理に近いコードも生まれてしまいます。こういう考え方は、今どきでは古臭く、オブジェクト指向の時代だと言うでしょうが、VBAや旧VB系には、本格的にはできません。また、リンク先の「VB6初級講座」のように、旧VB系でもクラス・モジュールを使った方法があるのではないかということでしょうけれども、好きならそれを使えばよいのですが、分かる人にしか分からないコードになって、その割に思ったほど効果がないと感ずることもあります。VBAの基本はこうだといっても、プライベートの世界ですから、エラーがなければ、何をしてもよいという人に、何かを言っても無駄なような気がしています。変数の書き方すら、昨今では曖昧になっています。

ken123
質問者

お礼

WindFaller さま 早速のご回答ありがとうございます。 まず、「コード・スニペット」を 知りませんでした http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_07/vb2005_07_01.html 上記のサイトで述べられていることその通りが今の気持ちで とりあえずは身に付けけていきたいと思います。 WindFallerさんのように、本当に大量になりすぎるのは だいぶ先だと思いますので・・・w それと、「構造化の発想」ですね。 まだまだ初心者なので的を外しているかもしれませんが、 VisualStudioなどはそのような発想で進歩していると聞いています。 >コード全体を分かりやすく分散型にし、分類するわけです。それが第一歩なのです まずは、ここだと最近感じているところです。 (ただ、複数のループを作っているとだんだん混乱してくるところが今回の質問のキッカケでした^^) --------- 構造化とオブジェクト思考の違いが 少しごっちゃになってしまっているレベルですが、 ご教示いただきましたことを意識して 学んで行きたいと思います。 変数については、 最初はやはり面倒でしたが、 最近は、便利なものだなと思い始めました。 作業しているときは確かに面倒なのですが、 やはり見直しとか再利用する時に便利だと感じています。 ご丁寧なご回答本当にありがとうございました。 今後とも頑張っていきたいと思いますので どうぞよろしくお願いします。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>今後、どのようなことに心がければ、 >  作業を効率化していけるか? >  入力する量を減らしていけるか?  ヒントは情報の共有化と云う言葉にあります。 パソコンを活用していると云う方の流れです。 1、手書きから印刷へ   手書きだった作業をパソコンで行う。ファイルを保存することで   保管する書類も減らせる。 2、次ステップが、作業のデータ化   ファイルごとにデータを管理していると探すのも集計するのも大変   アクセスなどのデータベース化に皆が走りましたが、今ではエクセルも   データベースの機能を十分に持つようになりました。   この事でそれぞれの部署の担当者にデータベースの知識が普及しました。 3、データの統一化   パソコンの作業の中で最も手間がかかるのが入力の作業です。   集計や検察、抽出と云った作業はVBAでいくらでも改善できますが   入力作業は、手作業が発生します。そこで考えるのが   前工程から共通で使用できるデータ形式で情報をもらうと発想です。   もちろん、後工程への配慮も同様です。 4、最後に Web化です。   それぞれの職場でデータを保持するのではなく、サーバーにて管理して   だれでもが入力、検索などが出来る様にします。   この段階になると担当者ごとのVBAレベルではなくなります。   会社をまとめるスタッフに任せることになります。 http://vbae.odyssey-com.co.jp/column/ にある http://vbae.odyssey-com.co.jp/column/no11_1.html このコラムはちょっと面白いですよ。

ken123
質問者

お礼

hallo-2007 さま 早速のご回答ありがとうございます。 コラム興味深いですね! システム化できることはシステム化したいと誰もが思いますが、 どんな仕事や作業にも強弱はありますからね。 お返事いただいた中では >後工程への配慮も同様です。 がとても心に刺さりますwww まだ、少しその場のコードを書くことでいっぱいいっぱいのところがあるのですが それ故に、後工程や再利用のことを考えます。 まだまだ配列とかクラス化など技術的なことを学んでいけば もっと楽に作っていけたりもすると思いますが、 俗に言う、ガリガリと書いて・・・って感じです。 レベルを上げていきたいと思いますので 今後ともよろしくお願いします

関連するQ&A

  • コピーペーストの簡略化作業

    現在、仕事でAccessやFileMakerのデータベースから、WEBのデータベースに手作業で移行していまして、大量のコピペ作業が発生しています。 ※インポートエクスポートだと危険なので、手作業で移行をかけています ものすごい量のコピペ作業があり、アプリケーションをいったりきたりでかなり疲れてきました。コピペ作業の簡略化を図りたいと考えていますが、テキスト選択するだけで自動コピー、特定ショートカットで履歴をペーストというようなソフトはありませんでしょうか。 QTCLIPやCLISMなどを試してみたのですが、単体ではなかなか理想の通りにいかず・・・。 アドバイスいただければと思います。

  • 「DO LOOP」についての質問です。VBA初心者です。

    「DO LOOP」についての質問です。VBA初心者です。 『入力画面』というシートに日付を入力してマクロ実行すると 『入力画面』の右隣りにその日付名のシートが新しく作られるように設定しています。 入力する日は不定期で連続した日付ではありません。 それでお聞きしたいのは、新しく作成するシートから右隣に一つずつ検索していって、 一致するものがあればデータ取得でループ終了。 もしくは全てのシートを検索しても一致するものがなければゼロ表示でループ終了。 という作業をしたいんですが、構文がどのように作ればいいのかがわかりません。 自分でやってみたいのですが、締め切りも近いのでどなたか教えてください。  

  • 【エクセルでの作業】効率の良い方法を教えてください!

    会社でエクセルを使っての仕事を頼まれています。 地道にやると膨大な時間が掛かってしまうので、効率の良い方法を教えてください! 私は派遣社員として働いているのですが、社員の方々はとても忙しそうで聞ける雰囲気ではありません。 また、この仕事を頼んだ方に聞いてみたのですが、分からないそうです。。 大変困っています>< エクセルがお得意な方!是非お力を貸して下さい!! できれば詳しい説明をいただけるととても助かりますが、 エクセルの資格を取得している為、(一応)機能は理解しているつもりです。。。。 なので教えていただけるなら簡単な説明でも構いません>< 下記が作業内容になります。 ちなみに会社で使用しているエクセルは2000です。 ●作業内容● 7桁のランダムな数字が、セルA1からセルA400まで入っています。 セルA1からセルA400まで中で、同じ数字が入力されているセルがあり、そのセルを調べる作業を任されています。 エクセルの機能を使って、効率の良い方法はありませんでしょうか? 【図】エクセルシート↓ ------------------------  |   A   |  B ------------------------ 1|60000004| ------------------------ 2|64360898| ------------------------ 3|64361091| ------------------------ 4|64361093| ------------------------ 5|60000004| ------------------------ ※A列にランダムな数字が入っている中、A1とA5のように同じ数字が入っているセルを探す作業です。

  • Excelが重く作業ができません

    Excel2010を使用しています。 文字の入力・コピーをしようとするとフリーズしてしまいます。 どうやら大量の空白のオブジェクトがあるようです。 空白のオブジェクトを削除しようとすると選択すらできずフリーズしてしまいます。 何かいい方法はありませんか? これでは作業ができないので。 よろしくお願いします。

  • 作業の効率化・自動化・半自動化 エクセルに記入

    サイトの情報を、エクセルに手入力して、まとめているのですが、これを、自動化することってできますでしょうか? URL・画像・文章1・文章2 を、それぞれ コピー → エクセルに貼り付け。 という、作業をしているのですが、プログラム、または、サイト?エクセルの機能?で、自動化、ないし、半自動化(ドラッグするだけ、クリックするだけ)で、できないものでしょうか? いま手動でやっている、作業の流れは、 まず、サイト内の、欲しい情報を選んで、そのページに飛ぶ そして、 1URLをドラッグ & コピー 2エクセル(A1)に貼り付け 3文章の一つ目を、ドラッグ & コピー 4エクセル(B1)に貼り付け 5文章の二つ目を、ドラッグ & コピー 6エクセル(C1)に貼り付け 7右クリックで画像を保存 8エクセル(D1)に貼り付け という、作業をひたすらに、繰り返して、いますが、効率化するには、どうしたらよろしいでしょうか? 詳しい方いましたら、回答の方よろしくお願い致します。

  • Outlook2007個人フォルダの効率的な使い方

    環境 Windows Vista Enterprise SP2 Outlook2007 SP2 MSO 上記環境を使用しております。 一日に数百通メールがきます。 メールが容量いっぱいになると 1.ローカルにpstファイルでエクスポート⇒個人用フォルダにインポートする という作業を繰り返しております。 インポート・エクスポートに非常に時間がかかります。 もっと効率的な方法はないでしょうか? また、単純に使用しているメールフォルダ-内のメールを(エクスポートなどせず) コピーして個人用フォルダにペーストして移動するのと、上記1の方法では 何か違いがあるのでしょうか? 詳しい方いらっしゃいましたらぜひご教示いただきたく存じます。

  • パソコンの何て言うか分かりません。クリックすると選択した項目をフォーンに反映させるには。

    こんばんは。 入力フォームと言うか管理しているサイトのフォームに絵文字を簡単に入力する方法を探しています。 絵文字をクリックするとクリックをした絵文字がフォームに入力されると言った具合です。 現在は「コピーしました!」の様にコピーペーストしてます。 コピペはちょっとめんどうです。 作業の効率を良くするためにしたいです。

  • VBAについて

    すいません、VBA初心者です。 以下の事をやる時にはどうしたらいいか教えて頂きたく思っています。 現在、社内でカードリーダーを使った荷物の受け取り管理を行えるVBAを構築しようと奮闘しています。 仕組みは簡単で、受け取り番号を指定入力して、受取人が自分のIDをカードリーダーにかざし、受取人情報取得し、確定ボタンを押すと授受リストへコピペされるというものです。 現在、VBAで入力フォームを作成しており、受け取り番号入力欄を3つあり、デフォルト値(1233-00)が設定されています。 1) 1233-00 (Text Box1) 2) 1233-00 (Text Box2) 3) 1233-00 (Text Box3) ここで 1〜3の入力された受け取り番号が授受リストに存在しているかどうかの検索をかけて検証しながら作業完了させたいのですが、、、 1にしか受け取り番号が入力されていない場合(他はデフォルト値のままを意味)は1の数字のみを授受リストに検索をかけてコピペ。 1と2のみにしか受け取り番号が入力されていない場合は1と2の数字のみを授受リストに検索をかけてコピペ。 1〜3すべてに受け取り番号が入力されている場合はすべてを授受リストに検索をかけてコピペ。 これを実現するにはどのようなコードを組んだらいいのでしょうか? 教えて下さい

  • 効率的な大量の転記方法について (Mac)

    Mac 使用者です。 大量の教科書 (100冊位) から、大量の練習問題を文法ごとにまとめて入力したいと思っています。 (おそらく、まずは全部まとめて入力して、後で区分する方がいいかとは思いますが。) 最初は手入力でしていましたが、多すぎて疲れてしまい、 音声入力は?と思い、ソフトを見ていますが、どれを選んでいいのかわかりません。 ひょっとするとスキャンなどで、なぞるだけでのほうがいいのか等、少し混乱しています。 どのような方法が効率的だと思われますか。 初級の日本語の練習問題ですので、決して複雑な文章ではありません。 入力したい量は、めまいがするほどあります。 どうかアドバイスを宜しくお願いします。

  • 「DO LOOP」についての質問です。VBA初心者です。

    「DO LOOP」についての質問です。VBA初心者です。 昨日同じ質問をさせていただきましたが、私の質問がきちんと書かれていなかったせいで 皆様にご迷惑をおかけしてしまいましたm(_ _;)m きちんと伝わるように訂正して再度質問させていただいてます。 『入力画面』というシートに日付を入力してマクロ実行すると 『入力画面』の右隣りにその日付名のシートが新しく作られるように設定しています。 入力する日は不定期で連続した日付ではありません。 それでお聞きしたいのは、新しく作成するシートのB列に複数の名前を入力した後、 その名前をキーに右隣のシートから一つずつ検索していって、一致するものがあれば 同じ行のN列とP列の値を新しいシートのK列とM列に取得しループ終了。 もしくは全てのシートを検索しても一致するものがなければゼロ表示でループ終了。 という作業をしたいんですが、構文がどのように作ればいいのかがわかりません。 お手数ですが、どうかご教授願います。

専門家に質問してみよう