この時点で、次のようなことを行い、範囲に式を適用でき、右側のセル参照は動的に更新されます。VBA:Range.Formulaの右辺の位置に配列インデックスを使用
Range("A1:A10").Formula = "=J2+M2"
これは私が求めていることではありません。 Range.Formula
の右側に配列インデックスを渡そうとしていますが、私が望む結果が得られません。手始めに、ここに私のコードと左側だけで正常に動作している(あなたが心xl.
が原因これはMS Accessから開始されることにある):
' Get the new amount of columns since new ones have been added
lastColumn = xl.Cells(1, xl.Columns.Count).End(xlToLeft).Column
' Create and array of the header names to quickly locate column number
cols = xl.Range(xl.Cells(1, 1), xl.Cells(1, lastColumn)).Value
' Apply the formulas
xl.Range(xl.Cells(2, xl.Match("FCode", cols, 0)), xl.Cells(lastRow, xl.Match("FCode", cols, 0))).Formula =
これくらいは正しい範囲に適用されます。右側に"ASD"
、"=J2+M2"
と入力すると、正しい範囲が更新されます。問題は、数式の一部として右側にxl.Match(...)
を使用する必要がある場合に発生します。例えば
:
"=ISBLANK(" & xl.Range(xl.Cells(2, xl.Match("NCode", cols, 0)), xl.Cells(2, xl.Match("NCode", cols, 0))) & ")"
は1004: Application-defined or object-defined error
返します。これは、適用範囲内で=ISBLANK(K2)
,=ISBLANK(K3)
,etc.
を返します。
=K2
,=K3
,etc
のような単純な参照は、セル内の値と等しくなります。K2
。たとえば、=14
とし、これを全体範囲に適用します。 K3
、K4
、etc
の値も返しません。これはそのために使用されている公式です:
"=" & xl.Range(xl.Cells(2, xl.Match("PCode", cols, 0)), xl.Cells(2, xl.Match("PCode", cols, 0)))
私は間違っていますか?これは、レポート間の変更を参照する必要がある列が、ヘッダー名が変わらないためです。 1つのレポートでは列M、別のレポートでは列Zになります。これまではFor Loops
を使用していましたが、速度が遅く、回避したいと考えています。
する必要がありますあなたのISBLANK()式をDebug.Print'と私はあなたがそれはあなたが期待するものではありませんがわかりますね。 –
なぜ変数を使用して異なるマッチ結果でそれらを設定しないのですか?次に、変数を式に差し込むだけで、コードのトラブルシューティングがはるかに簡単になります。 – teylyn