ExcelVBAでループを高速化する方法が必要

シャシャンク・バネルジー

私は建設会社で働いています。私は、特定のタイプの材料がサイトの特定のフラット番号に供給された最新の日付を取得できる在庫部門のマクロを作成しています。

私が持っているコードは仕事をしていますが、すべての結果を計算するのに非常に時間がかかります。誰かがこれをさらに速くする方法を教えてもらえますか?

コードは次のとおりです。

Sub FillTopSheet()
'Designing a loop to move through the fill data on Top Sheet
Application.ScreenUpdating = False

'Declaring variables for counts
Dim Flat_Row_Num As Long
Dim Tower_Col_Num As Long
Dim InventoryWs As Worksheet

'Debug.Print Application.Workbooks("The Crest DLF Project-In-Out Inventory Data.xlsx").Worksheets("Material-Out").Name
Set InventoryWs = Application.Workbooks("The Crest DLF Project-In-Out Inventory Data.xlsx").Worksheets("Material-Out")

Dim Lookup_Start_Row As Long
Dim Lookup_End_Row As Long

'Lookup_Start_Row = 4
'
'Select Case Application.ThisWorkbook.ActiveSheet.Name
'    Case "Kitchen Carcass"
'        Do Until InventoryWs.Cells(Lookup_Start_Row, 2).Value = "Kitchen Carcass"
'                Lookup_Start_Row = Lookup_Start_Row + 1
'        Loop
'
'        Lookup_End_Row = Lookup_Start_Row
'
'        Do While InventoryWs.Cells(Lookup_End_Row, 2).Value = "Kitchen Carcass"
'        Lookup_End_Row = Lookup_End_Row + 1
'
'        Loop
'
'        Lookup_End_Row = Lookup_End_Row - 1
'
'End Select

Debug.Print Lookup_Start_Row
Debug.Print Lookup_End_Row
Lookup_Start_Row = 6162
Lookup_End_Row = 14754

Flat_Row_Num = 5
Tower_Col_Num = 5

Do Until Tower_Col_Num > 13

    Do Until Flat_Row_Num > 154
        If Application.ThisWorkbook.ActiveSheet.Cells(Flat_Row_Num, Tower_Col_Num - 1).Value <> "" Then
            Do Until Lookup_Start_Row = Lookup_End_Row
                If Application.ThisWorkbook.ActiveSheet.Cells(Flat_Row_Num, Tower_Col_Num - 1).Value = _
                InventoryWs.Cells(Lookup_Start_Row, 8).Value Then
                    Application.ThisWorkbook.ActiveSheet.Cells(Flat_Row_Num, Tower_Col_Num).Value = _
                    InventoryWs.Cells(Lookup_Start_Row, 6).Value
                    GoTo RowReset
                Else
                    Application.ThisWorkbook.ActiveSheet.Cells(Flat_Row_Num, Tower_Col_Num).Value = "NA"
                End If

                Lookup_Start_Row = Lookup_Start_Row + 1
            Loop
            Lookup_Start_Row = 6162
RowReset:
Lookup_Start_Row = 6162
        End If
        Flat_Row_Num = Flat_Row_Num + 1
    Loop
Flat_Row_Num = 5
Tower_Col_Num = Tower_Col_Num + 2
Loop

Application.ScreenUpdating = True


End Sub
スフィンクス

このようなものである可能性がありますが、インデックス(i、j、k)が混同されている可能性があります。入力と必要な出力(スクリーンショットなど)を投稿できれば、はるかに簡単になります

Sub FillTopSheet()

    'Declaring variables for counts
    Dim Flat_Row_Num As Long
    Dim Tower_Col_Num As Long
    Dim InventoryWs As Worksheet, Ws As Worksheet
    Dim ArrLookUp() As Variant, ArrData() As Variant
    Dim Lookup_Start_Row As Long, Lookup_End_Row As Long, i As Long, j As Long, k As Long
    Dim FlatNo As String

    'Designing a loop to move through the fill data on Top Sheet
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    'Debug.Print Application.Workbooks("The Crest DLF Project-In-Out Inventory Data.xlsx").Worksheets("Material-Out").Name
    Set InventoryWs = Application.Workbooks("The Crest DLF Project-In-Out Inventory Data.xlsx").Worksheets("Material-Out")

    Debug.Print Lookup_Start_Row
    Debug.Print Lookup_End_Row

    Lookup_Start_Row = 6162
    Lookup_End_Row = 14754

    Flat_Row_Num = 5
    Tower_Col_Num = 2 'Start in Tower A "Flats No. column

    With InventoryWs
        ArrLookUp = .Range(.Cells(Lookup_Start_Row, 6), .Cells(Lookup_End_Row, 8))
    End With

    With Ws
        ArrData = .Range(.Cells(Flat_Row_Num, Tower_Col_Num), .Cells(154, 13))
    End With

    For i = LBound(ArrData, 2) To UBound(ArrData, 2) Step 2
        For j = LBound(ArrData) To UBound(ArrData)
            'loop through "towers" Array
            FlatNo = ArrData(j, i) 'take one flat no
            If FlatNo <> "" Then
                For k = LBound(ArrLookUp) To UBound(ArrLookUp)
                    'look for this flat no in other array
                    If FlatNo = ArrLookUp(k, 3) Then
                        'first match = take Date from other array
                        'dates sorted descending
                        ArrData(j, i + 1) = ArrLookUp(k, 1)
                        'found what was looking for, get out of loop
                        Exit For
                    End If
                Next k
            End If
        Next j
    Next i

    With Ws
        'range must be same as when you set the array earlier. But if that range contains some formulas they'll be overwriten with values
        'in that case you can loop through array and take out only dates
        .Range(.Cells(Flat_Row_Num, Tower_Col_Num), .Cells(154, 13)) = ArrData
    End With

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

