ExcelVBA【実践】CSVファイルを超高速で自動読込!数万行のデータも一瞬!【解説】

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ธ.ค. 2024

ความคิดเห็น • 40

  • @chanryo_eff
    @chanryo_eff  3 ปีที่แล้ว +1

    こちらで配布しています!
    it-yobi.com/excel-p-no123/?link=4
    【配布あり】こちらでExcel講座をまとめています!
    it-yobi.com/course/?pageNo=1&orderNo=2&categoryNo=10&link=4
    ●---Excel【基礎】---●
    Excelを始めるにあたり、必要な知識をまとめています!
    詳しくは再生リストにて!
    th-cam.com/play/PLuUrleRMhKDc1thXw-EmZAU34vhLrKnm3.html
    ●---Excel【実践】---●
    実際に開発しながら解説しています!
    詳しくは再生リストにて!
    th-cam.com/play/PLuUrleRMhKDf4BrAPNt5lfJ7bGCcgCQUw.html
    ●---Excelその他---●
    他にもデータベースなど再生リストを用意!
    th-cam.com/channels/y5cpoeTKqZ2cDzWX8NB3Gg.htmlplaylists
    ●---Googleスプレッドシート【基礎】---●
    Googleスプレッドシートを始めるにあたり、必要な知識をまとめています!
    詳しくは再生リストにて!
    th-cam.com/play/PLuUrleRMhKDe5kCiV88fRUuxsMvZ5asJC.html
    ●---Googleスプレッドシート【実践】---●
    実際に開発しながら解説しています!
    詳しくは再生リストにて!
    th-cam.com/play/PLuUrleRMhKDfjumSrU4Zb1PcH0WKqyg0m.html

  • @まさひろ-q2v
    @まさひろ-q2v 2 ปีที่แล้ว +3

    CSVの取り込み、今まで手作業(「データ」タブ>「外部データの取り込み」>「区切り位置」>名前を付けて保存)による面倒な手順を行っていました。
    早速、教えていただいたコードを活用してCSVデータの取り込みを行ってみます!
    ありがとうございます。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +2

      いつもありがとうございます!
      是非、取り込んでみてほしいです😆

  • @yutaratt
    @yutaratt ปีที่แล้ว

    すばらしいです。仕事でcsvファイルを扱う事がおおいので、大変参考になり、助かりました。

    • @chanryo_eff
      @chanryo_eff  ปีที่แล้ว

      お役に立てたなら幸いです!

  • @beckham-es7pc
    @beckham-es7pc 3 ปีที่แล้ว +3

    いつも分かりやすい動画、ありがとうございます。
    最終列の処理は、不明な場合適当に99等、大きな数でやってました。大変参考になりました。
    最終行も最終列も大き目に設定することで対応できるんですね。
    書き出しの最終行はi にした方がいいかも?ですね。

    • @chanryo_eff
      @chanryo_eff  3 ปีที่แล้ว +2

      ありがとうございます!
      最終行については、GAS(スプレッドシートのプログラム言語)とかだと、書き出し先と書き出し元のサイズは揃えないとエラーになってしまうため、定義サイズと同じにしています!
      ただ、Excelの場合は、サイズが一致していなくても大丈夫みたいですね!
      この場合は、最終行をiにして不一致するのか、100000にして一致するのかどちらの処理が早いのか比べてみたことがないので、調査してみます😂

  • @choni1273
    @choni1273 2 ปีที่แล้ว +4

    これめっちゃ有用な動画や……
    ありがとうございます!

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +1

      こちらこそありがとうございます😂

  • @dana7872
    @dana7872 ปีที่แล้ว +1

    For Each の書き方的にそうなんだと思いますが、strとtmpの関係を書き表していないのにいきなりFor Each str In tmp と始めて、成り立つのが不思議です。

    • @chanryo_eff
      @chanryo_eff  ปีที่แล้ว +1

      関係性は特に必要ありません!
      tmpの内容をstrで1つ1つ受け取るというだけで、受け取る入れ物は型さえ間違っていなければstr以外でもなんでもいいです!

    • @dana7872
      @dana7872 ปีที่แล้ว +2

      @@chanryo_eff tmpの中身を1つ1つstrで受け取るって考えればいいんですね。それなら分かりそうです!英文的には、tmpの中のそれぞれのstr毎に…ってなると思うので、strがtmpの中にあるなんて、どこでも言ってないのに…って思ってしまった感じです😅

  • @shotatanaka8340
    @shotatanaka8340 2 ปีที่แล้ว +3

    いつもわかりやすい動画ありがとうございます。業務に活かすことができ、参考になります。
    質問なのですが、二次元配列に入れたデータをcsvに出力することは可能なのでしょうか?
    調べ方が悪いのか、なかなか出てこなくて…

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +3

      いつもありがとうございます!
      もちろん可能になります。
      調べてみたところ、こちらが参考になるかもです。
      tonari-it.com/vba-write-csv/
      上記の記事の「エクセルシートの内容をCSVファイルとして書き出す」のところの内容です。
      Do Whileで1行1列ずつ文字結合している場所があるかと思います。
      こちらの内容を配列にするだけで大丈夫です!
      配列を繰り返す場合は、
      Do Whileではなく、
      For i = 0 To Ubound(配列,1)
      For j = 0 To Ubound(配列,2)
      みたいな感じで、存在する行数列数分繰り返せれると思います。
      確かに、CSVを出力する系のページが少なかったので、動画にしようか検討してみます😊

    • @shotatanaka8340
      @shotatanaka8340 2 ปีที่แล้ว

      ありがとうございます!
      動画楽しみにしてます😊

  • @シンシン-j1l
    @シンシン-j1l 3 ปีที่แล้ว +2

    こんにちは。
    実務では大量のワードファイルをエクセルに変換することはしばしばあります。
    ①フォルダ内のワードファイルをhtmlに一括変換
    ②変換したWebページ(*.html,*.html)ファイルをエクセルへ自動読込
    上記の手順をVBAで実行するやり方をご教授いただければ幸いです。

    • @chanryo_eff
      @chanryo_eff  3 ปีที่แล้ว +2

      コメントありがとうございます。
      WordVBAから実装するのか、ExcelVBAから実装するのかによりますが、
      ①に関しては、こちらのサイトが参考になるかもです。
      qiita.com/oyahiroki/items/8c3009cadccacdcd17b8
      ②に関しては、読み込んだものをどのように使うのかによって変わってきますが、こちらが参考になるかもです。
      excel-excel.com/tips/vba_488.html
      ざっくりしか見ていないので違ったらすいません。
      コンテンツ作成に関しては検討してみます🙇‍♂️

    • @シンシン-j1l
      @シンシン-j1l 3 ปีที่แล้ว +1

      @@chanryo_eff ご丁寧に返信いただき、また参考サイトまでご紹介いただき、本当にありがとうございます。のちほど確認させていただきます。
      コンテンツ作成をご検討できると伺い、大変うれしく思います。楽しみにしておりますので、是非よろしくお願いいたします。

  • @けーちゃん-f5w
    @けーちゃん-f5w หลายเดือนก่อน

    いつも参考にさせていただいております。csvファイル2、3万行あるデータが10ファイルあり、今回のように一括して読み込み貼り付けをすることは可能なのでしょうか?

    • @chanryo_eff
      @chanryo_eff  หลายเดือนก่อน

      2、3万件が10ファイル程度であれば、全然可能です!

  • @きよの-b9b
    @きよの-b9b 2 ปีที่แล้ว +2

    いつも参考にさせていただいております。
    質問なのですが、桁区切りされた数値を回避する方法はありませんでしょうか?
    この方法で読み込むとダブルクォーテーションと区切るまでの数値が列に入ってしまいます。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +1

      こちらこそ、ありがとうございます!
      数字のみダブルクォーテーションで囲まれているということですね。
      以前対応した時の方法ですと、最初に1行の文字列を1文字ずつ確認して、「"」の数を数え、奇数の場合は、「,」でセパレートしない、偶数の場合は、「,」でセパレートするというようにしました💦
      他にも、調べるともっと簡単な方法があるかもです💦
      どんな条件の時に、分割するのかの誰が見ても分かるルールを定義することができると、不具合なく実装しやすいです!

    • @きよの-b9b
      @きよの-b9b 2 ปีที่แล้ว +1

      @@chanryo_eff
      返信ありがとうございます。
      一文字ずつ判定させることで何とか出来ました。
      これからも参考にさせていただきます。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +1

      @@きよの-b9b 解決したみたいでよかったです!報告ありがとうございます😆
      こちらこそよろしくお願いいたします!

  • @kaza9052
    @kaza9052 2 ปีที่แล้ว +2

    はじめまして、動画を拝見させてもらっています。
    質問させていただいてよろしいでしょうか?
    配列への取込時にfor eachを使っていらっしゃる点についてです。
    for eachは読み込み順がランダムになるようなイメージをもっているのですが、
    順番は例外なくきちんと左から読み込んでくれるのでしょうか?

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +2

      ありがとうございます!
      For Eachはランダムでなくインデックス順になるかと思います。
      そのため今回の内容は正しく読み込まれます。
      ランダムというのは何からの情報でしょうか??
      複数のセル(例えば、A1~D3)の場合は、
      A1,B1,C1,A2,B2,C2,A3,B3,C3の順番に読み込まれます。
      今回のFor Eachはテキストをカンマ区切りにした1次元配列なので、左から順番に読み込まれます!

    • @kaza9052
      @kaza9052 2 ปีที่แล้ว +2

      @@chanryo_eff 回答ありがとうございます!
      なるほど、for eachでも大丈夫なんですね。
      ランダムというのは私の表現が悪かったです。よくfor eachでフォルダ内のファイルを取り出す処理をするのですが、ファイル名順とかで取り出されるわけではないようでしたのでそのように思いこんでおりました。
      しかし、for eachでセルの読み出す順番が決まっているということであれば今後どんどん使っていきたいと思います。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว

      @@kaza9052
      なるほどですね!
      フォルダ内のファイルの読み込みはDirの場合は、ファイルシステムの種類によって異なるのでそれが原因かもです!
      読み込み対象のドライブのプロパティを見ると「NTFS」もしくは「FAT」と書かれているかと思います!前者の場合は、名前昇順、後者の場合は、保存された順に読み込まれるみたいです!

  • @hadouryuu
    @hadouryuu 2 ปีที่แล้ว +1

    いつも動画見ております。
    貼り付け先について教えて頂きたいことがございます。
    作成頂いたコードを実行しますと、Sheet1へ貼り付けがなされますが、任意のシートに読込結果を貼り付けたい場合どのようにすればよろしいでしょうか。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว

      ありがとうございます!
      Range(…)の前にWorksheets()で任意のシートを指定することで実現可能です😊

    • @hadouryuu
      @hadouryuu 2 ปีที่แล้ว +1

      ありがとうございます!
      任意のシートへ貼り付けることができました!

  • @imo1player
    @imo1player 2 ปีที่แล้ว +1

    やっぱVBAめんどくさいなー、pythonで書いたらもっとシンプル。遅いけど。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว +1

      pythonの場合、便利なライブラリが揃っていていいですよね!
      openpyxlなら高速にExcelへと読み込めるかもですね!

  • @マンボー-m7b
    @マンボー-m7b 2 ปีที่แล้ว

    コメント失礼します。
    対象ファイルを開いてマクロの中に格納する、「open file for input as#1」についてですが、私の場合、エラーメッセージ52のファイル名または、番号が不正です。と表示されます。
    念のためdebug.printでパスの確認を行いましたが、思い当たる原因が分かりません。
    もし可能でしたら、このことについてご教示頂けないでしょうか。

    • @chanryo_eff
      @chanryo_eff  2 ปีที่แล้ว

      プログラムと実行環境を見ないと判断が難しいですが、一般的に下記内容が当てはまるかと思います。
      www.tipsfound.com/vba/19052
      ※参考程度に載せておきます。