• ベストアンサー

【EXECEL】 配列定数の使い方について

配列定数が入力されたセルを、配列定数として、他のセルに挿入した数式から参照することは可能でしょうか? もし、可能だとすれば、どのようにすれば良いのか教えて下さい。 例えば、今やろうとしていることは以下のとおりです。 A1セルに、={1,2,3,4,5,6,7,8,9,10}、と入力し、 A2セルに、=AVERAGE(A1)、と入力する。 これにより、A2セルに平均値5.5を表示させたい。 このままやっても、A1セル参照値は1となるのか、 表示される平均値は、1になります。 参照の仕方が異なるのでしょうか...

  • brio
  • お礼率67% (63/93)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 二つの方法があるかと思います。 1つは、以下のようにユーザー定義関数で行うことです。 '<標準モジュール> Function myAverage(myRange As Range)  myAverage = WorksheetFunction.Average(Evaluate(myRange.FormulaLocal())) End Function もう1つは、マクロ関数を使う方法です。 A1 に={1,2,3,4,5,6,7,8,9,10} があるとします。 A2 にセルポインターを起き、 挿入-名前-定義 名前(W) ARR (任意) 'Array=配列の略 参照範囲(R) =EVALUATE(GET.FORMULA(!A1)) +NOW()*0 (相対参照になりますから、今回は、セルは隣り合った上下の関係です) A2 に =AVERAGE(ARR) とします。 注意:マクロ関数を利用した名前定義は、シートやブックをまたがってコピーしては絶対にいけません。できれば、シートを限定してお使いください。 私個人としては、もう少し式の入力を工夫した使い方をしたほうがよいと思います。できれば、最初から、VBAで、パラメータ配列で処理したほうが、安全かつ便利だと思います。パラメータ配列というのは、Choose()関数の第二引数などのタイプを指します。

brio
質問者

お礼

ありがとうございました。がんばってみます。

その他の回答 (3)

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.3

いわばExcelのシート自体2次元の配列ですよねえ。 今やろうとしていることを、シートにうまく落とす方向で考えた方が解決は早いと思いますが・・・ あとはマクロを使うぐらいでしょうか。

brio
質問者

補足

どのマクロを使えば、単一セルに入力した配列定数の各要素が参照できるようになるのでしょうか?

noname#176215
noname#176215
回答No.2

名前を定義付けすればできるんじゃないですか? [挿入]→[名前]→[定義] 名__前:適当 参照範囲:={1,2,3,4,5,6,7,8,9,10} →[OK] =AVERAGE(適当) こんな感じです。

brio
質問者

補足

過去に一度試みたことがありますが、結果は同じでした。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

配列定数をA1セルに定義しても1セル分の値しかありませんので配列になりません。 因みに=AVERAGE({1,2,3,4,5,6,7,8,9,10})なら期待値がでますが如何でしょうか。

brio
質問者

補足

参照内容を動的に変更させたいので、そうすると範囲指定でないとできないということになるのですね。 EXCEL以外だと期待した処理が可能なツールがあるのでしょうか?

