• ベストアンサー

エクセルVBAの関数

エクセルの関数について質問があります。Array関数とChoose関数です。ヘルプみても理解できません。 Array関数は私自身 Array("木村","中居","香取")は Range("セル番地").Value="木村" Range("セル番地").Value="中居" Range("セル番地").Value="香取" と同じように考えています。 Choose関数は Choose(arashi,"木村","中居","香取") arashiが指定したセルに対し木村か中居か香取があればarashiのセルに反映するというように考えています。 間違っていると思うのでどなたかご教授宜しくおねがいします。

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

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

こんにちは。Wendy02です。 Choose は、VBA.Choose と WorksheetFunction.Choose と両方あります。 仕様には、多少の違いはあります。 後は、配列の初歩の話ですから、VBAや関数の参考書をお読みください。いくら私がここで説明しても、混乱するだけのような気がしますので、やめておきます。だだ、Choose の第2引数以降のデータは、Array関数で作られるような、配列構造は持っていませんし、それを一般的には扱うことが出来ません。Choose関数は、配列とは関係ありません。Chooseの第2引数は、パラメータ配列というのですが、それは、そういう引数の型の名前です。 ところで、"木村","中居","香取" は、SMAPだと思いますが・・(^^;

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

(1)Array 多分、質問は Sub test08() a = Array("a", "b", "c") Range("A1:C1") = a MsgBox Range("A1") MsgBox Range("B1") MsgBox Range("C1") End Sub の表示a、b、cと出て、A1はa,B1はb、C1はcとセットされるということを言っている のだと思います。 Range("セル番地").Value="木村"のセル番地という例示は判りにくい。 結果は同じですが、 Range("セル番地").Value="木村" Range("セル番地").Value="中居" Range("セル番地").Value="香取" と同じという説明は賛同できません。片一方はArray関数であり、Rangeにセットするだけのものではなく、配列表現をメモリにバリアント型で展開する関数です。 Arrayの後半はセルに値を代入しているだけで、3セルが1度の代入で値がセットされるのは、エクセルのRANGEの機能で、 Sub test09() Range("A1:C1").Value = Range("D2:F2").Value End Sub ができるからRange(”D2:F2”)と配列 a が同じとはいえないようなものです。 (2)Choose ChooseはVBAで使うと、WorksheetFunctionをつける必要があるのでしょうが あくまでエクセル関数のCHOOSE関数の引数の内容と機能を引き継いでいて 第1引数は「Arasiのセルに」ではなく、インデックス値すなわち、後につづく、引数リストの、配列の順序数を指定します。セルの内容がインデックス値を現しているときに使えるものです。セルの値は別途プログラムや入力等で決まるものです。 ですから質問の内容では、1例の結果を見ているようなところがあって、正式な解説としては不適でしょう。

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

こんばんは。 ご質問のタイトルは、『エクセルVBAの関数』となっておりますから、VBAのご質問だと思います。 >Array関数は私自身 >Array("木村","中居","香取")は >Range("セル番地").Value="木村" >Range("セル番地").Value="中居" >Range("セル番地").Value="香取" myArray = Array("木村", "中居", "香取") の myArray は、1次元の配列です。つまり、メモリ空間に、"木村","中居","香取" が存在しているだけです。だから、仮に、ActiveCell.Value = myArray としても、ワークシート上では、添え字の一番下の値、つまり、木村しか出てきません。 逆に、Choose は、VBA上では、あまり必要がありません。 一旦、配列に格納したら、添え字で、出力すればよいのですから。 以下は、その例です。 Sub testArray()   Dim myArray() As Variant   Dim i As Integer   myArray = Array("木村", "中居", "香取")   ActiveCell.Value = myArray   i = 1 '0~2まで   ActiveCell.Offset(1).Value = myArray(i) End Sub

  • nobuendo
  • ベストアンサー率47% (182/384)
回答No.2

WEEKDAY関数の説明をみてもらえればわかりますが、ここの数字は1から3までの種類があり、1または入力なしの場合は、日曜が1、月曜は2・・・と曜日の番号が返されます。 2とすれば、月が1、火が2・・・と曜日の番号が返されます。 3とすれば、月が0、火が1・・・と曜日の番号が返されます。 =CHOOSE(WEEKDAY(B12),"日","月","火","水","木","金","土") でも、 =CHOOSE(WEEKDAY(B12,1),"日","月","火","水","木","金","土") でも、 =CHOOSE(WEEKDAY(B12,3),"火","水","木","金","土","日","月") でも良いわけですが、どんな場合に使い分けするのかは、詳しくは知りません。

  • nobuendo
  • ベストアンサー率47% (182/384)
回答No.1

Choose(=(B12),"木村","中居","香取") で、 B12に1が入力されている(入力する)と、木村が表示され、 B12に2が入力されている(入力する)と、中居が表示され、 B12に3が入力されている(入力する)と、香取が表示されます。 ちなみに =CHOOSE(WEEKDAY(B12,2),"月","火","水","木","金","土","日") で、 B12に =DATE(2005,10,21) が入力されている(入力する)と、金が表示され、 B12に =DATE(2005,10,22) が入力されている(入力する)と、土が表示されます。 こんなことで宜しいのでしょうか?

syoi198985
質問者

補足

>=CHOOSE(WEEKDAY>(B12,2),"月","火","水","木","金","土","日")  で(B12,2)の2ってなんですか?

関連するQ&A