
点群データファイルより、任意の範囲の点データを取得し、
平均標高を求めるマクロを「Excel VBA」で作りました。
ただ、今回点群データファイル(CSVファイル)の改行コードが
「X,Y,Z(CR+LF)」から「X,Y,Z(LF)」に仕様変更になったため、
Line Inputステートメントで読み込めなくなりました。
Getステートメントで1バイトずつ読み込むように改変しましたが
今度は、点群データファイルの2GB制限により
「アドレスが不正です」のエラーメッセージが出てしまい、処理が中断してしまいます。
(なお、今回の解析要な点群データのファイルサイズは17GB超です。)
' バッファの初期化
strBuf = ""
Open "点群.csv" For Binary Access Read As #1
Do Until EOF(1)
Get #1, , bytCode ' ここで中断
If bytCode <> 10 Then
' LF以外の場合
strBuf = strBuf & Chr(bytCode)
Else
' LFの場合
varBuf = Split(strBuf, ",")
'
.... (解析処理)
' バッファの初期化
strBuf = ""
End If
Loop
Close #1
'
.... (解析結果を出力)
まとめると、以下の条件のファイルを高速に読み込みたいです。
1. 2GBを超えるCSVファイル
2. 改行コードがLFのみ
サンプルプログラムを教えていただければありがたいです。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
改行コード変換ツールを使って、一旦、LFをCRLFに変換し、
そのファイルを今まで通りの方法で処理するのは、だめなのでしょうか。
改行コードコード変換ツールの1例です。
https://www.vector.co.jp/soft/winnt/util/se40651 …
No.1
- 回答日時:
(´・ω・`) だったら1.8GBずつに分割して処理すれば良いと思うんだ。
同じ処理を10回繰り返すことになるけど、その方が回答を待つよりも早く処理が終わると思うよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA CSV取り込みについて 3 2021/12/30 22:40
- Access(アクセス) accessでexcelデータを一部変換してインポートするVBAコードを教えてください。 2 2021/12/14 08:31
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) csvファイルを列数ごとに分割するExcelマクロが書けずに困っています 8 2023/10/09 12:12
- Visual Basic(VBA) VBA 毎日取得するデータを反映させる方法 の応用 2 2023/09/05 16:32
- Visual Basic(VBA) 【VBA】エクセルで値のみクリップボードにコピーするコードについて(貼り付け時の空白削除) 3 2023/09/06 23:37
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) Excelでセル内の一部のみ同じセルを検索し、そのセルと同じ行で任意の列のセルを選択する方法 2 2021/12/17 11:01
- Visual Basic(VBA) 転記先VBA 一致しているセルがコピーされない 5 2021/11/15 17:23
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
Microsoft VBAで2GBを超えるファイルサイズのバイナリデータを読み込みたい。
Visual Basic(VBA)
-
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
指定のWORKBOOKを前面表示する方法(エクセル:VBA)
Excel(エクセル)
-
6
テキストファイルから改行コードを削除して読込む方法
Visual Basic(VBA)
-
7
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
8
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
-
9
ダブルコーテーション付きでCSV出力
Visual Basic(VBA)
-
10
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
11
VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには
Visual Basic(VBA)
-
12
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
13
マクロ Publicでの配列定義
Visual Basic(VBA)
-
14
CSVファイルの改行コード判別
Visual Basic(VBA)
-
15
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
16
VBAの配列サイズとメモリに関して
Visual Basic(VBA)
-
17
エクセルVBA 文字列領域が不足しています
Visual Basic(VBA)
-
18
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
19
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
20
エクセルで空白セルを含む列の最終行の値を取得する式を教えてください
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAにて、2GB超の点群デ...
-
Excelでのセル内容の高速消去方法
-
win10で、正確な待ち時間の作り方
-
実行時のCPU使用率を増やしたい
-
プログラム上のCPU稼働率低減に...
-
Excel(VBA)でSetTimer関数を使...
-
ソートにかかった時間を測りたい。
-
小数点を含む数値かどうか判断...
-
SQLの速度をあげるには・・・
-
DoEvents関数って何?
-
これはCPUか何かハードウエアの...
-
関数呼び出しの処理
-
.netからexcel操作の処理速度が...
-
論理的処理ってなんですか?
-
VBS でプログラムを先頭から再試行
-
DLLで初回呼び出しと最後の...
-
VC++2010 GDIオブジェクトの解...
-
Excel VBA データ削除の高速化
-
for文の処理に時間がかかってい...
-
WIN2Kと98・MEのアプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
SQLの速度をあげるには・・・
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
ノットイコールを教えて下さい
-
Excel(VBA)でSetTimer関数を使...
-
Excel VBA での処理時間計測結...
-
Excel VBA データ削除の高速化
-
If Not c Is Nothing Then ~延...
-
実行時のCPU使用率を増やしたい
-
基本情報技術者試験詳しい方へ...
-
テキストファイルの空行をスキ...
-
プログラム上のCPU稼働率低減に...
-
ナップザック問題?をエクセル...
-
VBでの簡易電卓の作成(減算方...
-
絶対パスの取得について
-
VC++2010 GDIオブジェクトの解...
-
VB.NETにおける二値化処理の高速化
おすすめ情報
tatsumaru77さん、銀鱗さん
早速の回答ありがとうございます。
作ったマクロですが、社内で共有してます。
今までは、それこそマクロボタンをワンクリックで
結果が得られるようにしてました。
そういう訳で、他の社員に対して手順が増えたことを
説明することがかなりハードルが高いです。
(結局、私が全部介入することとなり、それも困難です。)
今、CreateFileとReadFileを使ってできないか思考錯誤してますが
現状まだ上手くいってません。。。。
情報が不足していて申し訳ありません。
自己解決しました。皆さん、どうもありがうございます。
17GB超の点群データ(CSVファイル,改行コードLFのみ)でしたが
TextStreamクラスのReadLineメソッドで行単位取得ができました。
処理も1時間35分あまりで、比較的に高速処理できていると思います。
'
set objFso = CreateObject("Scripting.FileSystemObject")
set objTs = objFso.OpenTextFile(Filename:="点群.csv", IOMode:=1)
'
Do Until objTs.AtEndOfStream
varBuf = Split(objTs.ReadLine , ",")
'
.... (解析)
Loop
'
objTs = Nothing
objFso = Nothing
'
.... (結果出力)