2018.08.17みなさん、こんにちは!フジタニ(@libartweb)です。CSVの取り込みをエクセルVBAで行う場合は、ループを使って1行ずつ読み込んでいくのが一般的な方法です。今回は、そんなCSV取り込みを、ループを一切使わずに、一発で取り込むもう一つの方法を紹介します。:エクセルVBAのQueryTableで高速にCSVを取り込む通常のCSV取り込みの流れ以下の記事でも紹介していますが、通常はCSVを、エクセルVBAでオープンした後、1行ずつセルに書き出していくのが一般的です。100行や200行など小さなCSVだと処理速度の差は全く体感できないので、ループを使う方法で全く問題ありません。大きなファイルを頻繁に扱う方は今回紹介する方法を検討してみてください!エクセルVBAでCSVデータをカンマで区切ってワークシートに取り込む方法エクセルVBAでCSVを取り込む方法です。今回は、Splitという命令と配列を使ってCSVのレコードをカンマで区切ってワークシートに転記をしていく方法について解説をしていきます。tonari-it.com2015.12.16過去の記事で紹介したソースコードは下記の通りです。ループの中にループがあるので、CSVが大きいとどうしても処理速度で不利になってしまう場合があります。SubQueryTableオブジェクトによるCSV取り込みループを使ったCSV取り込みが一般的であり、実際に使われている方もたくさんいらっしゃると思います。今回はあまり知られていない、QueryTableオブジェクトを使いますので、まずはその概要について解説します。最初にサンプルコードを記載します。Sub書き方がループを使用したCSV取り込みの方法とは大きく異なっており???となっていることでしょう。QueryTableオブジェクトとはMicrosoftの公式ページでは下記の通り解説されています。(Excel)docs.microsoft.comよくわからないですね・・・カンタンに解説すると、データタブ→外部データの取り込みの機能を操作するオブジェクトです。QueryTableオブジェクトでワークシート上に仮想のテーブルを作ってそこにCSVを取り込み、それをワークシート上に展開することができます。文字コードはもちろん、区切り文字からダブルクォーテーションに至るまでプロパティ指定をすることが可能です。今回はCSVを対象に紹介しますが、通常のテキストファイルでも取り込み可能です。各プロパティの解説は次回記事で実施予定です。この方法がどのくらい速いか?実際に上で紹介したサンプルコードを実行し、処理時間を計測してみました。CSVの行数は54000行です。実に、魅力的な高速化ですね。10万行だと1分以上の差が開くことになります。この方法は、CSVのサイズが大きくなればなるほど恩恵を受けられます。そのCSVが1個だけでなく、複数あったら、更に差が開きます。通常のCSV取り込みは、ループを使って1行ずつ読み込んでいきます。それも1行ずつ物理的にWorksheet上に展開しています。対してQueryTableオブジェクトは、いったん「クエリテーブル」上にCSVを展開。1行ずつの取り込みではなく、一気に全行をまとめて取り込むイメージ。これは例えるとスーパーで買い物をする際に、商品を手で1つずつレジに持って行くのが通常のCSV取り込み、カゴにたくさん入れて持っていくのがQueryTableです。たくさんの商品を買う場合はカゴに入れた方が有利です。普段取り込むCSVのサイズを見て、うまく使い分けましょう。今回はQueryTableオブジェクトとは何か?といった概要を掴んでいただく内容でした。一般的な方法の他にもこんな取り込み方があるんだ!ということを知っていただけたと思います。サイズの大きいCSVを取り込む際に大幅な時間短縮が可能なQueryTableオブジェクトを使用した方法に少し興味を持っていただいたところで次回予告とします。次回はいよいよサンプルプログラムの解説と、QueryTableオブジェクトを活用してもらうための、メソッドやプロパティの解説を実施します。使いこなすと、速いだけでなくソースコードもシンプルになり、とても便利なオブジェクトです。お楽しみに!連載目次:エクセルVBAのQueryTableで高速にCSVを取り込む一般的なループを使用したCSV取り込みよりも、更に高速にCSVを取り込むことのできるQueryTableオブジェクトに関する連載です。サイズの大きなCSVを取り込む際に非常に便利です。プランノーツ代表、コミュニティ「ノンプロ研」主宰。ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ★フォロー頂ければ嬉しいです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。VBAで、Outlookに登録した予定を取得してメッセージ表示する方法をご紹介しています。この方法と、Outlookに用意されているイベントと組み合わせて使えば、Outlookを更に使い勝手良く使うことができますよ。【エクセルVBA】入力規則のドロップダウンリストを複数連動させる方法エクセルの入力規則のドロップダウンリストを、VBAで複数連動させる方法をご紹介しています。この方法が使えれば、エクセルで作るツールの幅がぐんと広がりますよ。【脱エクセルVBA初心者】Copyメソッドで範囲まるごとを一発でコピペする脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックについての連載です。今回は、範囲単位でまるごとコピペをする方法についてお伝えしつつ、請求書作成プログラムを作り込んでいきます。【エクセルVBA】イミディエイトウィンドウはコマンド入力画面として使うと超便利エクセルVBAで快適にプログラミングするためのVBEのテクニックについてお伝えしています。今回はエクセルVBAでイミディエイトウィンドウをコマンド入力画面として使う方法とそのテクニックについてです。2017.05.16Excel・VBA活用術エクセルの表をHTMLのtableタグに変換して出力するVBAマクロHTMLファイルを作るときにtrやtdタグでテーブルを構成するの...面倒ですよね?今回はエクセルVBAでエクセルシート上の表をHTML形式のテーブルに変換して出力する方法をお伝えしたいと思います。2016.03.22Excel・VBA活用術エクセルVBAでAccessデータベースの複数のレコードを上書き更新する場合の実行速度についてエクセルVBAでAccessデータベースを操作する方法について、今回はADODBレコードセットのFind、Update、MoveFirstを使って更新する方法について、またその実行速度についてです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント108セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント108セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。RowSourceプロパティとAddItemメソッド2020.01.21GASでGoogleスライドのSlideオブジェクトの概要とその取得方法2020.01.162020.01.24Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。