[[20160706151154]] 『多すぎる引数回避』(うほうほ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『多すぎる引数回避』(うほうほ)

いつもお世話になってます。

今使ってる(以前にお教え頂いた)関数式でもっと引数の追加を行いたいのですが、
「多すぎる引数が使われてます」とエラーが出るので、
エラーが生じない、代替関数?をお教え頂きたいです。

=IF(D6="","",IF(ISERROR(VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)),"",VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)))

を使用しております。
説明が難しいですが、
Sheet1 D6に入力されている文字をSheet1 C4の番号のSheet2の列を検索して、
その列のSheet1 D6と同じ文字の隣の列の値を表示する??ようになってます。
(説明下手ですみません)

引数の限度が、29個みたいなので困ってます。
同じ機能を要する関数で、引数制限が無いのってありますでしょうか?

宜しくお願いします。

< 使用 アプリ:Excel2000、使用 OS:WindowsXP >


「多すぎる引数」はそういう意味(29個とか)じゃないと思います。
だいたいコンマ、カッコの問題です。

(x) 2016/07/06(水) 16:15


シンプルな例

DATE関数
=DATE(2016,7) -> 少なすぎる引数...
=DATE(2016,7,6,1) -> 多すぎる引数...

IF関数なら
=IF(TRUE,"YES","NO","WHAT?") -> 多すぎる引数...
(x) 2016/07/06(水) 16:23


 >IF(ISERROR(VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・)
                          ↑

 肝心の部分が「・・・・」では、どうすればいいのか考えられないです。

 1.C4セルの種類は全部で何種類あるんですか?(本当に29種類も有り?)

 2.「・・・・」の部分に規則性があるんですか?

(半平太) 2016/07/06(水) 16:32


=IF(D6="","",IF(ISERROR(VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)),"",VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)))

この式自体が文法上正しいのかどうかよく分かりませんが
式の途中の部分を名前定義して、次のようにしますと引数の限度はある程度回避できます。

例えば「VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)」この部分に
「SIKI1」と名前を付けたとしますと

=IF(D6="","",IF(ISERROR(SIKI1),"",VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)))

ただ Excel2000 が手元にありませんので確認はしていません。
(メジロ) 2016/07/06(水) 16:33


 OFFSET関数でやれないですか。
 Sheet2 がM列以降 2列ごと(100行)に配列されているとすると

 =IF(D6="","",IFERROR(VLOOKUP(D6,OFFSET(Sheet2!$M$1,0,($C$4-1)*2,100,2),2,FALSE),""))

 サンプルが見えないので検証していません。(Excel2000 も検証していません)

(もん) 2016/07/06(水) 16:54


xさんコメントありがとうございます。
>「多すぎる引数」はそういう意味(29個とか)じゃないと思います。
>だいたいコンマ、カッコの問題です。
えっ?!っと思って、コンマとカッコを確認してみましたが、やはりダメでした。
エラー表示をもう一度ちゃんとみたら、「この関数に対して、」って一文もありました。

半平太さんコメントありがとうございます。
>肝心の部分が「・・・・」では、どうすればいいのか考えられないです。
>1.C4セルの種類は全部で何種類あるんですか?(本当に29種類も有り?)
>2.「・・・・」の部分に規則性があるんですか
すみません。「・・・・」の部分は規則性が無いんです。
(Sheet2!$M:$N,Sheet2!$EL:$EM,Sheet2!$EX:$EY,Sheet2!$DF:$DG,Sheet2!$DT:$DV)
って感じで、増えてますし、本当に29種類(現在,31種類)あります。
まだ3〜4種類増えそうです。

メジロさんコメントありがとうございます。
お教え頂いた方法は、今から試してみます。ありがとうございます。
後程、結果報告させて頂きます。
(うほうほ) 2016/07/06(水) 16:59


式の途中の部分を名前定義して、次のようにしますと引数の限度はある程度回避できます。 例えば「VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)」この部分に 「SIKI1」と名前を付けたとしますと =IF(D6="","",IF(ISERROR(SIKI1),"",VLOOKUP(D6,CHOOSE($C$4,Sheet2!$M:$N,・・・・),2,FALSE)))

理解力と知識不足ですみません。
名前の定義をして、普通に式に入れ込んでもダメですよね?
なんかの関数とか使うんですか?

もんさんコメントありがとうございます。
サンプル無くてすみません。ランダムに間に入ってくるので省きました。。。

(うほうほ) 2016/07/06(水) 17:18


・・・・ と省略した部分が怪しいですね。その他は合っていると思います。
カンマが連続しているとか、間違えて小数点になっているとか、ミスしていませんか?

省略せずにエラーのでている式を丸ごと貼り付けてもらわないと、回答者にはエラー箇所が判らないように思います。

