2013-02-02 10 views
7

G'Day、Excelの配列式を使用して各セルを正しく読み取る方法

Excelの配列式(Control + Shift + Enter)が各セルを式に動的に読み込む方法を理解するのに役立つ質問があります。

私は、あなたが何を意味するかを簡単な例で示しました。

私はいくつかの動物を持ち、名前でリストアップされた小さな架空の農場を作りました。次のコラムでは、MakesSoundと呼ばれるUser Defined Functionを作成しました.MakesSoundは、それがどの動物であるかの入力を受け取り、それが作る動物の音に反応します。下のスナップショットの図に示されているとおりです。

enter image description here

残念ながら、私はARRAYFORMULAは私が動物をリスト異なるセルを持っており、それは代わりに、このスナップショットのように終了したことを拾うことができると思いました。

enter image description here

ので、どのように私は私が鳴くが、他の動物のための答えではありません知っているように、私は列Bで異なる細胞を持って認識するARRAYFORMULAを求めることができます。 :-)

これは、コンパイルとコードの配列式の次の式を示す別のスナップショットです。

enter image description here

Public Function MakesSound(AnimalName As String) As Variant 
    Select Case AnimalName 
     Case Is = "Duck" 
      MakesSound = "Quack!" 
     Case Is = "Cow" 
      MakesSound = "Moo!" 
     Case Is = "Bird" 
      MakesSound = "Tweet!" 
     Case Is = "Sheep" 
      MakesSound = "Ba-Ba-Ba!" 
     Case Is = "Dog" 
      MakesSound = "Woof!" 
     Case Else 
      MakesSound = "Eh?" 
    End Select 
End Function 

私は提案を開いています。

ありがとう、 ピーター。

+0

「INDEX/MATCH」または「VLOOKUP」を使用しないのはなぜですか? – brettdj

+1

私は今どのような影響が発生するかを調べるために配列式を調べています。私はそれを提案してくれてありがとう、brettdj。 –

答えて

11

あなたは配列関数を配列に読み込み、処理して出力配列を作成する必要があります。
次に、配列関数ntは、ctrl-shift-enterを使用してマルチセル配列式(D3:D7)に入力する必要があります。

Public Function MakesSound(AnimalName As Range) As Variant 
Dim Ansa() As Variant 
Dim vData As Variant 
Dim j As Long 
vData = AnimalName.Value2 
ReDim Ansa(1 To UBound(vData), 1 To 1) 
For j = 1 To UBound(vData) 
    Select Case vData(j, 1) 
    Case Is = "Duck" 
     Ansa(j, 1) = "Quack!" 
    Case Is = "Cow" 
     Ansa(j, 1) = "Moo!" 
    Case Is = "Bird" 
     Ansa(j, 1) = "Tweet!" 
    Case Is = "Sheep" 
     Ansa(j, 1) = "Ba-Ba-Ba!" 
    Case Is = "Dog" 
     Ansa(j, 1) = "Woof!" 
    Case Else 
     Ansa(j, 1) = "Eh?" 
    End Select 
Next j 
MakesSound = Ansa 
End Function 
+0

Charles/brettdjに感謝しています。できます。 –

+0

これは簡単な言葉で教訓を取り除くことです。範囲からの入力を任意のサイズ(またはタイプ?)の2D配列に変換することです。関数またはユーザー定義関数(UDF)は配列を次のように処理できます。とにかくユーザーが喜んで、いったん完了すると、「バリアントとして」出力は、アレイから範囲への変換をそれに応じて行います。私はExcelを学ぶのが大好き! :-) –

3

与えられたサンプルのための配列数式を使用する目的は、私にとって本当に曖昧ですが、とにかく、あなたが主張する場合 - 次のことを試してください(あなたの一番上の画面上など)

  1. 選択地域C3:C7
  2. 押してその場で編集して、次の式を入力するF2=MakesSound(B2:B7)
  3. 押して + ではなく通常のをENTER CTRL + SHIFTはをENTER - これは、配列数式を定義しますとなります{}括弧で囲んでください(ただし手動では入力しないでください)。

UDFが配列表記を正しく処理できるかどうかはわかりませんが、通常のExcelの式ではこれは期待どおりに機能します。ステップ2のための配列として=LEFT(B2:B7,2)を試してください - これは各動物の名前から2つの開始文字を返します。

何とか役に立ちました。がんばろう!

+0

あなたは正しいピーター・Lです。正しく処理できませんでした。それは#VALUES!を思い付いた。このような配列処理を処理することを期待していました。 –

+0

@ user1924393答えがどうにか役立ったら - アップウォークすることをためらってください、その特権のための十分な担当者があります) –

+0

完了、ピーターL.私は学んでいます... :) –

関連する問題