- ベストアンサー
エクセルVBAの関数
エクセルの関数について質問があります。Array関数とChoose関数です。ヘルプみても理解できません。 Array関数は私自身 Array("木村","中居","香取")は Range("セル番地").Value="木村" Range("セル番地").Value="中居" Range("セル番地").Value="香取" と同じように考えています。 Choose関数は Choose(arashi,"木村","中居","香取") arashiが指定したセルに対し木村か中居か香取があればarashiのセルに反映するというように考えています。 間違っていると思うのでどなたかご教授宜しくおねがいします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。Wendy02です。 Choose は、VBA.Choose と WorksheetFunction.Choose と両方あります。 仕様には、多少の違いはあります。 後は、配列の初歩の話ですから、VBAや関数の参考書をお読みください。いくら私がここで説明しても、混乱するだけのような気がしますので、やめておきます。だだ、Choose の第2引数以降のデータは、Array関数で作られるような、配列構造は持っていませんし、それを一般的には扱うことが出来ません。Choose関数は、配列とは関係ありません。Chooseの第2引数は、パラメータ配列というのですが、それは、そういう引数の型の名前です。 ところで、"木村","中居","香取" は、SMAPだと思いますが・・(^^;
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
(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)
こんばんは。 ご質問のタイトルは、『エクセル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)
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)
Choose(=(B12),"木村","中居","香取") で、 B12に1が入力されている(入力する)と、木村が表示され、 B12に2が入力されている(入力する)と、中居が表示され、 B12に3が入力されている(入力する)と、香取が表示されます。 ちなみに =CHOOSE(WEEKDAY(B12,2),"月","火","水","木","金","土","日") で、 B12に =DATE(2005,10,21) が入力されている(入力する)と、金が表示され、 B12に =DATE(2005,10,22) が入力されている(入力する)と、土が表示されます。 こんなことで宜しいのでしょうか?
補足
>=CHOOSE(WEEKDAY>(B12,2),"月","火","水","木","金","土","日") で(B12,2)の2ってなんですか?