でもって、作った当人でも間違い箇所が判らないくらい長くなるくらいでしたら、数式は諦めて、マクロで処理したほうが良いのではないでしょうか? または、どうしても数式がお望みならば、1セルで判定するのではなく、1条件で1セルとして、先頭セルは全ての条件判定がTRUEかどうかで判定、とか。
(???) 2016/07/06(水) 17:58


 作業セルを使えばいいんじゃないですか。
 BJ 19:03

 >すみません。「・・・・」の部分は規則性が無いんです。 

 あら、そうなんですか?
 そうなると、強制的に変換を噛ませる必要があります。

 どこか適当なスペースに変換表を作ります。(下図サンプルでは、L1:M5 にしてあります)

 D7セル =IF(D6="","",IF(COUNTIF(OFFSET(Sheet2!$A:$A,0,LOOKUP(C4,$L$1:$M$5)-1),D6),VLOOKUP(D6,OFFSET(Sheet2!$A:$B,0,LOOKUP(C4,$L$1:$M$5)-1),2,FALSE),""))

 <Sheet1 結果図>
  行  _C_  _D_  _E_  _F_  _G_  _H_  _I_  _J_  _K_  _L_  _M_  _N_
   1                                                 1   13  M  
   2                                                 2  142  EL 
   3                                                 3  154  EX 
   4    5                                            4  110  DF 
   5                                                 5  124  DT 
   6       aa                                                   
   7       ccc                                                  

(半平太) 2016/07/06(水) 19:11


引数追加時のミスは確認したので、無いかと思いますが、、、
かなり、長くなりますがとりあえず省略してないエラーの出る式を下記に示します。

