512×512の二次元配列データが入ったバイナリデータを読み込んで
ワークシートのセルに出力するプログラムと
ワークシートのセルの内容をタブ区切りのテキストデータとして出力するプログラムを
VBAを使って、作りたいと考えています。
普通にバイナリデータを二次元配列に読み込み
for y = 1 to 512
for x = 1 to 512
Cells(x, y) = hairetu (x,y)
next x
next y
というようにすると
10秒くらいかかります。
一方で
バイナリデータを一度タブ区切りテキストデータとして出力後に
直接ワークシートに読み込ませると
一瞬で読み込むことができます。
なぜこのような速度差が生じるのでしょうか?
配列の内容をワークシートを読み込ませたい場合
一度テキストデータを経由することなく高速で読み込ませるにはどうしたら良いですか?
ワークシートの内容をタブ区切りのテキストデータとして出力する場合も同様に
forループを使って出力すると10秒程度時間がかかります。
一方で普通にExcelの保存機能を使うと
一瞬で保存することができます。
どうすればExcel機能と同じくらいの速度でタブ区切りデータとして保存することができますか?
No.3
- 回答日時:
セル範囲の表現
以下、全部同じセル範囲です。
Range("A1:CV1000")
Range(Cells(1,"A"),Cells(1000,"CV"))
Range(Cells(1,1),Cells(1000,100))
Cells(1,1).resize(1000,100)
色指定
思い付くのは、あなたのお話しのfor-nextループ位です。強いて挙げるならThisWorkbook.worksheets("Sheet1")をくくって、
With ThisWorkbook.worksheets("Sheet1")
For i=1 to 512
For j=1 to 512
.Cells(i,j).interior.colorindex=
Next j
Next i
End with
Cellsの前のピリオドを忘れないように。
これをやらないと、マクロはThisWorkbookの、シートSheet1の、とブックとシートの特定作業を512×512回やってしまいます。
ありがとうございます。
うまくいきました。
しつこくなって申し訳ありませんがもう一つ質問です。
配列の順番は予めセルに合わせて並べ替えておく必要がありますか?
この方法だと配列の0~511にデータが入っている必要がありますが
例えば、
1~512にデータが入っており
Cells(1,1)~cells(1,512)
に出力することはできませんか?
それと、
配列の0~511にデータが入っていたとして
逆順で出力することはできませんか?
0→511、1→510、・・・511→0
のように逆順にすることは可能でしょうか?
よろしくお願いいたします。
No.2
- 回答日時:
No1です。
補足します。同じ方法では出来ません。あくまで2次元セルと2次元配列の間でのみ可能な方法なので、例えば
Range(Cells(1,1),Cells(512,512)).Interior.ColorIndex=A
のようにしても出来ません。さらに配列Aを一旦セルに読み込んだ後で
Range(Cells(1,1),Cells(512,512)).Interior.ColorIndex=Range(Cells(1,1),Cells(512,512)).Value
のようにセルのValueからColorIndexに読み込もうとしてもエラーになります。
No.1
- 回答日時:
セルへの入出力に時間が掛かります。
for-nextループで512×512回出力するため、時間を食うのです。一度コンマ区切りデータにしたファイルを読み込む際は、一気に読み込むため早いのです。ではどうすればいいか、下記URLを参照下さい。プログラム3の17行目で一気に出力してるのがポイントです。http://www.seiji-tsubosaki.net/ExcelTech/ExcelVB …
ありがとうございます。
まだ、試していませんがうまくいきそうだと思います。
書き出しの方もそのサイトに書かれてありました。
すいません、もう一つ教えていただきたいのですが
512×512の配列のデータからセルの色の変更も行いたいのですが
ThisWorkbook.Worksheets("Sheet1").Cells(x, y).Interior.color = cl_pl_ARGB(hairetu(x, y))
をForループで回すと数値をセルに代入するよりも
2~3倍くらい時間がかかります。
上記と同じような方法をセルの配色変更に応用できないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Access(アクセス) accessでexcelを読み込む時のデータ型 1 2022/03/28 19:45
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
VB6.0 ファイルの一括読込み
-
配列に画像を格納
-
Excelのセルの色指定をVBAから...
-
DataSetから、DataTableを取得...
-
エクセルの行の削除を配列で高...
-
VBA 配列に格納した値の平均の...
-
読み込みで一行おきに配列に格納
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
Excelのオートフィルタで抽出し...
-
array関数で格納した配列の型を...
-
エクセルでエラーを無視して一...
-
[エクセル]連続する指定範囲か...
-
C#で配列のフィールドを取得したい
-
CSVファイルの読み込みと表示(V...
-
【C#】二次元配列へのcsvファイ...
-
配列がとびとびである場合の書き方
-
INDEX(D:D,L3)の意味は?
-
エクセルで、絶対値の平均を算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
[エクセル]連続する指定範囲か...
-
表にフィルターをかけ、絞った...
-
VBA listBoxについて
-
エクセルで、絶対値の平均を算...
-
配列がとびとびである場合の書き方
-
DataSetから、DataTableを取得...
-
[VBA]改行入りのセルの値を配列...
-
VBA 配列に格納した値の平均の...
-
配列のSession格納、及び取得方...
-
【VBA】ユーザーフォーム リス...
-
エクセルでエラーを無視して一...
-
SUMPRODUCT関数を用いた最小値
-
Excel VBA 配列の分割について
-
Excelのオートフィルタで抽出し...
-
VB6.0 ファイルの一括読込み
-
Excel オートフィルタのリスト...
-
VBAで指定期間の範囲を抽出し、...
おすすめ情報
すいませんあと、もう一つ質問なので
教えてくださった方法だと
Range("A1:CV1000")
のようにしてセルの範囲を指定しますが、
Cells(5,6)のように数値で指定することはできないでしょうか?