Excel VBA質問箱 IV

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

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


16844 / 76732 ←次へ | 前へ→

【65351】処理速度について
質問  かな  - 10/5/14(金) 8:56 -

引用なし
パスワード
   今、在庫と仕掛品の引当表を作っています。
現在のコードでは、とてもじゃないけど、莫大な時間を要してしまって、
使いものにならない状態です。
なんとか、処理が高速化するようにコードを変えたいのですが、
いまいち、良い方法が思いつきません

[シート1] 部品の在庫数と仕掛数の一覧です
部品名  在庫数  仕掛数
AAA     10    10
BBB     15    12
CCC     13    20
DDD     20    16
EEE     10     7
FFF     40    20

上記のようなデータが8000件ほどあります

[シート2]から10シートほどに渡って、総計で6万件のデータが下記のように
あります

列数は、100列程度あります
部品名 必要数 A車  B車  C車  D車  E車…以降、まだ続きます
AAA    2  ●   ●   ●   ● ←セルを引当可能なら塗りつぶす
CCC    2      ●   ●   ● 
AAA    2         ●   ●
BBB    4  ●   ●         
AAA    3      ●
EEE    7         ●      ●



行数は各シート毎でバラバラですが、多いシートで38000件あります
引当の順としては、A車のAAA、A車のCCC、A車のAAA、A車のBBB、A車のAAA、A車のEEE、B車のAAA…、といったように、列毎から順に見ていきます
これを、A車から、順に在庫と仕掛を引当していくのですが、
在庫引当可能なら、緑色に塗りつぶす
在庫が不足してる場合は、黄色に塗りつぶす
在庫が引当できなくて、仕掛引当可能ならピンクに塗りつぶす 

今のコードはこんな感じです

Dim TARGET() As Variant
Dim MyItem As String
Dim 必要数 As Long
Dim 最終C As Long
Dim 最終R As Long

Dim st As Single
st = Timer()

Sheets("シート1").Activate

i = 0

ReDim TARGET(Range("A" & Rows.Count).End(xlUp).Row, 2)
For i = 0 To Range("A" & Rows.Count).End(xlUp).Row
 If i > 3 Then
’在庫表のデータを全て配列に格納します
  TARGET(i - 4, 0) = Range("A" & i).Value
  TARGET(i - 4, 1) = Range("B" & i).Value
  TARGET(i - 4, 2) = Range("C" & i).Value
 End If
Next i
  
'*********************************
'全シートに在庫仕掛を引当する
'在庫=緑、仕掛=ピンク、不足=黄色
'*********************************
最終C = Sheets(2).Cells(1, Columns.Count).End(xlToLeft).Column

For r = 0 To UBound(TARGET)
  For x = 3 To 最終C  
    For y = 2 To Sheets.Count
    
      Worksheets(y).Activate

      最終R = Range("A" & Rows.Count).End(xlUp).Row
     
      For i = 2 To 最終R
       If TARGET(r, 0) = Cells(i, "A").Value Then      
         MyItem = Cells(i, 1).Value 'A列
         必要数 = Cells(i, 2).Value 'B列
        'もし、空白でなかったら、        
        If Cells(i, x).Value <> "" then   
        '必要数が在庫より少ない場合は緑(引当)
            If 必要数 <= TARGET(r, 1) Then
              Cells(i, x).Interior.ColorIndex = 4
              TARGET(r, 1) = TARGET(r, 1) - 必要数
        '必要数が在庫より多くて、在庫がゼロより多い場合は数不足の為、黄色
            ElseIf TARGET(r, 1) <= 必要数 And TARGET(r, 1) > 0 Then
              Cells(i, x).Interior.ColorIndex = 6
              TARGET(r, 1) = 必要数 - TARGET(r, 1)
              TARGET(r, 2) = TARGET(r, 2) - TARGET(r, 1)
              TARGET(r, 1) = 0 '完成引当の終了
        '必要数が仕掛より少ない場合はピンク(引当)
            ElseIf TARGET(r, 1) = 0 Then
              If 必要数 <= TARGET(r, 2) Then
               Cells(i, x).Interior.ColorIndex = 38
               TARGET(r, 2) = TARGET(r, 2) - 必要数
        '必要数が仕掛より多く、仕掛がゼロより多かったら数不足の為、黄色
              ElseIf TARGET(r, 2) <= 必要数 And TARGET(r, 2) > 0 Then
               Cells(i, x).Interior.ColorIndex = 6
               TARGET(r, 2) = 0
        '仕掛がゼロだったらループ抜ける
              ElseIf TARGET(r, 2) = 0 Then GoTo 抜ける
              End If
            End If
           End If
          'End If
        Else
          GoTo 抜ける
        End If
      Next i
     Next y
  Next x
抜ける:
  
Next r
           
End Sub

分かりにくいかもしれませんが、どうか良きアドバイスがありましたらお願いします
0 hits

【65351】処理速度について かな 10/5/14(金) 8:56 質問
【65352】Re:処理速度について Hirofumi 10/5/14(金) 12:51 発言
【65353】Re:処理速度について かな 10/5/14(金) 13:24 発言
【65355】Re:処理速度について neptune 10/5/14(金) 14:36 発言
【65380】Re:処理速度について かな 10/5/17(月) 8:57 お礼
【65360】Re:処理速度について Hirofumi 10/5/14(金) 16:46 回答
【65381】Re:処理速度について かな 10/5/17(月) 8:58 お礼
【65361】Re:処理速度について よろずや 10/5/14(金) 18:34 発言
【65382】Re:処理速度について かな 10/5/17(月) 9:02 お礼
【65371】Re:処理速度について H. C. Shinopy 10/5/15(土) 23:24 回答
【65383】Re:処理速度について かな 10/5/17(月) 9:07 お礼
【65394】Re:処理速度について かな 10/5/18(火) 8:40 質問
【65397】Re:処理速度について Hirofumi 10/5/18(火) 11:01 発言
【65413】Re:処理速度について かな 10/5/19(水) 12:30 お礼
【65416】Re:処理速度について Hirofumi 10/5/19(水) 13:31 発言
【65435】Re:処理速度について かな 10/5/20(木) 14:03 発言
【65439】Re:処理速度について Hirofumi 10/5/20(木) 15:49 回答
【65411】Re:処理速度について mura 10/5/19(水) 10:34 回答
【65414】Re:処理速度について かな 10/5/19(水) 12:32 お礼

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