VBA excelで大きなtxtファイルを開きたいのです!65500行(excelの行のMax)以上の場合sheetを分けてtxtのデータを全部開く場合にどうしたら良いのかどたなかアドバイスをお願いします。txtファイルを開くプログラムは作成した事があるのですが今回必要としている作業はほぼ65500行以上あるデータです。txtファイル名はその都度違います。データ量も一定ではありません。(行数は多いのですが、列は5列ほどのデータです)現在はマニュアルでエクセルにコピペしている状態です。ヒントを頂ければ幸いです。よろしくお願いします。
No.5ベストアンサー
- 回答日時:
ANo.4です。
VBAの画面で、[ツール]->[参照設定]で、[Microsoft Scripting Runtime]にチェックを入れてください。
それと、
ws.Cells(row, col).Resize(1, UBound(c) + 1) = c '1列全データ
を、以下に変更してください。(改行のみの行の場合エラーになるので)
If UBound(c) > -1 Then
ws.Cells(row, col).Resize(1, UBound(c) + 1) = c '1列全データ
End If
fumufumu_2006さん
どうもありがとうございました!!全て読み込む事が出来ました!コードの内容は初心者の私には解読出来ない部分が多々あるのですが、少しずつでも理解出来るよう勉強したいと思います。
お陰様でかなりの作業の簡略化が出来ます。何度も回答を頂き本当にありがとうございました!
No.4
- 回答日時:
1シートに読み込みます。
コマンドボタンを2つ用意してください
CommandButton1は読み込み開始。
CommandButton2は読み込み中止。
読み込み経過をステータスバーに表示します。
Option Explicit
Const fileName = "c:\ken_all.csv" 'ファイル名
Const dataSheetName = "Sheet2" 'データシート名
Const rowsNumber = 65536 '最後の行(最大65536だが、区切りのいい50000とかにもできる)
Const colOfs = 5 '2列目になった場合の列オフセット
'Const fieldDelimiter = "," 'カンマ区切りの場合
Const fieldDelimiter = vbTab 'TAB区切りの場合
Private abortFlag As Boolean '中止フラグ
Private Sub CommandButton1_Click()
Dim d() As String
'読み込み
Dim fso As New FileSystemObject
d() = Split(fso.OpenTextFile(fileName).ReadAll, vbCrLf)
Set fso = Nothing
MsgBox "読み込み完了"
'転送開始
Dim ws As Worksheet
Dim c() As String
Dim row As Long
Dim col As Long
Dim i As Long
Set ws = Sheets(dataSheetName) '転送シート
ws.Cells.Clear
row = 1
col = 1
abortFlag = False
'Application.ScreenUpdating = False '転送中表示しない(若干速くなるが、中止ボタンも押せない)
For i = 0 To UBound(d)
'ステータス表示と中止チェック
If (i Mod 100) = 0 Then
DoEvents
Application.StatusBar = i & "/" & UBound(d)
If abortFlag = True Then
MsgBox "中止しました"
Exit For
End If
End If
c = Split(d(i), fieldDelimiter)
'ws.Cells(row, col).Resize(1, 4) = c '1行4列に固定する場合
ws.Cells(row, col).Resize(1, UBound(c) + 1) = c '1列全データ
row = row + 1
If row > rowsNumber Then
row = 1
col = col + colOfs
End If
Next
Application.StatusBar = i & "/" & UBound(d)
Application.ScreenUpdating = True
Application.StatusBar = False
MsgBox "終了"
End Sub
'中止ボタン
Private Sub CommandButton2_Click()
abortFlag = True
End Sub
こんにちは。
fumufumu_2006さんの教えてくださったコードを打ってやってみたのですが、Dim fso As New FileSystemObject が反転して ”コンパイルエラー:ユーザー定義型は定義されていません”とのエラーが出てしまいました。これはどう回避したら良いのでしょうか?初歩的な質問でしたら大変申し訳ないのですがご教示いただけると助かります。どうか宜しくお願いいたします。
No.3
- 回答日時:
こんな質問なぜ出るの?
TEXファイルの、1レコードをLine Inputなどで読む都度、カウンター変数を1アップして、6万を超える行になったら、別シートや、同一シートの別列に移す先を買えればよいのでは。
なお1レコード読む都度、スペース(やCSVならカンマなど)等で文字列をスプリットし、項目数だけ、「列に項目分離後のデータ」を代入すればよい。
ーー
>txtファイル名はその都度違います
毎回名が変わるというのか
複数のtxtファイルを集合させるのか。
前者なら操作者に実行後最初に入れさせる。
後者ならプログラムにでも名前を持つか、同一フォルダ内とかで選別するか、サブ番号で増えていくとか手を打てばよい。
対象の名前や所属にルールがあるかどうかをいつも菅変えること。
質問者は、処理進行・流れに関するロジックの訓練が不足しているようだ。レコードという考えも非常に大切。
回答をいただきどうもありがとうございました。VBAを勉強し始めてまだ浅いので質問が稚拙ですみません。
>TEXファイルの、1レコードをLine Inputなどで読む都度、カウンター変数を1アップして、6万を超える行になったら、別シートや、同一シートの別列に移す先を買えればよいのでは。
なお1レコード読む都度、スペース(やCSVならカンマなど)等で文字列をスプリットし、項目数だけ、「列に項目分離後のデータ」を代入すればよい。
↑自分のやりたい事のイメージはimogasiさんが書いて下さっている感じなのですが、具体的にどういう記述をしていったら良いのかが分からず困っています。 TAB区切りで読み込んで4列のテキストデータが大体10万行~40万行ほどになります。
自分では、startrow:=65500、131000、・・・として個々に開いたら良いのか?と思ってやってみたのですがこれでは開く事が出来ませんでした。 別列にペーストが出来て全部のデータを一つのシート上に開く事が出来るとその後の処理に便利なのですが。
具体的にどう記述していけば良いのかご教示いただけると非常に助かります。どうかよろしくお願いいたします。
No.2
- 回答日時:
3つ方法があるのではないかと思います。
1.は配列に取り込んで、必要な部分をCELLに転写する。(文字列配列の添え字の制限はもっと大きいので)
2.テキストファイルのデータベースとして扱い、必要な部分をCELLに転写する。(ほとんど制限なくなります)
3.Excel2007を使う。(何も考えずにできます)
ちなみに、一番手軽な1の方法で、全国郵便番号データ(約12万件)を読んでみました。(下記の全国一括)
http://www.post.japanpost.jp/zipcode/dl/kogaki.h …
Sub test()
Dim d() As String
Dim fso As New FileSystemObject
d() = Split(fso.OpenTextFile("c:\ken_all.csv").ReadAll, vbCrLf)
Set fso = Nothing
MsgBox UBound(d) & " 行"
End Sub
この回答への補足
こんにちは。
fumufumu_2006さんの教えてくださったコードを打ってやってみたのですが、Dim fso As New FileSystemObject が反転して ”コンパイルエラー:ユーザー定義型は定義されていません”とのエラーが出てしまいました。これはどう回避したら良いのでしょうか?初歩的な質問でしたら大変申し訳ないのですがご教示いただけると助かります。どうか宜しくお願いいたします。
回答どうもありがとうございました。今、回答を拝見して自宅のPCで(excel2007)開いてみたのですが、この大量な郵便番号データが本当にすんなり開けました、、、。知りませんでした。
来週会社のPC(XP)で教えて下さったコードでトライしてみます!ぶ厚い参考書を読んだり随分調べてみたのですがなかなか良い方法が見つからなかったので非常に助かります。(VBA初心者でまだ良く理解出来ていないので近い答えに辿りつかないのだと思いますが)
来週改めてお礼のメッセージ入れさせて頂きます。どうもありがとうございました。
No.1
- 回答日時:
>txtファイルを開くプログラムは作成した事があるのですが
これができているのなら、
転記する行番号が65537になったらシートを一つ増やして、
行番号を65536で割った余りの行に転記する、とすればいい
のではないでしょうか?
Dim i As Long
i = 65537
MsgBox "Sheet:" & i \ 65536 + 1 & vbCrLf & "行:" & i Mod 65536
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) widows11のメモ帳でExcelのTXTファイルを開きたい 6 2022/08/23 17:09
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
土曜の昼、学校帰りの昼メシの思い出
週休2日が当たり前の今では懐かしい思い出ですが、昔は土曜日も午前中まで学校や会社がある「半ドン」で、いつもよりちょっと早く家に帰って食べる昼ご飯が、なんだかちょっと特別に感じたものです。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
-
4
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
5
テキストファイルの一部分を抽出する方法について
Visual Basic(VBA)
-
6
テキストファイルから特定の文字列が入った行を取得したいです。 例えば下記のような文が記載されたテキス
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで2行単位のソートの出来...
-
エクセルで日付から日にちを削...
-
Countifよりも早く重複数をカウ...
-
複数の条件に合う行番号を取得...
-
エクセルで、重複データを除外...
-
excel:別シートの値を飛び飛び...
-
エクセルで1列に500行並んだデ...
-
エクセルVBA C列に特定の文字列...
-
VBA 数式を最終行までコピー
-
エクセル2016にて、行挿入&コピ...
-
エクセルで1つの会社名に対して...
-
Excelの30個ずつの平均値の出し方
-
不要な行を消したい
-
差し込み印刷 «Next Record»に...
-
Excel(csv)の自動編集
-
エクセルで横並びの複数データ...
-
エクセルで勝手に表示された打...
-
エクセルの複数のセルを一括で...
-
EXCELで○ヶ月を○年○ヶ月に変換...
-
Excelの入力規則で2列表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで1列に500行並んだデ...
-
excel:別シートの値を飛び飛び...
-
複数の条件に合う行番号を取得...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
Countifよりも早く重複数をカウ...
-
VBA 数式を最終行までコピー
-
エクセルVBA C列に特定の文字列...
-
500行の中から、多い順に抽出す...
-
エクセル2016にて、行挿入&コピ...
-
エクセルで横並びの複数データ...
-
エクセル~空白のセルのある行...
-
Excelで2つのデータの突合せを...
-
エクセルで重複データを削除す...
-
エクセルで時刻だけを抜き出す...
-
【Excel】小計単位で並べ替えを...
-
本日の日付を超えているものを...
-
エクセルで1つの会社名に対して...
おすすめ情報