Windows2000、エクセル2000です。
今回、約10万行を超えるCSVファイルが送られてきました。
エクセルで開くと当然65536行で切れてしまいます。
やむをえず、拡張子を .txt に変え、メモ帳で開いて分割してエクセルの複数のシートに張ろうとしてみました。
拡張子を .txt に変えれば65536行で切れず、全件表示されます。しかし、このデータをコピーしようとCtrlを押したままマウスでスクロールをしたところ、スクロールはできるのですがデータが膨大なため遅々として先にすすんでくれません。
これじゃらちがあかないので、他の部署のAccsessを使える人にデータをわたして数ファイルのCSVファイルに分割していただきました。
今回はこれで事なきをえたのですが、これからまたこんなことがあった場合、わたしはAccsessを使ったことがないので困ってしまいます。(送付側からは分割したければそっちでやれといわれております。)
こんな場合、エクセルではどのような対応をすればいいのでしょうか?
(エクセル2007を使えという答えは勘弁してください。)
No.5
- 回答日時:
#3の補足
説明の文章とコードが違います。
# A1から入れていくとは思っていますが、そうでなければ、iCol を変えてください。i =1 になっていますが、それを変えても、最初のシートだけです。
コードを直し、iROW, iCOL で最初の位置を決められるようにしました。しかし、iCOL は、256列のままですから、当面、iCOL = 1のままでお願いします。
本来は、
If j > 256 -iCOL Then j = 256 -iCOL
で、右の限界を決めなくてはなりませんでした。
お礼が遅くなり申し訳ございませんでした。
No2の方のアドバイスでワードで取り込むことができたデータをいままで処理しておりました。
やっと終わりました。
Wendy02さまのいつもながら鮮やかな魔術を見せていただいてありがとうございます。
ためしたところ完璧に取り込めました。今後はこれで大きなCSVが送付されても慌てずに対処できそうです。
コードじっくり勉強させていただきます。
ありがとうございました。
No.4
- 回答日時:
参考URLに、A No.3の様に、テキストファイルとして処理する方法と、ADOで接続する方法が紹介されています。
データにユニークなIDの様なものがあれば、SQLでIDの範囲を指定して、複数回に分けて読み込めば良いでしょう。適当なものが無ければ、全てRecordsetに読み込んで、Recordsetに対して処理して分割する事になりますが、これはメモリーを食って得策ではないかもしれません。
参考URL:http://blog.livedoor.jp/akf0/archives/51387288.h …
No.3
- 回答日時:
こんにちは。
今回も、また、「フリーソフトウェアはなし」という条件付きになりそうですね。
私の記憶では、CSV を処理するための、フリーソフトウェアのものすごく優秀なデータベースがあったと思います。
ただ、この質問は、ここの掲示板でなかったのでしょうか。これは、昔から有名な質問ですから、マクロのコードはあるような気がしましたが、今回、私は、改めて自分で作ってみました。内容的はローテクですが、もう少し、気の利いた方法がないのかなっていうのが、今の私の気持ちです。
試したのは、12万行の郵便番号ファイル(csv)を使いました。(ただし、現行のマクロは、256列までのファイルに限ります、257例以上は、切り落としてしまいます。)上限数を越えるたびに、現在のシートの位置を調べ、右側が足りなければ、シートを増やしてから、インポートしていきます。
ただ、もう少し、インポートが速くならないのか、という気がしています。
そのためには、以下のコードを、このようにしてみたら、とは思ったのですが、当面は、そのままにしました。
Application.ScreenUpdating = False
Cells(i, 1).Resize(, j).Value = myAr
Application.ScreenUpdating = True
(Cells の前のオブジェクトのActiveSheet が入っていないのは、微妙な手抜きなのですが、ActiveSheet にしかインポートしませんから、このままにします)
なお、CSV には、クォーテーションマーク("")がある時がありますから、それを抜くためには、Substitute 関数が良いと思います。これを入れても、配列で貼り付けている限りは、自動キャスティングで、文字が数値化はしません。
A1から入れていくとは思っていますが、そうでなければ、iCol を変えてください。i =1 になっていますが、それを変えても、最初のシートだけです。
'---------------------------------------
Sub CSVImport()
'最大行65536行を越えるCSV のインポート
Dim FileName As String
Dim FNo As Integer
Dim i As Long
Dim buf As String
Dim myAr As Variant
Dim k As Integer
Dim j As Integer
Const sSEP As String = "," '区切り文字
Const iROW As Integer = 1 '1行目
Const iCOL As Integer = 1 '1列目から入れる
Const iMAX As Long = 40000 '上限数
i = iROW '行の初期値
FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv")
If FileName = "False" Then
Exit Sub
End If
FNo = FreeFile()
Open FileName For Input As #FNo
Do Until EOF(FNo)
Line Input #FNo, buf
''クォーテーションマーク("")を除く場合は、以下のコメントブロックを外す
'buf = WorksheetFunction.Substitute(buf, """", "")
myAr = Split(buf, sSEP)
j = UBound(myAr) + 1
If j > 256 Then j = 256 '列が、256を越えたら、256までのインポート
'Application.ScreenUpdating = False
Cells(i, iCOL).Resize(, j).Value = myAr
'Application.ScreenUpdating = True
i = i + 1
If i > iMAX Then
k = ActiveSheet.Index
Call CheckSheet(k)
i = iROW
End If
Loop
Close #FNo
End Sub
Sub CheckSheet(k As Variant)
Dim n As Integer
n = ActiveWorkbook.Sheets.Count
If k = n Then
ActiveWorkbook.Worksheets.Add After:=activeSheet
End If
End Sub
No.1
- 回答日時:
csvファイルを分割する目的でわざわざAccessを使う必要性はありません。
参考URLは、CSVファイル分割ソフトのほんの一例です。
参考URL:http://hioki.jp/soft/csvc100/csvc100_j.html
さっそくありがとうございます。
とても便利そうなソフトですね。
ただ、残念ながらわたしの会社では会社の指定外のソフトウエアの導入が禁止されているのでつかえないのです。
こんど自宅で試して見ます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) ドキュメントに保存していたエクセルのファイルが開きません。 2 2022/12/02 09:38
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Excel(エクセル) マクロ作成初心者です。CSVファイルの日付データについて 3 2022/12/14 06:02
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Access】クエリで抽出...
-
Wordの文章をExcelに内容ごとに...
-
列数が4000を超えるcsvファイル...
-
Excelのデータ(数字)をテキス...
-
SQLSever 一括インポートについて
-
ダブルクォーテーション囲いカ...
-
Excelでhtml形式のテキストを表...
-
notepad++ で作成した文書を cs...
-
アクセス2007でのインポートエ...
-
複数eml形式のBecky!への一括イ...
-
ACCESS複数テキストファイルを...
-
アクセス(ACCESS) インポート...
-
csvファイル中の「e」が変換さ...
-
ACCESS でインポートフ...
-
差し込み印刷の元データファイ...
-
ACCESSでデータ読み取り専用を...
-
ISOファイルとMDSファイル
-
EXCEL VBA 指定したファイルが...
-
エクセルで誰が今開いているか...
-
EXCELが勝手に「読み取り専用」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Access】クエリで抽出...
-
Wordの文章をExcelに内容ごとに...
-
Excelのデータ(数字)をテキス...
-
SQLSever 一括インポートについて
-
ACCESS でインポートフ...
-
多数のeml形式ファイルを1つの...
-
複数eml形式のBecky!への一括イ...
-
アクセス(ACCESS) インポート...
-
Excelでhtml形式のテキストを表...
-
ACCESS CSV形式でエクスポート...
-
VBA 複数のCSVファイルを一度...
-
複数のメールファイルを1つの...
-
[VBA]csvファイルを開いて保存...
-
複数のエクセルファイルをアク...
-
エクセル2000で65536行を超える...
-
notepad++ で作成した文書を cs...
-
ダブルクォーテーション囲いカ...
-
アクセス2007でのインポートエ...
-
VBAのQueryTableオブジェクトの...
-
Excel 2016 テキストファイルの...
おすすめ情報