2017-01-03 4 views
0

私はマクロのこの部分のために書かれたコードを持っていないので、これを少し簡略化しようとします。私のマクロは、必要な期間の長さに応じてデータとコピーを複数回貼り付けます。次のステップでは、配列内の値を受け取り、データの隣の列に同じ量の値を貼り付けます。私は配列のどの値がそのセルにあるかに基づいて、次の列に式を貼り付ける方法を見つけようとしています。アレイからのセル値に基づいてセルに数式を貼り付けるにはどうすればよいですか?

列A-Q(データ)列R(配列から貼り付けられた値、合計17個の整数)列S(列Rの値に基づく式を貼り付けます)。このデータは150k〜250k行の間に広がっているので、できるだけ効率的なものが望まれます。ループが何年もかかるような気がする。

2次元配列ですか?または何らかのvlookupがvbaでコード化されていますか?ここで正しい方向にバンプを探してください。ありがとう。

答えて

0

あなたが正しく理解していれば、データ配列(A〜R列にあります)があり、列Sの式が直接依存しているのは列Rのみです。

このマクロはこのトリックを行う必要があります。数式を決定するために計算的に集中することを計画していないと仮定すると、非常に高速になります。私のコンピュータ上では、書かれたこれらの2つは、100万行で1〜2秒で実行されます。

マクロは、処理したいデータテーブルの部分を選択することを前提としています。最後の列として「列R」が含まれていることが重要です。書き直しが容易で、常に列Rを取るようにして、それが望む行為である場合には、行数を自ら把握します。

マクロ:

Sub MyMacro() 

Dim DataRange As Excel.Range 
Dim InputRange As Excel.Range 
Dim OutputRange As Excel.Range 

Dim InputData() As Variant 
Dim OutputData() As Variant 

Dim RowNumber As Long 
Dim ColumnNumber As Long 

Dim i As Long 

Set DataRange = Excel.Selection 

RowNumber = DataRange.Rows.Count 
ColumnNumber = DataRange.Columns.Count 

'this sets the input as the last column in the data range and 
'the output range exactly next to your array of inputs, 
'regardless of whether it ends on column R, S, or wherever 
Set InputRange = DataRange.Columns(ColumnNumber) 
Set OutputRange = InputRange.Offset(0, 1) 

'this stores the values from the input range into an array, 
'and initializes the output array (it will be a 2D array - (Row, Column)  
InputData = InputRange.Value 
OutputData = OutputRange.Value 

'you populate the value array inside VBA and only output to excel once - 
'this is MUCH faster than interating through the cells directly 
For i = 1 To RowNumber 
    OutputData(i, 1) = FunctionThatReturnsFormulasFromInputs(InputData(i, 1)) 
Next i 

OutputRange.Formula = OutputData 

End Sub 

例関数:

Function FunctionThatReturnsFormulasFromInputs(InputValue As Variant) As String 

Select Case InputValue 
    Case 1 
     FunctionThatReturnsFormulasFromInputs = "aaa" 
    Case Else 
     FunctionThatReturnsFormulasFromInputs = "bbb" 
End Select 

End Function 
関連する問題