希望のVBAモジュールを書く方法をフィードバックしたいと思います。 私のファイルには、新しいデータが外部ソース(Bloomberg)から収集されるときに値が変化する複数の列があります。次に、これらの範囲内の値の1つが、常に同じ($ A $ 1と$ A $ 2)の2つのセルの積より大きい場合は、メッセージを取得したいと思います。さらに、私は複数のシートを持っているので、モジュールがすべてのシートに適用されていることを確認したいと思います。私は、インターネットを探るように私は答えが「交差が含まれる同様の質問を参照してください、しかしVBAモジュール:複数の範囲に "交差"機能を使用する
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Sh
Set r1 = Sh.Range("N1:N50")
Set r2 = Sh.Range("AA1:AA50")
Set r3 = Sh.Range("AN1:AN50")
Set r4 = Sh.Range("BA1:BA50")
Set r5 = Sh.Range("BN1:BN50")
Set r6 = Sh.Range("CA1:CA50")
Set myMultipleRange = Union(r1, r2, r3, r4, r5, r6)
Dim myMultipleRange as Range
Dim Cell as Range
For Each Cell in myMultipleRange.Cells
With Cell
If .Value2 > 0.1 * $A$1 * $A$2 Then
MsgBox ("Ticker: " & Sh.Name & ", Today's volume in the " & Cells(row,column -1) " & " serie is " & Cells" & " contracts")
:
最初の選択肢:
は、インターネットとのStackOverflowを検索した後、私は二つの選択肢を思い付きました"-関数。私は、2つ以上の範囲の交差を表すRangeオブジェクトを返すことを理解しています。しかし、モジュールとの違いは何ですか?どの方法がより速いのですか?私は私のファイルが巨大なので、最速のモジュールを欲しい!
私はアップセット交差機能
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
With Sh
Dim r1, r2, r3, r4, r5, r6, my MultipleRange as Range
Set r1 = Sh.Range("N1:N50")
Set r2 = Sh.Range("AA1:AA50")
Set r3 = Sh.Range("AN1:AN50")
Set r4 = Sh.Range("BA1:BA50")
Set r5 = Sh.Range("BN1:BN50")
Set r6 = Sh.Range("CA1:CA50")
Set myMultipleRange = Union(r1, r2, r3, r4, r5, r6)
If Target.Value > (0.1 * sh.Range("A1").Value * sh.Range("A2").Value
If Not Intersect(Target, myMultipleRange) Is Nothing Then
MsgBox ("Ticker: " & Sh.Name & ", Today's volume in the " & Cells(row,column -1) " & " serie is " & Cells" & " contracts
と第二のモジュールを記述しようとしたあなたが好む、あなたは改善の余地を参照していますか?
大変助かりました!
のみ最初のアプローチは動作します。しかし、これは最速の方法ではありません。最速のアプローチは配列です。その後、すべての可能性のある "一致"が検索され、メッセージボックスに表示されます(複数の場合は一度にすべて表示されます)。私はあなたが作業用のサブを書いてから、[Code Review](http://codereview.stackexchange.com/)に投稿して改善することをお勧めします。 – Ralph
あなたの返信ありがとう!エラーのある方向に私を押し込むことができますか?そして、理想的には、それぞれの発生に対してメッセージボックス通知をしたいと思います。この場合、私はあなたの助言に従うべきですか?敬具。 – HJA24