=IF(D7="","",IF(ISERROR(VLOOKUP(D7,CHOOSE($C$4,Sheet2!$M:$N,Sheet2!$EL:$EM,Sheet2!$EX:$EY,Sheet2!$DF:$DG,Sheet2!$DT:$DV,Sheet2!$FD:$FE,Sheet2!$AE:$AF,Sheet2!$FP:$FQ,Sheet2!$FW:$FX,Sheet2!$BD:$BE,Sheet2!$DM:$DN,Sheet2!$BV:$BW,Sheet2!$ER:$ES,Sheet2!$CT:$CU,Sheet2!$CZ:$DA,Sheet2!$AX:$AY,Sheet2!$CH:$CI,Sheet2!$EF:$EG,Sheet2!$BP:$BQ,Sheet2!$CN:$CO,Sheet2!$CB:$CC,Sheet2!$GI:$GJ,Sheet2!$GO:$GP,Sheet2!$DZ:$EA,Sheet2!$GC:$GD,Sheet2!$FJ:$FK,Sheet2!$AR:$AS,Sheet2!$Y:$Z,Sheet2!$S:$T,Sheet2!$AL:$AM),2,FALSE)),"",VLOOKUP(D7,CHOOSE($C$4,Sheet2!$M:$N,Sheet2!$EL:$EM,Sheet2!$EX:$EY,Sheet2!$DF:$DG,Sheet2!$DT:$DV,Sheet2!$FD:$FE,Sheet2!$AE:$AF,Sheet2!$FP:$FQ,Sheet2!$FW:$FX,Sheet2!$BD:$BE,Sheet2!$DM:$DN,Sheet2!$BV:$BW,Sheet2!$ER:$ES,Sheet2!$CT:$CU,Sheet2!$CZ:$DA,Sheet2!$AX:$AY,Sheet2!$CH:$CI,Sheet2!$EF:$EG,Sheet2!$BP:$BQ,Sheet2!$CN:$CO,Sheet2!$CB:$CC,Sheet2!$GI:$GJ,Sheet2!$GO:$GP,Sheet2!$DZ:$EA,Sheet2!$GC:$GD,Sheet2!$FJ:$FK,Sheet2!$AR:$AS,Sheet2!$Y:$Z,Sheet2!$S:$T,Sheet2!$AL:$AM),2,FALSE))

まだ、みなさまのコメントをちゃんと見れてないので、
今から確認させて頂きます。

(うほうほ) 2016/07/07(木) 09:13


(: 7個
): 6個
(x) 2016/07/07(木) 09:42

本当にこの数式だとすると、末尾に括弧が1つ足りないようなので、エラーは「数式中に対応するかっこがありません…」になりましたよ?

Choose関数に指定できる個数は、Excel2010では最大254個のようです。29個までだったのは、Excel2003までです。
(???) 2016/07/07(木) 09:44


 初めから、そういう情報を書いていただくと、2度手間にならなくて済むんですけどねぇ。

 ・・と言うか、こっちの回答を見て自力でやっていただく局面に入ったと思っていたんですけども。

 <強制変換表をL1:M30に書いた場合>
 D7セル =IF(D6="","",IF(COUNTIF(OFFSET(Sheet2!$A:$A,0,LOOKUP(C4,$L$1:$M$30)-1),D6),VLOOKUP(D6,OFFSET(Sheet2!$A:$B,0,LOOKUP(C4,$L$1:$M$30)-1),2,FALSE),""))

 <Sheet1 結果図>
  行  _C_  _D_  _E_  _F_  _G_  _H_  _I_  _J_  _K_  _L_  _M_  _N_
   1                                                 1   13  M  
   2                                                 2  142  EL 
   3                                                 3  154  EX 
   4    5                                            4  110  DF 
   5                                                 5  124  DT 
   6       aa                                        6  160  FD 
   7       ccc                                       7   31  AE 
   8                                                 8  172  FP 

(半平太) 2016/07/07(木) 09:45


数式1つのために新しいExcelを購入するのももったいないですが、3案。

(1)他社とのファイル受け渡しに新しいExcelが必要、とか、他にも需要があるなら、新しいExcelにする。
(2)半平太さん案のように、なんらかの工夫をして引数を減らす。
(3)マクロで処理する。
(???) 2016/07/07(木) 09:58


 それにしても、「無規則性」を所与の条件にするより、
 規則的に処理できるように設計し直す方が利口だと思います。

 テニスでは、難しいショットで決められたら、それはそれで、勿論楽しくていいですけど、
 簡単にウィナーが打てるポジションまで走っていく方が、もっといいです。

(半平太) 2016/07/07(木) 10:09


私の方だと、
「この関数に対して、多すぎる引数が使用されています」
とでますね。

>Choose関数に指定できる個数は、Excel2010では最大254個のようです。29個までだったのは、Excel2003までです。
なら、やっぱり2000なんで、カンマ等のミスじゃないってことですよね!

まずBJさんの作業セルなるものを調べて使おうと思って検索したんですが、
会社のPCなんで、閲覧制限がかかってダメでした。。。
自宅帰ったら調べてみます。

半平太さんのも試してみましたが、、、
やりかたが悪いのか上手くいきません。。。
申し訳ないのですが、言葉で少し説明頂けないでしょうか・・・・

???さんが仰る通り、半平太さんの案が一番現実的かと思います。

(うほうほ) 2016/07/07(木) 10:31


 >言葉で少し説明頂けないでしょうか・・・・ 

 分かりにくかったですか。。。

 じゃ、OFFSET関数を止めて、INDIRECT関数でやってみます。(変換表はL1:M30の範囲と仮決めします)

 D7セル =IF(D6="","",IF(ISERROR(VLOOKUP(D6,INDIRECT("Sheet2!"&LOOKUP(C4,$L$1:$M$30)),2,FALSE)),"",VLOOKUP(D6,INDIRECT("Sheet2!"&LOOKUP(C4,$L$1:$M$30)),2,FALSE)))

 「ISERROR」がなく、「Sheet2!」も消去してみると、
 これだけの話ですから、そんなに難しくないと思います。
   ↓
 VLOOKUP(D6,INDIRECT(LOOKUP(C4,$L$1:$M$30)),2,FALSE)

 <Sheet1 結果図>
  行 _C_ _D_ _E_ _F_ _G_ _H_ _I_ _J_ _K_ _L_ __M__
   1                                       1 M:N  
   2                                       2 EL:EM
   3                                       3 EX:EY
   4   4                                   4 DF:DG
   5                                       5 DT:DV
   6     aa                                6 FD:FE
   7     bbb                               7 AE:AF
   8                                       8 FP:FQ
   9                                       9 FW:FX
  10                                      10 BD:BE
  11                                      11 DM:DN
  12                                      12 BV:BW
  13                                      13 ER:ES
  14                                      14 CT:CU
  15                                      15 CZ:DA
  16                                      16 AX:AY
  17                                      17 CH:CI
  18                                      18 EF:EG
  19                                      19 BP:BQ
  20                                      20 CN:CO
  21                                      21 CB:CC
  22                                      22 GI:GJ
  23                                      23 GO:GP
  24                                      24 DZ:EA
  25                                      25 GC:GD
  26                                      26 FJ:FK
  27                                      27 AR:AS
  28                                      28 Y:Z  
  29                                      29 S:T  
  30                                      30 AL:AM

(半平太) 2016/07/07(木) 16:07


半平太さん、、、本当にすみません。まだ分からないです。。。。
新しくシート作って試してみたのですが、
何がどの様な動きをしてるのか、謎です。。。。

D6の文字と、同じ文字をC4の数値の列(1ならM:N、2ならEL:EM)から探して、
その文字の隣の値を表示したいんっすけど、、、
C4に4で、D7がbbbってなってますよね?謎です。。。
(うほうほ) 2016/07/08(金) 16:32


 >D6の文字と、同じ文字をC4の数値の列(1ならM:N、2ならEL:EM)から探して、 
 >その文字の隣の値を表示したいんっすけど、、、 
 そうなる様に作ってあります。

 >C4に4
 なので、「Sheet2のDF:DG列」が検索対象になります。
 上の解釈と同じです。

 >D7がbbbってなってますよね?謎です。。。
 なるほど、謎でしょうね。

 こちらは、どのセルに数式を入れるのか知らされていないので、
 (仮に)D7セルに入れるとした場合のサンプルです。

 Sheet2のDF列に「aa」が入っていて、その右隣が「bbb」なら
 そんな結果図になるってことです。

(半平太) 2016/07/08(金) 17:04


半平太さん
大変申し訳ございませんでした!!
私のやり方が、間違っていましたm(T口T)m

お教え頂いた方法で、希望の動作が出来ました!
この方法なら、いくらでも引数が増やせますので本当に助かります!!

何度もお手間をお掛けしてすみませんでした!!

(うほうほ) 2016/07/11(月) 09:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.