Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4415 / 13644 ツリー ←次へ | 前へ→

【56744】【VBA】1000×1000のループ処理について ロミ 08/7/3(木) 1:25 質問[未読]
【56745】Re:【VBA】1000×1000のループ処理について ハチ 08/7/3(木) 9:20 発言[未読]
【56767】Re:【VBA】1000×1000のループ処理について ロミ 08/7/3(木) 22:14 お礼[未読]
【56802】Re:【VBA】1000×1000のループ処理について 08/7/6(日) 2:29 回答[未読]
【56746】Re:【VBA】1000×1000のループ処理について こぎつね 08/7/3(木) 9:27 発言[未読]
【56768】Re:【VBA】1000×1000のループ処理について ロミ 08/7/3(木) 22:20 お礼[未読]
【56747】Re:【VBA】1000×1000のループ処理について neptune 08/7/3(木) 9:29 発言[未読]
【56769】Re:【VBA】1000×1000のループ処理について ロミ 08/7/3(木) 22:26 お礼[未読]
【56771】Re:【VBA】1000×1000のループ処理について neptune 08/7/3(木) 22:42 発言[未読]
【56774】Re:【VBA】1000×1000のループ処理について しょう 08/7/4(金) 9:27 回答[未読]
【56798】Re:【VBA】1000×1000のループ処理について SS 08/7/5(土) 10:44 発言[未読]
【56803】Re:【VBA】1000×1000のループ処理について 見習い 08/7/6(日) 3:31 回答[未読]

【56744】【VBA】1000×1000のループ処理について
質問  ロミ  - 08/7/3(木) 1:25 -

引用なし
パスワード
   はじめまして、悩んでおります。皆様の知恵とアイディアをお借りしたく、
質問させて頂きました。

A列:0を1000回、1を1000回、2を1000回・・・・1000を1000回
B列:0〜1000 を1000回繰り返し
C列:B列の値を1.2倍し、切上整数値

(表示結果)
A B C
0  0  0
0  1  2
0  2  3
0  3  4
0  4  5
0  5  6
0  6  8
*  *  *
*  *  *
1000 999 1199
1000 1000 1200

上記な様なデータを作成しなければいけないのですが、
1000,000件のデータをVBAを利用して効率的に作成できる方法は
ないものでしょうか???
どんな方法でもかまいませんので、アドバイス宜しくお願いいたします。

【56745】Re:【VBA】1000×1000のループ処理につい...
発言  ハチ  - 08/7/3(木) 9:20 -

引用なし
パスワード
   ▼ロミ さん:
>>上記な様なデータを作成しなければいけないのですが、
>1000,000件のデータをVBAを利用して効率的に作成できる方法は
>ないものでしょうか???
>どんな方法でもかまいませんので、アドバイス宜しくお願いいたします。

効率的とは、
短いコードで ということですか?
処理が早い ということでしょうか?

自分は、Excel2000なので、行数に制限があります。
65536行までしか使えませんが、ロミさんの環境はどうなんでしょうか?

【56746】Re:【VBA】1000×1000のループ処理につい...
発言  こぎつね  - 08/7/3(木) 9:27 -

引用なし
パスワード
   質問の内容として感じたのは、何かのテストを行ないたい(PC環境等)のか、
或いは”課題”として出されたものかと思いましたが。。。

PC環境による時間の測定が目的であれば、そのように提示された方が
より具体的な回答が得られると思いますよ。

【56747】Re:【VBA】1000×1000のループ処理につい...
発言  neptune  - 08/7/3(木) 9:29 -

引用なし
パスワード
   ▼ロミ さん:
こんにちは

>1000,000件のデータをVBAを利用して効率的に作成できる方法は
>ないものでしょうか???
>どんな方法でもかまいませんので、アドバイス宜しくお願いいたします。
そもそも論を言うと、
Excelで1000,000件のデータを扱うのは例え「2007は制限なし?」としても
筋が違うと思います。
(出来たとしてもExcelBookに良い影響があるわけがない)