関連するQ&A

  • エクセルの配列数式、配列定数について教えてください

    エクセルに配列数式、配列定数というものがあることを最近知りました。 エクセルのA1セルに={1,3,3}と入力し、A2セルに=COUNTIF(A1,{1,2,3})と入力すると、 A2セルに1と表示されます。A2には1以外の数字が含まれることは何となく理解できるのですが、どのような計算結果が算出されるのかが理解できません。また、A2の1以外の計算結果を表示させる方法がわかりません。 同様に、A1セルに={1,2,2,3}と入力し、A2セルに=COUNTIF(A1,{1,2,3})と入力した場合(これもA2セルに1と表示されます)のA2の計算結果と表示方法がわかりません。 ご教示をよろしくお願いいたします。

  • 配列数式での平均値

    こんにちは。 今、エクセルで配列数式を使って平均値を出す作業をしています。 列Aには男女別を示す1、2が入力されており、 列B以降にはいろいろなデータが入っています。 それらデータにおける男女別の平均値を出したいので 配列数式を使って求めるまでは良かったのですが、 どうやら、列B以降の空欄になっているセルも 0として計算されてしまっているようなのです。 (普通のaverageと同様に)空欄を数に入れないで計算させるには どのようにしたらよいのでしょうか? ちなみに今使っている配列数式は、 {=average(if(A1:A10=1,B:B10,""))} です。

  • ExcelVBAの配列変数で一括でセルに数式を挿入する方法

    ExcelVBAの配列変数で一括でセルに数式を挿入する方法 ExcelVBAでTEST1シートを参照して、TEST2シートに数式を貼り付けたいと思っています。 例えばTEST2シートのA1セルには、TEST1シートのA1を参照する数式 =IF('TEST1'!A1="","",'TEST1'!A1))を挿入、 TEST2シートのA2セルには、TEST1シートのA2を参照する数式 =IF('TEST1'!A2="","",'TEST1'!A2))を挿入、 それをA1セルからZ10セルまで同様に数式を挿入したいと思っています。 以下のように配列変数を用いて、一括で挿入すると数式ではなく、文字が入ってしまいます。 Sheets("TEST2").Cells(1, 1).Resize(10, 26).Formula = SUSHIKI ※SUSHIKI←数式を入れた配列 どのような記述を行えば、数式を貼り付けることができるができるでしょうか。 できればOffsetを使用した形で作成したいです。 どうかご教授お願い致します。

  • 定数配列の書き方

    VB6で定数を定義する場合は次の通りです。   Const strTest As String = "TEST" では、定数配列を定義する場合はどのように書けばいいのでしょう?   Const astrTest() As String = Array("A", "B", "C")      '→NG   Const astrTest(0 To 2) As String = Array("A", "B", "C")  '→NG いろいろな書き方を試して見たのですが、上記のような書き方でも文法的にエラーになるようです。 どのように書けばいいのでしょうか? それとも定数を配列で定義するのは無理なんでしょうか?

  • 配列数式で平均を出すと空欄が0で計算されてしまう

      A B C D 1  1 2 1 {=AVERAGE(IF($A$1:$A$4=$C1,B$1:B$4))} 2  1 4 2 {=AVERAGE(IF($A$1:$A$4=$C2,B$1:B$4))} 3  2 6 4  2 8 上記のような数値、数式ですと、 B列すべてに数値が入力されているため、問題なく計算するのですが、 例えば、B2のセルを空欄にすると、空欄を0としてしまい、 D1の計算結果が1となってしまいます。 D1の数式を=AVERAGE(B1:B2)としますと、空欄は空欄として扱い、 計算結果は2となります。 配列数式を使った場合にも、空欄を空欄として扱い、 計算結果が2となるような方法はありませんでしょうか。 よろしくお願いします。

  • ExcelVBA ユーザ定義関数と定数配列

    2010以降のExcelVBAです ユーザー定義関数として使うfunction 此の引数として 幾つかの項に配列数式、又は定数配列を与えたいのです が、 此の際の 引数の受け方と処理の仕方 此が判りません 例を交え お教え願えないでしょうか? 宜しくお願い致します。

  • 常に同じ場所を参照する方法

    エクセル2003を使用してます。 常に同じ場所を参照する数式を作りたいですが、行を挿入すると数式も同じように1行下のセルを参照してしまいます。 参照元に行を挿入しても、数式が変化しないものを作りたいです。 作成例は以下です。 作成例) シート1 A1に「=Sheet2!A1」と入力 シート2 A1に「ヤマダ」と入力 シート2 1行目に行を挿入し、A1に「スズキ」と入力 シート1 A1に「スズキ」と表示して欲しいが、「ヤマダ」と表示      数式は「「=Sheet2!A2」と変化する。 ------------- 分かりづらい文章で、恐縮ですがお知恵を拝借できればと思います。 よろしくお願いいたします。

  • エクセル関数 Vlookupと配列数式(とsumif)の違い、利点不利点

    以下のような設定でvlookupと配列数式とifを組み合わせた場合の結果が異なる(ことがある?)んですが、原因を教えていただけないでしょうか。あと、配列数式のここが便利!(このvlookupの類似機能に限ったことではない)というものがあれば付随して教えてくださると助かります。 A1:A3 に順に1,2,3と(参照される側の)インデックスが入力されている。 B1:B3 はa,b,cと文字が入力されている C1:C3 には2,2,3と(参照する側の)インデックスが入力されている。 C列のインデックスにより、A列のインデックスに対応するB列の文字列を引いてきたいとき、普通はvlookupで、 <セルD1>=vlookup(C1,A1:B3,2,0)などとすると思います。 これを配列数式を用いて、 <セルD1:D3>= if(C1:C3=A1:A3,B1:B3,0) として同じことをしようとしても、何故かD1セルのみ=0となってしまいます。何故でしょうか?配列数式にそれほどくわしくありませんが、利用価値が非常に高そうなのでわからないことを解明したいのです。 (sumifもタイトルにいれたのは、B1:B3が文字列ではなく数値ならば、同じことをsumifで表現できるから、それだけの理由です) 宜しくお願いします。

  • エクセルの#value!エラーについて質問します。

    エクセルのヘルプには#value!エラーが返る原因のひとつに ・セル参照、数式または関数が配列定数として入力されている とありますが、これはどのような状態なのでしょうか? 具体的に数式で示してください。 他所でも質問したのですが具体的な答えが返ってこなかったので・・・

  • 配列数式がわかりません。

    {=SUM(IF(E4:E18="福岡",G4:G18,0))} という式で正しい答えは出せたのですが、SUMのところをaverageに変更し平均を出そうとしても違う答えが返ってきます。 maxに変更したときは正しい答えが返ってきました。使えるものと使えないものがあるのでしょうか??? 配列数式がいまいちわかりません。よろしくお願いします。

専門家に質問してみよう