2017-12-27 9 views
-2

以前は、テーブル内の列全体について、インデックス&の一致式を1つのシートから別のシートに実行するExcel VBAコードがあります。コード例以下のように:配列式をVBA経由でExcelに挿入するには?

With Me.Range("table1[Description]") 
    .Formula = "=IFerror(INDEX(table2,MATCH(B4,table2[Asset No],0),2),"""")" 
    .Value = .Value 
End With 

今、私は私が式をコピーしてシート状に配列機能を追加し、他の変更と一緒に配列して、古い数式を交換したいと思います。

Sub refresh() 

With Me.Range("table1[Last Service Date]") 
    .FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)" 
    .Value = .Value 
End With 

End Sub 

しかし、私はコードをテストしようとすると、私はエラーメッセージ私は配列数式のために私のコードに変更する必要がある400 何かを得ておきますか?

+0

もちろん、「選択」を使用しているため、私が指しているセルであれば*です。 – JohnyL

+0

oops ..申し訳ありません、私の古いテストコードを偶然使用しました。私は適切なもので編集します。 – hjh93

+0

あなたは[前の質問] [1](あなたのフォローアップの質問を理解しています)を改言しましたが、これ以上の情報が必要です。エラーメッセージの残りの部分はどのような行ですか? 'Me.Range(" table1 [Last Service Date] ")'は有効な範囲ですか? .Formula = "1 + 1" 'のような"普通の "数式を入れようとするとどうなりますか?また、 '.Value = .Value'の目的は何ですか? – ashleedawg

答えて

0

コードでMeを使用するポイントは何ですか?シートモジュールにそのコードを配置しましたか?このコードをModule1のような標準モジュールに移動し、Meキーワードを適切なシート参照に置き換えることをお勧めします。それ以外の場合は、そのコードをシートモジュールに配置することをお勧めします。

また、配列式を目的の列のテーブルの最初のセルに配置し、データがExcelテーブルとしてフォーマットされるため、列全体が自動的に数式で埋められます。そうでない場合、オートフィルプロパティを使用して数式を行の下に塗りつぶすことができます。

これで問題が解決するかどうかを確認してください。 答えは、VBAを使用して配置しようとしている数式がシートに手動で配置されているとうまくいくと仮定しています。

With Me.Range("table1[Last Service Date]").Cells(1) 
    .FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)" 
    .Value = .Value 
End With 
+0

実際には、配列式の対象範囲全体を指定する方が、最初のセルを指定してからコピーする方が効率的です。 – Variatus

+0

私はそれがうまくいくとは思わない。 VBAを使って配列式を全範囲に実装しようと試みたことがありますか? – sktneer

+0

はい、私はしました。 Excel 2010. 'ArrRng.FormulaArray =" = MINVERSE( "&DataRange&") "' – Variatus

関連する問題