編集
これはまだあなたの範囲に合うようにいくつかの調整が必要かもしれません範囲を
チェックしてくださいArrLookUp = .Range(.Cells(Lookup_Start_Row, 6), .Cells(Lookup_End_Row, 8))そしてArrLookUp = .Range(.Cells(Lookup_Start_Row, 6), .Cells(Lookup_End_Row, 8))
それは「タワー」を取り、「フラット番号」を探します。他のシートで。最初の試合日は他のシートから取得されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

numpyでforループを高速化する方法

分類Dev

ループ内でこの MATLAB コードを高速化する方法は?

分類Dev

C#でforループを高速化する方法はありますか?

分類Dev

このループコードを高速化する方法は?

分類Dev

Rcppを使用してforループを高速化する方法は?

分類Dev

Javascript:Forループは非常に遅いですが、それを高速化する方法はありますか?

分類Dev

forループでのAPI呼び出しを高速化する方法

分類Dev

Pythonでネストされたforループを高速化する方法

分類Dev

Python DataFrameでネストされたループを高速化する方法は?

分類Dev

PHPでループ内の単一クエリを高速化する方法は?

分類Dev

Python関数の「for」ループを高速化する方法は?

分類Dev

Rループを高速化する方法

分類Dev

forループを高速化する方法は?

分類Dev

MATLAB for ループを高速化する方法

分類Dev

このPyMongoクエリ/ループを高速化する方法

分類Dev

Rで関数内のforループを高速化する

分類Dev

PowerShellスクリプトを高速化する必要がある

分類Dev

配列を使用してコードを高速化するExcelVBA

分類Dev

Androidでforループを高速化

分類Dev

巨大なファイルのRでのループ実行プロセスを高速化する方法

分類Dev

データテーブルで逆行を見つけるプロセスを高速化する方法

分類Dev

forループからRコードを高速化する良い方法

分類Dev

C ++の不要なループがプログラムを高速化するのはなぜですか?

分類Dev

C ++の不要なループがプログラムを高速化するのはなぜですか?

分類Dev

Pythonでこのループを高速化することは可能ですか?

分類Dev

AndroidStudioでGradleビルドプロセスを高速化する方法

分類Dev

WinFormsでオートコンプリートを高速化する方法

分類Dev

単純なパンダのfor / ifループを高速化する方法は?

分類Dev

groupbymultiindexのネストされたループを高速化する方法

Related 関連記事

  1. 1

    numpyでforループを高速化する方法

  2. 2

    ループ内でこの MATLAB コードを高速化する方法は?

  3. 3

    C#でforループを高速化する方法はありますか?

  4. 4

    このループコードを高速化する方法は?

  5. 5

    Rcppを使用してforループを高速化する方法は?

  6. 6

    Javascript:Forループは非常に遅いですが、それを高速化する方法はありますか?

  7. 7

    forループでのAPI呼び出しを高速化する方法

  8. 8

    Pythonでネストされたforループを高速化する方法

  9. 9

    Python DataFrameでネストされたループを高速化する方法は?

  10. 10

    PHPでループ内の単一クエリを高速化する方法は?

  11. 11

    Python関数の「for」ループを高速化する方法は?

  12. 12

    Rループを高速化する方法

  13. 13

    forループを高速化する方法は?

  14. 14

    MATLAB for ループを高速化する方法

  15. 15

    このPyMongoクエリ/ループを高速化する方法

  16. 16

    Rで関数内のforループを高速化する

  17. 17

    PowerShellスクリプトを高速化する必要がある

  18. 18

    配列を使用してコードを高速化するExcelVBA

  19. 19

    Androidでforループを高速化

  20. 20

    巨大なファイルのRでのループ実行プロセスを高速化する方法

  21. 21

    データテーブルで逆行を見つけるプロセスを高速化する方法

  22. 22

    forループからRコードを高速化する良い方法

  23. 23

    C ++の不要なループがプログラムを高速化するのはなぜですか?

  24. 24

    C ++の不要なループがプログラムを高速化するのはなぜですか?

  25. 25

    Pythonでこのループを高速化することは可能ですか?

  26. 26

    AndroidStudioでGradleビルドプロセスを高速化する方法

  27. 27

    WinFormsでオートコンプリートを高速化する方法

  28. 28

    単純なパンダのfor / ifループを高速化する方法は?

  29. 29

    groupbymultiindexのネストされたループを高速化する方法

ホットタグ

アーカイブ