戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
実行時間の短縮について

    [191459] 実行時間の短縮について-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ PopCultVenus -(2020/02/23(17:55))
    □U R L/
      いつもお世話になります。
      
      あるブック内において、リストシートから印刷用シートにデータを転記するVBAを記述しました。
      イミディエイトウィンドウで時間を確認したところ、
      
      17:31:34 - スタート
      17:31:34 - リストから転記
      17:31:34 - 印刷用シート内転記
      17:31:35 - 行調整
      17:32:01 - 列調整
      17:32:02 - セルの書式設定
      
      となり、列調整の記述部分で時間が掛かっています。
      現状で約600列の列幅調整をループ処理しています。
      動作確認したPCのスペックは以下の通りです。
      CPU i3-8100 3.60GHz
      メモリ8GB
      ストレージSSD
      OS Win10
      Excel 2010
      
      この列調整に26秒掛かっているのですが、この時間を短縮する方法はあるのでしょうか?
      インデックスシールを手差し印刷する為にこのような列幅設定になっています。
      何かより良いロジックがあれば教えて頂ければと思います。
      宜しくお願いします。
      
      
      列調整のコードは以下の通りです。
      
      '----------列の幅調整---------------------------------------------
              
              maxCol = wsP.Range("XFD1").End(xlToLeft).Column         '   最終列を取得
              
              For n = 1 To maxCol Step 2
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 4.38         '   1行目から最終列まで、2列おきに列幅を変更
              Next
              
              For n = 2 To maxCol Step 4
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 1.38         '   2列目から最終列まで、4列おきに列幅を変更
              Next
              
              For n = 4 To maxCol Step 4
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 7.88         '   4列目から最終列まで、4列おきに列幅を変更
              Next
              
              maxCol = wsP.Range("XFD1").End(xlToLeft).Column         '   最終列を取得
          
              For i = 28 To maxCol Step 27                                                '   レイアウト設定のうえで、不必要な空白列を最終列まで削除
                  wsP.Cells(1, i).EntireColumn.Delete
              Next
              
      '---------------------------------------------------------------------------
      
      
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [191461] Re[1]: 実行時間の短縮について-

    記事引用/メール受信=OFF■

    □投稿者/ マナ -(2020/02/23(18:24))
    □U R L/

      想定される最大列数について、最初に1回だけ列幅調整しておけばよくて、
      毎回マクロで実行する必要がないのでは。




    [191462] Re[2]: 実行時間の短縮について-

    記事引用/メール受信=OFF■

    □投稿者/ マナ -(2020/02/23(18:28))
    □U R L/

      試してませんが、
      毎回実行するとしても、形式を選択して貼り付け(列幅)はどうでしょうか?




    [191465] Re[3]: 実行時間の短縮について-

    記事引用/メール受信=OFF■

    □投稿者/ PopCultVenus -(2020/02/23(21:02))
    □U R L/

      マナさん

      ありがとうございます。
      言われてみれば、毎回の列幅調整は必要ないです。

      リストシートのあるセルに、最大リスト数を入力して、最大列数を取得し、その分だけ
      列幅調整するように改善します。

      今、その辺りを別に記述しているのですが、微妙にずれます。
      今日明日で、調整してみます。




    [191479] Re[4]: 実行時間の短縮について-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ PopCultVenus -(2020/02/24(14:44))
    □U R L/
      マナさん
      
      こんにちは。
      昨夜と今日で、色々調整してみました。
      結果として、列幅や行の挿入など時間がかかる処理のみを別のプロシージャに記述しました。
      初回だけの設定や、リスト数の増減に合わせて処理する列数を変更できるように記述してみました。
      最終行や最終列を求めて処理をしていたので、データ入力前での処理に変更するのに時間が掛かりました。
      
      値の転記は、単体で動かします。
      ですが、値の転記の際にうまく動作しなくなりました。後程、新しいスレッドで質問させて頂きます。
      
      以下、完成した、変更した行や列、書式設定のみのコードです。動作時間は35秒でした。
      
      Sub 行列初期設定()
      
          Dim wsP As Worksheet, i As Long, wsL As Worksheet, PmaxRow As Long, n As Long
          
          Application.ScreenUpdating = False      '画面更新を停止
          
          Debug.Print Time & " - スタート"
          
          Set wsL = Worksheets("リスト")
          Set wsP = Worksheets("印刷用")
          
      '----------行挿入と行の高さ調整---------------------------------------------
          Debug.Print Time & " - 行調整開始"
          
          wsP.Range("A1:C6").Value = 1
              
          PmaxRow = wsP.Range("C1").End(xlDown).Row           '   最終行を取得
          wsP.Rows(1 & ":" & PmaxRow).EntireRow.RowHeight = 63.75        '   1行目から最終行までのの高さを63.75に変更
          
              For n = PmaxRow To 2 Step -1
                  wsP.Cells(n, "A").EntireRow.Insert          '   最終行から2行目まで、1行おきに行挿入
                  wsP.Cells(n, "A").EntireRow.RowHeight = 39.75   '   挿入した行の高さを39.75に変更
              Next
          wsP.Rows("1:12").Clear
          
          Debug.Print Time & " - 行調整終了"
      '---------------------------------------------------------------------------
          
      '----------列の幅調整---------------------------------------------
          Debug.Print Time & " - 列幅開始"
          
          i = wsL.Range("D4").Value \ 42      'リストシートのD4セルのリスト数から処理列数を変数iに代入
          i = i * 30
          
              For n = 1 To i Step 2
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 4.38         '   1行目から最終列まで、2列おきに列幅を変更
              Next
              
              For n = 2 To i Step 4
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 1.38         '   2列目から最終列まで、4列おきに列幅を変更
              Next
              
              For n = 4 To i Step 4
                  wsP.Cells(1, n).EntireColumn.ColumnWidth = 7.88         '   4列目から最終列まで、4列おきに列幅を変更
              Next
              
              
              For n = 28 To i Step 27                                                '   レイアウト設定のうえで、不必要な空白列を最終列まで削除
                  wsP.Cells(1, n).EntireColumn.Delete
              Next
          
          Debug.Print Time & " - 列幅終了"
      '---------------------------------------------------------------------------
          
      '----------セルの書式設定---------------------------------------------
          Debug.Print Time & " - セルの書式設定"
          
          i = wsL.Range("D4").Value \ 42      'リストシートのD4セルのリスト数から処理列数を変数iに代入
          i = i * 30
              wsP.Rows("1:11").Orientation = xlVertical      '   セルの書式設定 縦書き
               wsP.Range(wsP.Cells(1, 1), wsP.Cells(12, i)).ShrinkToFit = True        '    セルの書式設定 縮小して表示
              wsP.Rows("1:11").Font.Size = 9      '   フォントサイズ変更
              
              
          Debug.Print Time & " - 終了"
      '---------------------------------------------------------------------------
          
          Application.ScreenUpdating = True       '   画面更新を再開
             
      End Sub
      
      


      この記事にはVBAのコードが含まれています。

      <FONT COLOR='green'>緑の太文字→注釈
      <FONT COLOR='brown'>茶色の太文字→条件分岐
      <FONT COLOR='red'>赤の太文字→ループ
      <FONT COLOR='BLUE'>青の太文字→その他


      この記事にはVBAのコードが含まれています。

      <FONT COLOR='green'>緑の太文字→注釈
      <FONT COLOR='brown'>茶色の太文字→条件分岐
      <FONT COLOR='red'>赤の太文字→ループ
      <FONT COLOR='BLUE'>青の太文字→その他


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G