希望の動作にせっかくたどり着けましたが、長すぎて拒絶されます。
以下の関数を短く記述するにはどのようにすれば宜しいでしょうか?
ご教示お願いします。
=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ランキング
-
行数が不規則な一週間ごとの合...
-
文字列になっている時間をVBAで...
-
ある列、或いは、ある行のセル...
-
マクロの有効化するダイヤログ...
-
【マクロ】フォルダからエクセ...
-
Excelでの時間帯の入力
-
excel で二つのどちらかを選ぶ
-
エクセルの順位別一覧表の自動...
-
Excel 2019 のピボットテーブル...
-
エクセル 価格表から単価を呼び...
-
excelの不要な行の削除ができな...
-
エクセルで特定の範囲内から小...
-
シートAで横に並んだ項目→シー...
-
Excelが固まってしまった。
-
Excel2013のF6キー操作について
-
【関数】スペースがいくつ入っ...
-
Excelはなんで先頭の0を消すん...
-
【Microsoft Office Excel Comp...
-
西暦や和暦の表示をyyyymmdd表...
-
別シートからの文字を変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報