私の大きなスプレッドシートで問題が発生しています。大量の生データをデータ シートに取り込んでから、データ全体を何度も検索します。私が思いついた組み込み関数を使用する
=IF(ISNA(INDEX(Data!$L$7:$L$1100,MATCH(Data!$I$2&$B$199&$B29&Data!$J$5,Data!$K$7:$K$1100&Data!$J$7:$J$1100&Data!$I$7:$I$1100&Data!$N$7:$N$1100,0))),"0",INDEX(Data!$L$7:$L$1100,MATCH(Data!$I$2&$B$199&$B29&Data!$J$5,Data!$K$7:$K$1100&Data!$J$7:$J$1100&Data!$I$7:$I$1100&Data!$N$7:$N$1100,0)))
かわいくない!基本的に、同じルックアップを 2 回実行して 4 つの変数を取得し、それらを 4 つの連結された配列と照合してから、そのポイントを必要な値のインデックスとして使用します。
4 シートの各行に 8 つ (わずかに異なります)、各シートに 96 行あります。それらを編集するのは面倒です!
今月はデータセットが大幅に増加したため、外側のバンド (x1100) を超えました (教訓、大規模では決して十分ではありません)。残念ながら、関数の制限により、L:L やそのような便利なものは使用できません。
4 つの変数を入力して答えを返すことができるユーザー定義関数としてコードを書き直そうとしましたが、配列の結合に失敗しました。
物事を簡単にするために、元の関数名に上記の範囲を指定しました (さらに、より広い範囲の値を使用するようにそれらを拡張しました)。そのため、名前付き範囲のみを使用するようにすべての関数を書き直すことができましたが、それでもスタックしたままになります。コードを変更する必要がある場合。
これが私がこれまでに持っているものです:
Function Windows_Util(itma As String, env As String)
v = "Windows Server" & env & itma & ""
r = Concat(Range("Utilchassis"))
r = r & Concat(Range("Utilenv"))
r = r & Concat(Range("UtilITMA"))
r = r & Concat(Range("UtilOS"))
m = WorksheetFunction.Match(v, r, 0)
i = WorksheetFunction.Index(Range("Utilavg"), m)
If WorksheetFunction.IsNA(i) Then
Windows_Util = 0
Else
Windows_Util = i
End If
End Function
Function Concat(myRange As Range, Optional myDelimiter As String)
Dim r As Range
Application.Volatile
For Each r In myRange
If Len(r.Text) Then
Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text
End If
Next
End Function
これはうまくいきません!正しく連結されないだけでなく (各範囲が個別に連結され、行ごとに結合されません)、クエリの 1 つの型が気に入りません。(関数が実際に完了するため(構文エラーがないため)、これらのデバッグは簡単ではありません。そのため、使用できる組み込みのステップスルーはありません。
どんな助けでも大歓迎です。
うまくいけば、私がやろうとしていることを理解するのに十分な詳細を提供できました.
乾杯、
スティーブ