• ベストアンサー

エクセル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/17068)
回答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

  • SUMIF関数について優しく教えて下さい。(至急)

    SUMIF関数を使用したいのですが、条件が3種類あります。何かいい方法を教えて頂けますか? 名前 売上 中居 10 木村 20 稲垣 30 草薙 40 香取 50 安部 60 後藤 70 検索条件(ここでは名前)を複数選ぶ場合、売上金額の合計を関数で出したいのですが・・・。 =SUMIF(名前のセル,”ここに中居と安部と木村”,売上のセル) 中居と安部と木村のセルの条件てどう入力したらいいのですか? 教えて下さい。

  • エクセルVBAでの関数

    下記、コードでセルに関数を入れるようにしてるのですが 関数で得られた値をセルに反映されるようにしたいのですが Dimを使用してもどう指定してよいのかわからず苦戦しております。 宜しくお願い致します。 Range("F1").Select Do Until ActiveCell.Offset(0, -1).Value = ""       With ActiveCell .FormulaR1C1 = "=MID(RC[-1],2,3)" .Offset(1, 0).Select End With Loop Range("A1").Select Do Until ActiveCell.Offset(0, 2).Value = "" With ActiveCell .FormulaR1C1 = "=RC[11]&RC[5]&Rc[8]&rc[9]&rc[3]" .Offset(1, 0).Select End With Loop

  • VBAセル番地が移動したとき更新するには

    前回の質問の延長になります。 https://okwave.jp/qa/q10219443.html#answers Sub Step1_copy() Worksheets("RAsheet").Range("D8").Value = Worksheets("RAsheet").Range("X9").Value End Sub 入力フォームの入力欄にINDEX関数で抽出した値を代入して入力作業を簡略しようとしています。 抽出セルX9を番地ではなく名前で宣言して格納し、代入などでセル番地を指定していた箇所に名前を入れてセル番地が移動したときに一括で反映させるようにする方法はありますでしょうか。 詳しい方いましたらご教授ください。

  • エクセル VBAでエラーがでます

    エクセルのVBAで 以下の文を書くと、赤くエラーがでます。 「新」が反転します。 Range("o2").Value = "=IF(n2=0,"新","再(既)")" セルの中に、関数を入れたいのですが、 方法が間違ってますでしょうか? 宜しくお願いいたします。

  • エクセル関数で {=TABLE(,セル番地)} って?!

    よそから来たエクセルのデータなのですが、150行程度16列の表です。 この表に使われている関数がこれまで見たことも聞いたこともなく、関数のヘルプにもありません。 表中のどのセルも、 {=TABLE(,セル番地)} という式がはいっていて、表示される数値は違うのですが、セル番地はみな同じなんです。 1.これはどのような意味でしょうか? 2.配列関数のようなのですがCtrl+Shiftでは確定できず、さわったセルが元に戻せなくなってしまいました!「式が正しくない」とメッセージが出て、終了もできず、タスクマネジャーでエクセルを強制終了しなくてはならなくなりました。これはCtrl+Shiftでは確定でききないのでしょうか? お助けください。 ( ̄∇ ̄; ?

  •    【VALUE関数】について

    例えば、C7のセルに【30005#10】がセルの中の左側にあるします。 この#の前の引数を抽出したい時には、 CHOOSE関数を使うと⇒CHOOSE(LEFT(C7,1),"◎","○","丸")となりますが VLOOKUP関数を使うと⇒VLOOKUP(VALUE(LEFT(C7,5)),記号集,2,0)になります。 これはなぜでしょう? 私は、セルの左にあるから【VALUE関数】を使えば良いと思っていましたが、どうやら違う様です。 この【VALUE関数】の見分け方と、このような時は【VALUE関数】を使えば良い というアドバイスを頂ければありがたいです。 年始早々すみません。

  • エクセルの関数について

    いつもお世話になります。 エクセルの関数について教えてください。 【やりたいこと】 ・1つのエクセル内に複数のシートを用います。 ・「シート1」に「指定日」を入力します。 ・「シート2」以降、各シートで用意されている3つのセルに、 「その月の期首」「その月の期末」「期首から期末までの日数」を反映させたいのです。 「指定日」の翌日から起算して56日目に達するまでです。 指定日のみ西暦で入力、反映は和暦です。 【例(1)】 ・「シート1」に指定日として「20160629」と入力。 その入力に対して期待する反映は、 ・「シート2」に用意されている3つのセルに「280630」「280630」「1」と出ること。 ・「シート3」に用意されている3つのセルに「280701」「280731」「31」と出ること。 ・「シート4」に用意されている3つのセルに「280801」「280824」「24」と出ること。 【例(2)】うるう年を考慮。 ・「シート1」に指定日として「20160131」と入力。 その入力に対して期待する反映は、 ・「シート2」に用意されている3つのセルに「280201」「280229」「29」と出ること。 ・「シート3」に用意されている3つのセルに「280301」「280327」「27」と出ること。 よろしくお願いします。

  • VLOOKUP関数をエクセルVBAで使いたいのですが、

    VLOOKUP関数をエクセルVBAで使いたいのですが、 式が間違っているのかどうかは分かりませんが実行できませんでした。 式は以下の通り、書きました。 どこが違うかご指摘願います。 よろしくお願いします。。 'VLOOKUPを行う Sheets("過去履歴").Range("BJ6").Value = Application.WorksheetFunction.Vlookup(Sheets("登録書").Range("A2").Value,Sheets("過去履歴").Range("B6:BG65536"),1,0)

  • エクセルVBAとワークシート関数が違う答え?

    エクセル2013です。 A1セルからA100セルにすべて1%と入力されています。 BIセルに =SUM(A:A) と数式が入っており、100%と表示されています。 A,B列のセルの書式はすべてパーセテージです。 101行以下には何も入っていません。 C1セルに =B1=1 と数式が入っており、TRUEが表示されています。 標準モジュールに Sub test01() MsgBox Range("B1").Value = 1 End Sub と書きました。 実行したところFalseが帰ってきました。 なぜ、TRUEにならないのでしょうか? なお、 Sub test02() MsgBox Val(Range("B1").Value) = 1 End Sub とすると、TRUEが帰ります。 でも、Val関数はStringを数値化するものですよね? B1セルはもともと数値なのでVal関数で答えが変わるのも不思議です。 どなたか、わかるように教えていただけないでしょうか?

  • エクセルの関数の質問です。

    エクセルの関数の質問です。 セルに値がある空間をおいて存在します。 例 Aの1番地からIの一番地までは   □□1■■■1□□     で   Aの2番地からIの2番地までは   □1■■■■■1□     という状態です。 この■の部分に1を返したいのですが、何かいい関数って ありますか?

専門家に質問してみよう