外部ファイル、例えばAccess、csvファイルなどにデータだけを蓄え
必要なデータだけ取り出すべきと思います。

データの作成自体は、規則性があるならそれをコード化するだけです。

【56767】Re:【VBA】1000×1000のループ処理につい...
お礼  ロミ  - 08/7/3(木) 22:14 -

引用なし
パスワード
   ▼ハチ さん:
こんばんは。返答のほどありがとうございます。
はい、こちらの環境はofficeは2007です。
たしかに、無謀とは思いつつ1000×1000のループをVBAで
やってみたのですが、予想どおり65536行でstopしてしまいました。
アクセスも使用可能なんですが、いい方法ありますでしょうか・・・?

>効率的とは、
>短いコードで ということですか?
>処理が早い ということでしょうか?
処理速度、使用メモリ等などですかね・・・・

【56768】Re:【VBA】1000×1000のループ処理につい...
お礼  ロミ  - 08/7/3(木) 22:20 -

引用なし
パスワード
   ▼こぎつね さん:
こんばんは。返答のほどありがとうございます。
はい、このデータの中からいくつかのパターンを絞り込み
確立をだすような検証をしなくてはいけないもので・・・・・・
とくに時間測定は不要なんですが、処理速度としては
早いほうがより有難いです。

無謀とは思いつつ1000×1000のループをVBAで
やってみたのですが、予想どおり65536行でstopしてしまいました。
こちらアクセスも使用可能なんですが、いい方法ありますでしょうか・・・?

【56769】Re:【VBA】1000×1000のループ処理につい...
お礼  ロミ  - 08/7/3(木) 22:26 -

引用なし
パスワード
   ▼neptune さん:
こんばんは。返答のほどありがとうございます。
やはりそうですよね・・・
無謀とは思いつつ1000×1000のループをVBAで
やってみたのですが、予想どおり65536行でstopしてしまいました。

ちなみに↑このVBAの書き出しのコードをセルしてる部分を、
Access、csvファイルにすればいいのでしょうか・・・・?

【56771】Re:【VBA】1000×1000のループ処理につい...
発言  neptune  - 08/7/3(木) 22:42 -

引用なし
パスワード
   ▼ロミ さん:
こんにちは

>無謀とは思いつつ1000×1000のループをVBAで
>やってみたのですが、予想どおり65536行でstopしてしまいました。
>
>ちなみに↑このVBAの書き出しのコードをセルしてる部分を、
>Access、csvファイルにすればいいのでしょうか・・・・?
そういう事です。
勿論、AccessならADO,DAO等を使用してデータ追加、CSVならキチンと
CSV形式(カンマ区切り)に整形してやらなければなりません。

所で、作成する方法のみの話だったので、Access、CSVなどを書きましたが、
どういう利用をするかによってどちらが後で便利かは違ってきます。

まぁAccessの使える環境なら、CSVよりはAccessで作っておけば間違い無いです。
グラフもあるし、抽出検索は簡単だし。

【56774】Re:【VBA】1000×1000のループ処理につい...
回答  しょう  - 08/7/4(金) 9:27 -

引用なし
パスワード
   質問の回答になるか分かりませんが、参考までに。

方法1:
時間はかかるかもしれませんがシーケンシャルファイルでCSVに計算結果を吐き出す。
理論上は何行のデータでも作成できます。

方法2:
計算結果が65536行を超えたら次の列に書き込む。
Sub test()
  '
  Dim t As Long
  '
  For t = 1 To 1000000
    Cells(((t - 1) Mod 65536) + 1, Int((t - 1) / 65536) + 1) = t
  Next
  '
End Sub

【56798】Re:【VBA】1000×1000のループ処理につい...
発言  SS  - 08/7/5(土) 10:44 -

引用なし
パスワード
   ▼ロミ さんへ
こんにちは、ご質問では1列で管理されたいとのことですが
シートを二つに分けて

Sheet1
   A    B    C    D
