![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
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も見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
-
4
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
5
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
6
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
エクセルで、重複データを除外...
-
Countifよりも早く重複数をカウ...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
VBA 大きなtxtテキストファ...
-
excel:別シートの値を飛び飛び...
-
エクセルで2つ以上のリスト比...
-
エクセル2016にて、行挿入&コピ...
-
不要な行を消したい
-
500行の中から、多い順に抽出す...
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
Excel VBAでオートフィルタで抽...
-
Excel 同じ生まれ年の人数を調...
-
Excelの30個ずつの平均値の出し方
-
Excelで2つのデータの突合せを...
-
差し込み印刷 «Next Record»に...
-
VBA 数式を最終行までコピー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで日付から日にちを削...
-
Excelで2行単位のソートの出来...
-
複数の条件に合う行番号を取得...
-
エクセルで1列に500行並んだデ...
-
Countifよりも早く重複数をカウ...
-
excel:別シートの値を飛び飛び...
-
エクセルで、重複データを除外...
-
Excelの30個ずつの平均値の出し方
-
エクセルVBA C列に特定の文字列...
-
エクセルで横並びの複数データ...
-
エクセルで1つの会社名に対して...
-
VBA 数式を最終行までコピー
-
500行の中から、多い順に抽出す...
-
エクセル2016にて、行挿入&コピ...
-
不要な行を消したい
-
VBA 大きなtxtテキストファ...
-
【エクセル】1列内に複数ある同...
-
本日の日付を超えているものを...
-
Excel VBA 【QueryTables.Add】...
-
【Excel】フィルタの実行で重複...
おすすめ情報