あなたの人生で一番ピンチに陥った瞬間は?

以下流れのとおり
1番マクロを実行
2番セル範囲に@がついてしまう
3番@が入らないように、関数を入力したいです

ご存じの方、ご指南お願いします

1
【コード※エラーにならずに、該当範囲のセルに関数が入力されます】
ws2.Range(Cells(6, 13), Cells(lastrow, 13)).Formula = "=INDEX(過去分依頼データ!$A$2:$K$10000,MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),1)"

2
セルM6から最終行まで以下が入力される
=INDEX(過去分依頼データ!$A$2:$K$10000,MATCH(C6&E6,@過去分依頼データ!$B$2:$B$10000&@過去分依頼データ!$C$2:$C$10000,0),1)

※セル範囲に@がついてしまう
@過去分依頼データ!$B$2:$B$10000&@過去分依頼データ!$C$2:$C$10000


3 正しくは@が無い状態で、セルに入力したい。すると関数は動きます
=INDEX(過去分依頼データ!$A$2:$K$10000,MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),1)

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (2件)

ご質問者の環境はバージョン365ということなので、気づいていないかもしれませんが、



=INDEX(過去分依頼データ!$A$2:$K$10000,MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),1)・・・①

という数式はスピル機能のないバージョンでは正しく機能しません。
スピル機能のないバージョンの場合

=INDEX(過去分依頼データ!$A$2:$K$10000,INDEX(MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),0),1)・・・②

のように記述するか、CTRL+SHIF+ENTERで確定して「配列数式」にするしかありません。
{=INDEX(過去分依頼データ!$A$2:$K$10000,MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),1)}
※配列数式にすると見かけ上、上記のように数式全体が波括弧で囲まれます。

VBAのFORMULAプロパティは動的配列をサポートしませんので、365の環境でFORMULAプロパティを使うと、「敢えてスピル機能を使用しない」と判断されてしまいます。

このため、おそらくVBAで数式を設定したセルには「#VALUE!」エラーが表示され、数式もご質問者のご説明のように、一部に@がついたものになってしまうと思います。

試しに、

ws2.Range(Cells(6, 13), Cells(lastrow, 13)).Formula = "=INDEX(過去分依頼データ!$A$2:$K$10000,INDEX(MATCH(C6&E6,過去分依頼データ!$B$2:$B$10000&過去分依頼データ!$C$2:$C$10000,0),0),1)"

というコードに変更して結果を見てください。

おそらく、数式頭部に「@」は付くものの「#VALUE!」エラーにはならず、数式の結果が表示されると思います。

スピル機能の有効なバージョンにおいて「@」はFORMULAからFORMULA2に変更すべき箇所を教えてくれる注意ポイント表示ということのようです。

従って、動的配列に対応させるにはFORMULA2プロパティを使うことになります。詳しくは以下のURLをご覧ください。
https://learn.microsoft.com/ja-jp/office/vba/exc …
    • good
    • 0

FormulaをFormula2にすれば大丈夫みたいです。

理由は全然わかりません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かにできました。
office365なのですが、スピルとか配列とかが関係あるみたいですね
理由はわかりません。

Formula2

お礼日時:2025/02/11 18:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報