![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
希望の動作にせっかくたどり着けましたが、長すぎて拒絶されます。
以下の関数を短く記述するにはどのようにすれば宜しいでしょうか?
ご教示お願いします。
=IF(AND($C$13>0,$C$13<=12),ROUND(VLOOKUP($B$23,B5:Q23,MATCH($C$13,B5:Q5,0),FALSE)/$C$13,0),""
&IF(AND($C$13>12,$C$13<=24),ROUND(VLOOKUP($B$23,B25:Q32,MATCH($C$13,B25:Q25,0),FALSE)/$C$13,0),""
&IF(AND($C$13>24,$C$13<=36),ROUND(VLOOKUP($B$23,B45:Q52,MATCH($C$13,B45:Q45,0),FALSE)/$C$13,0),""
&IF(AND($C$13>36,$C$13<=48),ROUND(VLOOKUP($B$23,B54:Q61,MATCH($C$13,B54:Q54,0),FALSE)/$C$13,0),""
&IF(AND($C$13>48,$C$13<=60),ROUND(VLOOKUP($B$23,B63:Q70,MATCH($C$13,B63:Q63,0),FALSE)/$C$13,0),""
&IF(AND($C$13>60,$C$13<=72),ROUND(VLOOKUP($B$23,B72:Q79,MATCH($C$13,B72:Q72,0),FALSE)/$C$13,0),""
&IF(AND($C$13>72,$C$13<=84),ROUND(VLOOKUP($B$23, B85: Q92,MATCH($C$13,B85:Q85,0),FALSE)/$C$13,0),""
&IF(AND($C$13>84,$C$13<=96),ROUND(VLOOKUP($B$23, B94:Q101,MATCH($C$13,B94:Q94,0),FALSE)/$C$13,0),""
&IF(AND($C$13>96,$C$13<=108),ROUND(VLOOKUP($B$23,B103:Q110,MATCH($C$13,B103:Q103,0),FALSE)/$C$13,0),""
&IF(AND($C$13>108,$C$13<=120),ROUND(VLOOKUP($B$23,B112:Q119,MATCH($C$13,B112:Q112,0),FALSE)/$C$13,0),""
&IF(AND($C$13>120,$C$13<=132),ROUND(VLOOKUP($B$23,B125:Q132,MATCH($C$13,B125:Q125,0),FALSE)/$C$13,0),""
&IF(AND($C$13>132,$C$13<=144),ROUND(VLOOKUP($B$23,B134:Q141,MATCH($C$13,B134:Q134,0),FALSE)/$C$13,0),""
&IF(AND($C$13>144,$C$13<=156),ROUND(VLOOKUP($B$23,B143:Q150,MATCH($C$13,B143:Q143,0),FALSE)/$C$13,0),""
&IF(AND($C$13>156,$C$13<=168),ROUND(VLOOKUP($B$23,B152:Q159,MATCH($C$13,B152:Q152,0),FALSE)/$C$13,0),""))))))))))))))
No.3ベストアンサー
- 回答日時:
こんにちは。
> 以下の関数を短く記述するにはどのようにすれば宜しいでしょうか?
というご質問ですので、必ずしも、今質問者さんが抱えている問題
を解決に導くような答えには、ならないかも知れませんが、
素直に返事を書いてみました。
=ROUND(VLOOKUP($B$23,INDEX((B5:Q23,B25:Q32,B45:Q52,B54:Q61,B63:Q70,B72:Q79,B85:Q92,B94:Q101,B103:Q110,B112:Q119,B125:Q132,B134:Q141,B143:Q150,B152:Q159),0,0,($C$13+11)/12),MATCH($C$13,INDEX((B5:Q5,B25:Q25,B45:Q45,B54:Q54,B63:Q63,B72:Q72,B85:Q85,B94:Q94,B103:Q103,B112:Q112,B125:Q125,B134:Q134,B143:Q143,B152:Q152),0,0,($C$13+11)/12),0),FALSE)/$C$13,0)
要するに
=ROUND(VLOOKUP($B$23,可変範囲1,MATCH($C$13,可変範囲2,0),FALSE)/$C$13,0)
というひとつの式が骨格ですね。
なので、その可変範囲をINDEX関数の領域指定を使うことで指定し、
IF関数による類似式の列挙を回避して短くしました。
ただ、この式自体が正しく機能するのかどうか、
「実際のシートを見てない」「何を計算したいのか確認のしようがない」こちらとしては
判断できません。
C13は必ず 1以上168以下 の数値だと担保されている、ということだけは察しがつきますが、
MATCH関数でVLOOKUP関数の引数としての列を指定する部分とか、
「数式が期待している」通りに条件が整っていないとエラー出そう点は幾つかありますね。
とりあえず、ご提示の数式しかわかりませんし、検証もできませんから、
"直訳"するかのごとく、骨格はそのまま、短くする工夫だけ、を例示しました。
一応、
INDEX(参照,行番号,列番号,領域番号)
の扱い方だけ補足しておきますが、
[参照]の処は、()の内側に、(領域1,領域2,領域3,領域4,....)のように指定してあって
[領域番号]で何番目の領域かを決めています。
[行番号]、[列番号]は本来、何行めで何列めのセル、という風に指定するものですが、
ここに 0 を指定することで、行全体、列全体、つまり、範囲内のすべてのセル、となります。
単純な例で、
INDEX((A1:B2,C3:D4,E5:F6),0,0,2)
は、C3:D4 への参照を返します。
また、領域番号には通常、有効な領域番号を正整数で指定するものですので、
($C$13+11)/12)
は、$C$13が正の数という前提で、
INT($C$13+11)/12)
と書くべきものを省略してることも伝えておきます。
INDEX((A1:B2,C3:D4,E5:F6),0,0,2.34)
でも、C3:D4 への参照を返しますので。
それと、ご提示の数式ですが、""& の使い方はこれであっているのでしょうか?
""& の後に数値を続けて、その数値を数字文字列にするという意味になりますが、
ご提示のものは、C13が12以下ならば数値、それ以外は数字文字列になっています。
私の方は(エラーになるような状況でなければ)すべて数値を返すように、
その部分は"意訳"しています。
とりあえず以上です。
ご回答ありがとうございます。
頂戴した関数を貼り付けると見事に希望の動作を致しました。
別sheetに纏めてから取り出すのと動作は同じですが、今後のために自分でもこのように書けるよう勉強させていただきます。
ありがとうございました。
No.4
- 回答日時:
検索範囲の左端の列にB23と同じ値が無い場合や、検索範囲の上端の行にC13と同じ値が無い場合においてもエラーとはならない様に考慮しますと、以下の様な関数となります。
=IF(AND($C$13>0,ISNUMBER(1/COUNTIF(OFFSET(B5,INDEX({0,20,40,49,58,67,80,89,98,107,120,129,138,147},-INT(-$C$13/12)),,IF($C$13>12,7,18)),$B$23)/COUNTIF(OFFSET(B5:Q5,INDEX({0,20,40,49,58,67,80,89,98,107,120,129,138,147},-INT(-$C$13/12)),),$C$13))),ROUND(VLOOKUP($B$23,OFFSET(B5:Q159,INDEX({0,20,40,49,58,67,80,89,98,107,120,129,138,147},-INT(-$C$13/12)),),MATCH($C$13,OFFSET(B5:Q5,INDEX({0,20,40,49,58,67,80,89,98,107,120,129,138,147},-INT(-$C$13/12)),),0),FALSE)/$C$13,0),"")
ご回答ありがとうございます。
データ入力側で該当する値が必ず存在するよう規制していますので、No.3 cj_mover様の書式を使用させていただきましたが、今後のために自分でもこのように書けるよう勉強させていただきます。
ありがとうございました。
No.2
- 回答日時:
その“寿限無”式は貴方の質問に対する回答だったのでしょうか?
「貴方の質問」の内容は何だったのですか?
質問番号があれば教えてください。
質問番号とは、例えば、
http://oshiete.goo.ne.jp/qa/8030181.html
の中の「8030181」のことです。
【独白】それにつけても、あのような寿限無式をアドバイスするとは、呆れたモンです。
ご回答ありがとうございます。
自分で求めた一部分の結果を全体に当てはめると“寿限無”になってしまい困っていました。
決して呆れた回答者様が存在したわけではございませんので…
No.1
- 回答日時:
式そのものが有っているかどうかわかりませんが、IF関数1つごとにデータを例えばR1セルから下方に並べるようにして最後にそれらの値を利用するようにしてはどうでしょう。
=IF(AND($C$13>0,$C$13<=12),ROUND(VLOOKUP($B$23,B5:Q23,MATCH($C$13,B5:Q5,0),FALSE)/$C$13,0),""
&IF
のような式になっていますが少なくともIF関数が完結した後で&を使う形になるでしょう。したがって正しくは""の後に )が付く形でないとおかしいですね。
=IF(AND($C$13>0,$C$13<=12),ROUND(VLOOKUP($B$23,B5:Q23,MATCH($C$13,B5:Q5,0),FALSE)/$C$13,0),"")
&
そのようにした場合には式の最後でのカッコ)は1つだけになりますね。
それにしても得られるデータは何のためになるのでしょう。
ご回答ありがとうございます。
別sheetにデータを並べてVLOOKUPで参照できるようにし、必要な値を得ることが出来ました。
私のレベルではこの方法が一番わかりやすく簡単でした。
貴重なヒントを頂戴しありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) このマクロの説明文を教えてほしいです。 1 2023/01/12 09:17
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Excel(エクセル) 勤務表ですが、思うように出来ません。 3 2023/05/19 06:43
- スーパー・コンビニ 13日今日までセブンやファミマでiQOSの本体が安いですが 13日の23時59分までおっけいってこと 1 2022/11/13 15:35
- スーパー・コンビニ 13日今日までセブンやファミマでiQOSの本体が安いですが 13日の23時59分までおっけいってこと 2 2022/11/13 16:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IFとIFS関数
-
Excelを無料で使うには? パソ...
-
セルの数を求めたい
-
エクセルの数式バーのフォント...
-
Excelの表示についての質問
-
再質問です。マクロの修正箇所...
-
データチェックを行うエクセル...
-
Excelに詳しい方! B列が「日...
-
西暦や和暦の表示をyyyymmdd表...
-
Excelで50個のセルに同じ文字を...
-
Excelの数式について教えてくだ...
-
Excel VBAで全ての矢印を赤色に...
-
エクセル関数を使って
-
祝日と土曜、日曜の合計をカウ...
-
xlsxファイルを保存する際にPDF...
-
Excelについて
-
エクセルVBA、別ブックへ転記す...
-
エクセルで「ページレイアウト...
-
2列に入っているデータを1列...
-
【ExcelVBA】名前を付けて保存→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報