システム開発ブログ/ 流通システム部 Yahoo!ブックマークに登録 Google ブックマーク はてなブックマーク Livedoorクリップ シェア

システム開発ブログ

Twitterでilovex_officialをフォローしてください

最近の記事

カテゴリー

部署

月別アーカイブ

以前の部署別ブログ

自動記録されたExcelVBAにひと工夫

ilovex
ilovex (2009年9月 7日 10:00)
流通システム部 / VBA


VBAマクロの開発を行う際、「マクロの記録」機能で自動記録されたコードを参考にする場合があると思います。
マクロ記録機能は確かに便利ですが、必ずしも効率的なコードを生成してくれるとは限りません。
自動記録されたコードの中でよく見かけるのは、セルをクリックしたときのSelectメソッドやActiveなんとか、
例えば次のようなコードです。

   Range("A1").Select
   Selection.Copy
   Range("B1").Select
   ActiveSheet.Paste

セルを選択(Select)し、それによってアクティブになったシートに対してコピーした値を貼り付る。自動記録では手作業をこのように解釈し、コードが生成されます。
このマクロは確かに間違いではありませんが、処理速度やメンテナンスコストの面でベストではありません。
これをSelectしない、Activeなんとかは使用しない方式に書き換えましょう。

第一段階は次のようになります。

   Worksheets("Sheet1").Range("A1").Copy _
        Destination:=Worksheets("Sheet1").Range("B1")

Copyメソッドの引数「Destination」にはコピー先のセル範囲を指定します。
この引数を省略すると、クリップボードにコピーされてしまうので、ちょっとカッコ悪いですよね。
ここはスマートにコピー先を指定してダイレクトに貼り付けましょう。
セルのみでなく、Chartオブジェクトなどさまざまなオブジェクトで有効です。

さらに、この処理では「Sheet1」に対して処理を行っている為、シートへの参照をオブジェクト変数に代入して使用するのが一般的です。

   Dim wstOutput As Worksheet
   Set wstOutput = ThisWorkbook.Worksheets("Sheet1")
   With wstOutput
       .Range("A1").Copy _
        Destination:=.Range("B1")
   End With

マクロの自動記録により生成されたコードはそのまま使用せず、必ず手を加える事をお忘れなきよう。

「システム開発ブログ」へのコメントやご意見等ありましたら、 ファンページまでお願いします。  Facebook のファンページ

お問い合せ・情報はこちらの電話番号におかけください:03-3232-2525 お問合せ・資料請求はこちらをクリックしてください
ページのトップ
システム開発・一括受託開発。見積依頼受付中

システム開発専用サイト

システム開発の流れ・手順、実績など。アイロベックスのシステム開発を紹介。

VB .NETを主言語としたWebアプリケーションの開発

要件分析から保守まで、お客様の現場での問題解決だけでなく、IT経営の援護者としてトータルソリューションサービスを提供しています。

MovableType を使ったウェブサイト構築

魅力あるウェブサイトデザイン、構成はもとよりMovableTypeを使用したウェブサイトの作成、JAVA、CGIによる注文フォームの作成等、ビジネスを強力にサポートします。

フォルダーアクセス権限確認ツール『AD-Folder』

Windowsフォルダーアクセス権限確認ツール

フォルダーアクセス権限を一目で確認。使用版を無償でご利用いただけます。

スクール運営を応援する講座情報管理システム『CMS+AD for School』

Webとリアルをつなぐコンテンツマネージメントシステム

Webサイト・モバイルサイト・チラシ(PDF)・カタログ(InDesign)を、簡単かつ正確に作成できます。

「システム開発ブログ」の更新情報をTwitterで。

Twitter公式アカウントに認定されています

「システム開発ブログ」の更新情報をTwitterで。ぜひ、フォローをお願いします。