質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

6179閲覧

C#で作業しています。CSVファイルをExcelシートにカンマ区切りでセルに入れる処理時間を短くする方法を探しています。

tomi0416

総合スコア43

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2015/04/30 01:39

VBA → C#に書き換えています。

【VBA】

lang

1'-------------------------------------------------------------------------- 2' OPEN CSV file 3'-------------------------------------------------------------------------- 4intFree = FreeFile '空番号を取得 5Open strSETB For Input As #intFree 'CSVファィルをオープン 6 7i = 0 8Do Until EOF(intFree) 9 10 Line Input #intFree, strRec '1行読み込み 11 12 i = i + 1 13 strSplit = Split(strRec, ",") 'カンマ区切りで配列へ 14 15 For j = 0 To UBound(strSplit) 16 Cells(i, j + 1) = strSplit(j) 17 Next 18 '配列をそのまま入れる方法も、ただし全て文字列として入力される 19' Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit 20Loop

【C#】

lang

1 //'-------------------------------------------------------------------------- 2 //' OPEN CSV file 3 //'-------------------------------------------------------------------------- 4 var strRec = new StreamReader(strSetb, Encoding.GetEncoding("UTF-8")); 5 6 var i = 0; 7 while (!strRec.EndOfStream) 8 { 9 i = i + 1; 10 var readLine = strRec.ReadLine(); 11 if (readLine == null) continue; 12 var strSplit = readLine.Split(','); 13 for (var j = 0; j < strSplit.Length; j++) 14 { 15 scr4CsvSheet.Cells[i, j + 1] = strSplit[j]; 16 } 17 }

VBAをC#に書き換えたら、処理が物凄く遅くなりました。
遅くなった原因も知りたいですが、
処理が速くなる書き方が知りたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CSVファイルならExcelでそのまま読めばいいんじゃないかと思うんですが
さておき、

scr4CsvSheetがExcelのワークシートだとすると、

lang

1 scr4CsvSheet.Cells[i, j + 1] = strSplit[j];

でいちいちExcelにアクセスするので遅くなります。

適当な配列やらListにデータを貯めて最後に(又は一定量貯まるたびに)
一括で出力するようにすればいいのではないでしょうか。参考

投稿2015/04/30 02:30

編集2015/04/30 02:41
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問