[[20080620093521]] 『空行を詰めたい』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空行を詰めたい』(初心者)

 元データは1万行X20列くらいあります。
 エクセルのデータを変数に入れて、計算(処理)をしたあと
 計算の結果 A列に”0”(ゼロ)の場合、結果を書き出さない(詰める)
 という感じです。
 下記の方法で処理しているのですが単純なのか遅くてだめな感じです。
 また、データが1万→3万 と増える見込みで今のうちに
 何とかしたいと思っています。

 Dim data1(10000,20) As Long   'すでに計算結果が入っているものとしてます
 Dim data2(10000,20) As Long   ’空っぽ(詰める為に用意した変数)
 Dim total As Long
 Dim temp As String
 total=0
 For num1=1 to 10000
  If data1(num1,1)<>0 Then '値が0以外の場合
     total=total+1
     For num2=1 to 20
        data2(total,num2)=data1(num1,num2)
     Next num2
  End If
 Next num1

 temp="A1:T" & total 'セル範囲の格納
 Range(temp)=data2   '貼付け

 よろしくお願いします


 単純に元データのA列を0以外でフィルタかけたらどうでしょうか。

 (川野鮎太郎)


 データ自体詰めたいので、0でフィルタして行削除も考えましたが
 エクセルのエラーで、複雑すぎて出来ません的なものが出ます。

 ですので、変数で処理して出力を試みております。

 よろしくお願いします。 (初心者)

 回答ではありません。 <(_ _)> (特に遅くなりそうと感じるところはありませんので)

 >Dim data1(10000,20) As Long   'すでに計算結果が入っているものとしてます
 掲示されていない部分で、問題になりそうなところは無いのですね?

 PCのスペックはどんななのでしょうか?(メモリー、CPU)

 遅いと云うことですが、10000x20で何秒くらい掛るのですか?

(半平太)


 問題はないと思っております。
 タイマー変数で見たところ、10秒〜20秒くらいかかっています。
 マシンは・・・・
 セレロン:466 メモリ128 です。

 恥ずかしいスペックでスイマセン。。。。
 もしソースに問題が無く、スペックの問題ならあきらめます。
 初心者


 実際に動くコードを載せてください。
 試す時に面倒くさいから。
 K6-2/500Mhz メモリ 256MB
 win2000sp4 Office2002sp3
 で、3回計測して3回とも3秒でした。

 Sub wkkwk()
 Dim data1(10000, 20) As Long  'すでに計算結果が入っているものとしてます
 Dim data2(10000, 20) As Long  '空っぽ(詰める為に用意した変数)
 Dim total As Long
 Dim temp As String

 For i = 0 To 10000
   For ii = 0 To 20
       Ct = Ct + 1
       data1(i, ii) = Ct
   Next
 Next

 st = Now()
 total = 0
 For num1 = 1 To 10000
  If data1(num1, 1) <> 0 Then '値が0以外の場合
     total = total + 1
     For num2 = 1 To 20
        data2(total, num2) = data1(num1, num2)
     Next num2
  End If
 Next num1

 temp = "A1:T" & total 'セル範囲の格納
 Range(temp) = data2 '貼付け
 MsgBox Format(Now() - st, "hh:mm:ss")
 End Sub

//////////////////

 >Dim data1(10000,20) As Long
 だから、データは数値だけですよね。

 Officeのバージョンは?

 >セレロン:466 メモリ128
 だと、OSによってはメモリが少ないかも。

 10000行ぐらいだとあまり変わらないかもしれませんが、
 >10000x20
 を、2000x20にして5回やるとか。
 書き込むセルに何か書かれてあると上書きに時間がかかります。

 >すでに計算結果が入っているものとしてます
 って事は、数式が入っているんですか?
 再計算を手動にした方が良いですね。(これ濃厚。)

 >'すでに計算結果が入っているものとしてます
 あいまいなのでなんと言えないですが、これに時間がかかっているだけでは?
 もしくは削除の時間も含めて遅いって事?
 BJ


 >エクセルのデータを変数に入れて、計算(処理)をしたあと
 >data1(10000,20) As Long   'すでに計算結果が入っているものとしてます
 と言う表現が、気になるのですが・・・。

 この計算ってどこで行っているのですか?
 ワークシート上で行って結果をdata1に取り込んでいる?
 ワークシート上から元データを取り込んで
  マクロで計算を行いながら、結果をdata1に書き入れている?

 後者なら、そもそも書き入れなければ良いんですよね?

 >エクセルのエラーで、複雑すぎて出来ません的なものが出ます。
 「的なもの」も気になりますね。
 本当に出来ないのか、何か問題の有る方法だから出来ないのか
 どちらなんでしょうね。

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.