こんにちわ
マクロを作成しております。
入れ子した繰り返し処理に躓いております、
もしよろしければ高速化のアドバイスをいただければと思います。


B2から下方向に値をいれております。
C1から横方向に同じ値をいれております。
B1-C1,B1-D1,B1-E1・・・最終まで
、というようにリーグ戦の総当たり結果表のような
結果を出力しようとしています。
値は数値で差分を整数で出すだけで、
重複した結果は不要ですので階段状に出力させています。

B列70行程で処理に40秒程かかってしまう状態です。
何か余計な処理や修正したほうがよさそうな箇所ははありますでしょうか?

excel2013
win8 メモリ4G

_______________
Sub test3()

Dim sh As Worksheet
Dim m As Long, i As Long, j As Long

Application.ScreenUpdating = False '非表示

Set sh = Worksheets("test")

m = sh.Cells(Rows.Count, "B").End(xlUp).Row

For i = 1 To m - 1
For j = i To m - 1

sh.Cells(j + 1, i + 2) = _
Application.WorksheetFunction.RoundDown( _
Abs(sh.Cells(1, 2).Offset(i, 0).Value - sh.Cells(1, 2).Offset(0, j).Value), 0)
      ’小数点切り捨てなど入れてます。
      ’単純にi+jにしても処理時間は変わりませんでした。
Next j
Next i


End Sub
_______________

以上です、よろしくお願いします。

A 回答 (2件)

コードをそのままで、B列200行程度実行しても一瞬で終わります。



コードの問題では無いですね。
PC環境かエクセルの問題だと思います。

そもそも、そのエクセルに直接文字入力した場合、入力の度に待たされる事は有りませんか?
    • good
    • 0
この回答へのお礼

t_fumiakiさん
ご回答ありがとうございます。
新規ブックで動かしてみたところ一瞬で完了しました。
迂闊でした、この経験は今後も活かしていきたいと思います!
ありがとうございました

お礼日時:2017/05/19 11:48

こんにちは



>70行程で処理に40秒程かかってしまう状態です
という部分だけからの推測なので、全然関係ないかもしれませんが・・・

例えば、
For i = 1 To 20
 For j = 1 To 10
  Cells(i, j).Value = (i - 1) * 10 + j
 Next j
Next i
程度の処理を走らせても、トロかったりしませんか?
(通常なら、Updateを止めたりしなくても一瞬で終わるはず)

もしもそのような場合は、コードの問題というよりは、以下あたりが原因かも知れません。(私も経験したことがあります)
http://www.saka-en.com/office/excel-open-slow/
http://www.uneidou.com/1872.php

※ ふと思いついただけですので、的外れの場合はスルーしてください。
    • good
    • 0
この回答へのお礼

fujillinさん
ご回答ありがとうございます、.xlb確認してみました。
復帰はしませんでしたが、office系の詳しくない箇所でしたので今後の参考にさせていただきます。

お礼日時:2017/05/19 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング