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

ワイメア

配列を作成し、配列に値を格納してから、配列の値をVBAのスプレッドシートに書き込もうとしています。このコードは私のコンピューターで実行するのに1時間以上かかり、配列はコードを本当にスピードアップできると思います。

ただし、配列の作成、コンボボックスからの配列の入力、最後に配列の値のワークシートへの書き込みについてサポートが必要です。

  1. n次元配列を作成する
  2. n次元配列にComboBoxの値を入力します。
  3. すべてのComboBoxを繰り返し処理します。
  4. 配列に値を格納します
  5. 配列からスプレッドシートに値を書き込む

    サブWantToUseArray()

    Dim k As Integer
    Dim l As Integer
    
    Sheets("Test").ComboBox1.ListIndex = 0
    
    For l = 0 To 25
    Sheets("Test").ComboBox3.ListIndex = l
    
    Sheets("Test").ComboBox2.ListIndex = 0
    
    For n = 0 To 25
    Sheets("Test").ComboBox4.ListIndex = n
    
    Sheets("Points").Select
    
    Dim LR As Long
    LR = Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    Cells(LR, "A").Value = Sheets("Test").Range("G5").Value
    Cells(LR, "B").Value = Sheets("Test").Range("G6").Value
    
    Cells(LR, "C").Value = Sheets("Test").Range("O5").Value
    Cells(LR, "D").Value = Sheets("Test").Range("O6").Value
    
    Cells(LR, "E").Value = Sheets("Test").Range("X5").Value
    Cells(LR, "F").Value = Sheets("Test").Range("X6").Value
    
    Cells(LR, "G").Value = Sheets("Test").Range("G6").Value + Sheets("Test").Range("X6").Value
    
    Cells(LR, "H").Value = Sheets("Test").Range("X6").Value + Sheets("Test").Range("G6").Value
    
    Cells(LR, "I").Value = Sheets("Test").Range("K40").Value
    Cells(LR, "J").Value = Sheets("Test").Range("K41").Value
    
    Cells(LR, "K").Value = Sheets("Test").Range("K51").Value
    Cells(LR, "L").Value = Sheets("Test").Range("K52").Value
    
    
    
    Next
    Next
    
    End Sub
    
learnAsWeGo

このコードはcombobox、指定worksheetarrayれたのそれぞれをcomobox調べ、リストのリスト値を含むを生成しから、すべてのコンテンツをその最初の列に出力します。myArrayには単一の次元しかありません。その内容は他arraysです。comoboxesリストの長さが異なる場合は、ajagged arrayが作成されます。

を視覚化するarraysLocals Windowは、メニューバーに表示してからを選択してを有効にしますLocals Windowコードの下の写真を参照してください。

Option Explicit
Sub main()
Dim ws                                                 As Worksheet
Dim mainArray()                                          As Variant
Dim ctrl                                               As Object
Dim numComboBoxes                                      As Long

    Set ws = ActiveSheet

    numComboBoxes = GetNumberOfComboBoxesInSheet(ws)
    mainArray = GenerateJaggedArrayComboBoxListValues(ws, numComboBoxes)
    PrintArray ws, mainArray
End Sub

Function GetNumberOfComboBoxesInSheet(ByRef ws As Worksheet) As Long
Dim ctrl As Object
    For Each ctrl In ws.OLEObjects
        If TypeName(ctrl.Object) = "ComboBox" Then
            GetNumberOfComboBoxesInSheet = GetNumberOfComboBoxesInSheet + 1
        End If
    Next ctrl
End Function

Function GenerateJaggedArrayComboBoxListValues(ByRef ws As Worksheet, ByVal numComboBoxes As Long) As Variant()
Dim ctrl                                                As Object
Dim tempPrimaryArray()                                  As Variant
Dim tempArray()                                         As Variant
Dim x                                                   As Long
Dim y                                                   As Long
Dim listNum                                             As Long

   ReDim tempPrimaryArray(0 To numComboBoxes - 1)
    x = 0
    For Each ctrl In ws.OLEObjects
        If TypeName(ctrl.Object) = "ComboBox" Then
            y = 0
            For listNum = 0 To ctrl.Object.ListCount - 1
                ReDim Preserve tempArray(0, 0 To y)
                tempArray(0, y) = ctrl.Object.List(listNum, 0)
                y = y + 1
            Next listNum
            tempPrimaryArray(x) = tempArray
            Erase tempArray
            x = x + 1
        End If
    Next ctrl
GenerateJaggedArrayComboBoxListValues = tempPrimaryArray()
End Function

Sub PrintArray(ByRef ws As Worksheet, ByRef mainArray As Variant)
Dim counter                                             As Long
Dim x                                                   As Long
Dim y                                                   As Long
Dim tempArray()                                         As Variant

    counter = 1
    For x = LBound(mainArray, 1) To UBound(mainArray, 1)
        tempArray = mainArray(x)
        For y = LBound(tempArray, 2) To UBound(tempArray, 2)
            ws.Range("A" & counter) = tempArray(0, y)
            counter = counter + 1
        Next y
    Next x
End Sub

ここに画像の説明を入力してください

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Numba を使用して次のコードを高速化する

分類Dev

libclangを使用してC ++コードの解析を高速化する方法は?

分類Dev

VBAコードを高速化する

分類Dev

VBAコードを高速化する

分類Dev

コードを高速化する簡単な方法を探しています

分類Dev

Rcppを使用してRコードを高速化できますか?

分類Dev

numbaを使用して次のコードを高速化するにはどうすればよいですか?

分類Dev

OpenMPを使用してコードC ++を高速化するにはどうすればよいですか?

分類Dev

複数の IF ステートメントを使用してコードを高速化する方法

分類Dev

FFMPEG | ビデオをエンコードして高速化する方法

分類Dev

FFMPEG | ビデオをエンコードして高速化する方法

分類Dev

シンプソンの法則を使用して2DgpuArray行列を統合するコードの高速化

分類Dev

配列値を使用してgrepを実行し、高速化します

分類Dev

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

分類Dev

numbaを使用してforループを高速化する

分類Dev

numpy配列を使用して機能を高速化

分類Dev

cythonを使用してnumpy配列でクラスを高速化

分類Dev

木を使用して、周期境界条件を持つ3D配列での最近傍探索を高速化する

分類Dev

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

分類Dev

コードを最適化してセットアップを高速化する方法

分類Dev

コードを高速化してみてください。

分類Dev

照合する列を使用してデータから行を抽出するマクロを高速化

分類Dev

ccacheを使用してaospのコンパイルを高速化する方法は?

分類Dev

配列を使用してコードを簡略化する

分類Dev

スレッドを使用してプロセスを高速化する

分類Dev

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

分類Dev

numpyを使用して重心を計算するコードを高速化するにはどうすればよいですか?

分類Dev

ブロードキャストを使用してこのコードを高速化するにはどうすればよいですか?

分類Dev

C ++コードを高速化する方法:CFileを使用してカメラデータから.csvファイルを作成する

Related 関連記事

  1. 1

    Numba を使用して次のコードを高速化する

  2. 2

    libclangを使用してC ++コードの解析を高速化する方法は?

  3. 3

    VBAコードを高速化する

  4. 4

    VBAコードを高速化する

  5. 5

    コードを高速化する簡単な方法を探しています

  6. 6

    Rcppを使用してRコードを高速化できますか?

  7. 7

    numbaを使用して次のコードを高速化するにはどうすればよいですか?

  8. 8

    OpenMPを使用してコードC ++を高速化するにはどうすればよいですか?

  9. 9

    複数の IF ステートメントを使用してコードを高速化する方法

  10. 10

    FFMPEG | ビデオをエンコードして高速化する方法

  11. 11

    FFMPEG | ビデオをエンコードして高速化する方法

  12. 12

    シンプソンの法則を使用して2DgpuArray行列を統合するコードの高速化

  13. 13

    配列値を使用してgrepを実行し、高速化します

  14. 14

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

  15. 15

    numbaを使用してforループを高速化する

  16. 16

    numpy配列を使用して機能を高速化

  17. 17

    cythonを使用してnumpy配列でクラスを高速化

  18. 18

    木を使用して、周期境界条件を持つ3D配列での最近傍探索を高速化する

  19. 19

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

  20. 20

    コードを最適化してセットアップを高速化する方法

  21. 21

    コードを高速化してみてください。

  22. 22

    照合する列を使用してデータから行を抽出するマクロを高速化

  23. 23

    ccacheを使用してaospのコンパイルを高速化する方法は?

  24. 24

    配列を使用してコードを簡略化する

  25. 25

    スレッドを使用してプロセスを高速化する

  26. 26

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

  27. 27

    numpyを使用して重心を計算するコードを高速化するにはどうすればよいですか?

  28. 28

    ブロードキャストを使用してこのコードを高速化するにはどうすればよいですか?

  29. 29

    C ++コードを高速化する方法:CFileを使用してカメラデータから.csvファイルを作成する

ホットタグ

アーカイブ