1 b(a1,1) b(a2,1) b(a3,1) b(a4,1)
2 b(a1,2) b(a2,2) b(a3,2) b(a4,2)
3 b(a1,3) b(a2,3) b(a3,3) b(a4,3)
4 b(a1,4)
5 b(a1,5)
6 b(a1,6)

Sheet2
   A      B      C      D
1 c(b(a1,1)) c(b(a2,1)) c(b(a3,1)) c(b(a4,1))
2 c(b(a1,2)) c(b(a2,2)) 
3 c(b(a1,3)) 
4 c(b(a1,6))

のように1000行×1000列のデータすることは可能ですか?
私の環境2000では、無理(EXCEL2007では256列以上いけますよね?)ですが
可能であればデータ解析及び処理等もA項目、B項目で追いやすく、
わかりやすくなると思うのですが、いかがでしょうか。


>はじめまして、悩んでおります。皆様の知恵とアイディアをお借りしたく、
>質問させて頂きました。
>
>A列:0を1000回、1を1000回、2を1000回・・・・1000を1000回
>B列:0〜1000 を1000回繰り返し
>C列:B列の値を1.2倍し、切上整数値
>
>(表示結果)
>A B C
>0  0  0
>0  1  2
>0  2  3
>0  3  4
>0  4  5
>0  5  6
>0  6  8
>*  *  *
>*  *  *
>1000 999 1199
>1000 1000 1200
>
>上記な様なデータを作成しなければいけないのですが、
>1000,000件のデータをVBAを利用して効率的に作成できる方法は
>ないものでしょうか???
>どんな方法でもかまいませんので、アドバイス宜しくお願いいたします。

【56802】Re:【VBA】1000×1000のループ処理につい...
回答    - 08/7/6(日) 2:29 -

引用なし
パスワード
   Excel2007なら、最大で約104万行まで扱えるようになったので、
ちょうど1,000,000行のデータなら処理可能です。

65536行でストップしてしまう場合、ファイルがExcel2007形式ではなく、
従来のExcel2003以前の形式で保存してしまっている可能性があります。

見分けるには、ファイルの拡張子を確認してください。
2007形式の場合、ファイルの拡張子が.xlsmまたは.xlsxとなって
いなければなりません。もし.xlsになっていたら、それは従来の形式です。
2007形式で保存し直してから開いてください。

なお、
「.xlsm」はVBAマクロが含まれた2007形式のファイル、
「.xlsx」はVBAマクロが含まれていない2007形式のファイル
を意味します。
今の場合はマクロを含むので、.xlsmで保存することになるでしょう。

また、ファイルを開いたときにウィンドウに「互換モード」と
表示されていないかどうかも確認してください。
互換モードと表示されている場合、2003以前の形式でファイルが
認識されていることを意味します。


▼ロミ さん:
>▼ハチ さん:
>こんばんは。返答のほどありがとうございます。
>はい、こちらの環境はofficeは2007です。
>たしかに、無謀とは思いつつ1000×1000のループをVBAで
>やってみたのですが、予想どおり65536行でstopしてしまいました。

【56803】Re:【VBA】1000×1000のループ処理につい...
回答  見習い  - 08/7/6(日) 3:31 -

引用なし
パスワード
   >どんな方法でもかまいませんので、アドバイス宜しくお願いいたします。

「どんな方法でも」ということで数式で。
手元に2007が無いので検証出来ませんが。
処理前にyさんの[56802]の内容は確認しておいてください。

Sub Macro3()
Dim a As String, b As String, c As String

  a = "=INT((ROW()-1)/1001)" 'A列
  b = "=MOD(ROW()-1,1001)"  'B列
  c = "=ROUNDUP(B1*1.2,0)"  'C列
  
  With Range("A1:C1")
    .Value = Array(a, b, c)  '1行目に数式を埋め込む
    .Resize(1001 ^ 2).FillDown '下にフィルコピー
  End With

End Sub

このマクロが2007では動かなかったら、手作業で数式を埋め込んで
下にコピーしてみてください。

終わったら、コピーして【形式を選択して貼り付け→値】で値に
しておくと良いかも。

4415 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free