8

G'Day、

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

私が何を意味するかを示すために、簡単な例を作成しました。

私は小さな架空の農場を作成しました。いくつかの動物が名前でリストされており、動物が作る音を提供します。次のコラムでは、MakesSound というユーザー定義関数を作成しました。この関数は、動物が何であるかを入力し、その動物が発する音に応答します。以下のスナップショットの写真に示すように。

ここに画像の説明を入力

残念ながら、動物をリストする別のセルがあり、代わりにこのスナップショットのように終わることを配列式が拾うことができると思いました。

ここに画像の説明を入力

Quacksが他の動物の答えではないことを知っているので、列Bに異なるセルがあることをarrayformulaに認識させるにはどうすればよいですか。:-)

これは、比較用の arrayformulas の横にある式と、私が使用したコードを示す別のスナップショットです。

ここに画像の説明を入力

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

私は提案を受け入れます。

ありがとう、ピーター。

4

2 に答える 2

11

配列関数でデータを配列に読み込み、処理して出力配列を作成する必要があります。
次に、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
于 2013-02-03T14:39:12.933 に答える
3

特定のサンプルに配列数式を使用する目的は、私には本当にわかりませんが、とにかく、もしあなたが主張するなら、次のことを試してください:

  1. リージョンを選択C3:C7します (一番上の画面と同様)。
  2. を押しF2てその場で編集し、次の式を入力します。=MakesSound(B2:B7)
  3. 通常の代わりにCTRL+ SHIFT+を押します。これにより、ARRAY 式が定義され、その周りに括弧が表示されます (ただし、手動で入力しないでください!)。ENTERENTER{}

お使いの UDF が配列表記を適切に処理できるかどうかはわかりませんが、通常の Excel 数式では、これは期待どおりに機能します。たとえば=LEFT(B2:B7,2)、手順 2 で配列 1 として試してみると、各動物名の最初の 2 文字が返されます。

それが何らかの形で役に立ったことを願っています。幸運を!

于 2013-02-02T11:41:15.510 に答える