歯ブラシ選びの大事なポイントとは?

エクセル初心者です。

「月次」というシートのC列に計算式が入ってるとします(←DATE関数とMONTH関数、IF関数の組み合わせ)。C列の見た目は、C1が1、C31が31、のように、縦に1~31の数字が入っているように見えます。
例えば、B1に月の数字を入れると、C列の数字がその月に対応して見た目が変わります。例えばB1が7月だとC列は31日まで表示され、2月だと28日まで、のような感じです。でも、計算式は31日分入っているので、例えばC31は、月によって、見た目がブランクになる場合と数字になる場合とがあります。参考ページ:http://kokoro.kir.jp/know/calendar2.html

ここで隣のD列に、見た目でC列に数字が表示されてるときは、別シートの数字を返したいとします。その参照させたいシートは31枚あり、例えば「1」というシートのD5の値を、「月次」のD1に返したい、という意味です。ただ、見た目でC31がブランクのときは、D31には何も返さず空白にしたいのです。

参照させたいシートが31枚あるため、オートフィル機能を使いたく、そこで、INDIRECT関数を使ってやろうとしてるのですが
参考ページ http://www.relief.jp/itnote/archives/001697.php

上記のとおりやろうとすると、「月次」のD列に#REF!がでます。
(エラーの出る計算式:INDIRECT(C1&"!D5")」

試しに「月次」のK列あたりに、1~31まで手入力して数字をいれ、そのセルを参照させるとうまくいくのですが、
(この場合の計算式:INDIRECT(K1&"!D5")」

ただ、30日の月や28日の月もあり、毎回K列を変えないといけないので、何とかC列を参照させたいのですが、何かよい解決方法はないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#1です。

あ、そうですね。月末処理を忘れてました。

 =IF(C1="","",INDIRECT(DAY(C1)&"!D5"))

に修正します。
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
まさに求めていたのはこれです!!
有り難うございました。

お礼日時:2009/06/23 20:15

31日がない月でその日のC列がブランクになっているという事でしたら


 =IF(C1="","",INDIRECT(C1&"!D5"))
で、どうでしょうか
    • good
    • 0
この回答へのお礼

レス有り難うございます。
これはやってみたのですが、できなかったので質問させていただいてます。
せっかくアドバイスいただいたのにすみません。

お礼日時:2009/06/23 20:16

エラーの出る計算式を



 =INDIRECT(DAY(C1)&"!D5")

とすれば通りそうに思えます。

C列の、見た目が1,2,3…となっている部分の実際の値は
シリアル値(日付を表す5桁の数値)になっているのではありませんか?

シリアル値から、見た目どおりに「日」を表す数値1,2,3を取り出すのがDAY関数です。

Excel2003で再現・挙動確認済。
ご参考まで。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QINDIRECT関数 エラーになる

Sheet1とSheet2があり、
Sheet1のA1には「tset」という値が入っています。

そこで、Sheet2の任意のセルに
Sheet1のA1の値を入れたいのですが
「=Sheet1!A1」なら可能なのに
Sheet2のA1に「Sheet1」と入力し
Sheet2のA2に「=INDIRECT(A1)!A1」とするとエラーになります。

このような場合は、INDIRECT関数を使えばいいと知ったのですが
何が間違っていますか?

Aベストアンサー

INDIRECT 関数の仕様では、参考 URL にあるとおり、文字列を引数とします。「セル参照」あるいは「セル範囲に付けられている名前」を表す文字列(参照文字列)を引数として指定しますが、代わりにセル参照を指定した場合は、参照元の文字列を関数が受け取ってきます。シート名のみを引数とする方法は、ありません。


○ =a1
○ =sheet1!a1

○ =indirect(a1)       …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("a1")      ……「=a1」と同じ意味
× =indirect(sheet1)     ……エラー「#NAME?」
× =indirect("sheet1")    ……シート名を含む参照文字列が未完成のため、エラー「#REF!」
○ =indirect("sheet1!"&a1)  …… Sheet2 の A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("sheet1!"&"a1") ……「=sheet1!a1」と同じ意味
○ =indirect("sheet1!a1")   ……「=sheet1!a1」と同じ意味

○ =a1!a1           …… Excel のサービス機能により「a1」が「'a1'」に自動変換されるため、「a1」という名前のシートが存在する場合のみオッケー
△ =a1&"!"&a1         ……一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
△ =INDIRECT(A1)&"!"&A1    …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
△ =INDIRECT("A1")&"!"&A1   ……一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す
× =INDIRECT("A1!")&A1    ……シート名を含む参照文字列が未完成のため、エラー「#REF!」
× =INDIRECT(A1)!A1      ……「&」と「"」がないため、数式の入力がそもそも受け付けられない
× =sheet1!indirect("a1")   ……数式の入力がそもそも受け付けられない

○ =indirect(a1&"!"&a1)    …… A1 セルに「a2」などの有効な参照文字列が記入されており、かつ、「a2」などの名前のシートが存在する場合のみ
○ =indirect(b1&"!"&a1)    …… B1 セルに「sheet1」など、A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect(a1&"!a1")    …… A1 セルに「sheet1」などの有効な参照文字列が記入されている場合のみ

× =indirect(合計)     ……エラー「#NAME?」または「#REF!」
○ =indirect("合計")     ……「合計」という名前が付けられたセルが存在する場合のみ


INDIRECT では、正しいセル参照になる文字列でありさえすれば、自由に文字列をつなげて作ることができます。

●=indirect(c1&d1)
●=indirect("sheet1!"&c1&d1)
●=indirect(a1&b1&"!e1")
●=indirect(a1&"!"&c1)
●=indirect("合計")

参考URL:http://office.microsoft.com/ja-jp/excel-help/HP005209139.aspx

INDIRECT 関数の仕様では、参考 URL にあるとおり、文字列を引数とします。「セル参照」あるいは「セル範囲に付けられている名前」を表す文字列(参照文字列)を引数として指定しますが、代わりにセル参照を指定した場合は、参照元の文字列を関数が受け取ってきます。シート名のみを引数とする方法は、ありません。


○ =a1
○ =sheet1!a1

○ =indirect(a1)       …… A1 セルに「a2」などの有効な参照文字列が記入されている場合のみ
○ =indirect("a1")      ……「=a1」と同じ意味
× =indirect(sh...続きを読む

QINDIRECT関数のエラー回避について

文字を表示させようと=IFERROR(INDIRECT(K4&"'!C"&L4),"")を使用しましたが
INDIRECT(K4&"'!C"&L4)がエラー(#REF!)となり「空欄」になります。これはそのような構文なので理解できます。
K4は=IFERROR(INDEX(($N$1:$R$1),1,MATCH(ROW()-1,$M$2:$R$2)),"")の構文で「sheet2」と、
またL4は=IFERROR(IF($K4="","",IFERROR((HLOOKUP(ROW(),$M$2:$R$3,2,0)),ROW()-HLOOKUP(ROW(),$M$2:$R$2,1)))+$M$2,"")で「4」を表示しています。
何が違うのか、ネットなどで調べましたが分かりません。
ただ「K4&"'!C"&L4」は「sheet2!C4」を想定していて、その場所のセルで示す文字を表示させようとしています。
しかし直接セルを指定すると「’sheet2’!C4」という文になりK4に当たる「sheet2」がクォーテーションで挟まれますので構文で示すものと「異なる」ことになるのでしょうか?
ネットにでは見つけられませんでしたが「&」を複数使用することはできないのでしょうか?
説明不足なのかも分からないところです、よろしくお願いいたします。

文字を表示させようと=IFERROR(INDIRECT(K4&"'!C"&L4),"")を使用しましたが
INDIRECT(K4&"'!C"&L4)がエラー(#REF!)となり「空欄」になります。これはそのような構文なので理解できます。
K4は=IFERROR(INDEX(($N$1:$R$1),1,MATCH(ROW()-1,$M$2:$R$2)),"")の構文で「sheet2」と、
またL4は=IFERROR(IF($K4="","",IFERROR((HLOOKUP(ROW(),$M$2:$R$3,2,0)),ROW()-HLOOKUP(ROW(),$M$2:$R$2,1)))+$M$2,"")で「4」を表示しています。
何が違うのか、ネットなどで調べましたが分かりません。
ただ「K4&"'!C"&L4...続きを読む

Aベストアンサー

クォーテーションはいらない。

クォーテーションで囲む必要があるのはシート名に空白(スペース)を含むときだけで良い。
どうしても付けたいときには、

 INDIRECT("’"&K4&"'!C"&L4)

のように前にもつけること。

・・・
そのまえに
「sheet2」ではなく
「Sheet2」ではないだろうかと思ったりする。

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qエクセルで左隣シートの特定のセルの値を表示させたい

エクセルで左隣シートの特定のセルの値を表示させたいのですが、
どのようにすればよいでしょうか?

似たような質問の回答をいくつか試したのですが、
よく理解できていないため、うまく応用できずエラーになってしまいます。

="No."&SUBSTITUTE(MID(CELL("filename",$A$1),FIND("(",CELL("filename",$A$1))+1,5),")","")
とか
=INDIRECT(SUBSTITUTE(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))),"日","")-1&"日!A"&ROW(F24))
とか
=SUM(INDIRECT("'"&(SUBSTITUTE(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))),"日","")-1)&"日'!c5"),F24)
とか
といった式が参考になりそうですが、結局どう書き変えればいいのかわかりません。。

具体的には、シート名が「04」「05」…「12」「01」「02」「03」と1年分の12シートあります。
半角2桁のみのシート名です。
05以降のシートには、それぞれF1セルに、
「左隣シートのF24のセルの値を表示させたい」のです。
(F24のセル自体は「=F11+F23」という式が入力されています。)

例の式の「日」とか「row()」とかは必要ないと思いますが、
消しただけではムリそうなのでそのままコピーしています。
おわかりになる方、どうぞよろしくお願いします。

エクセルで左隣シートの特定のセルの値を表示させたいのですが、
どのようにすればよいでしょうか?

似たような質問の回答をいくつか試したのですが、
よく理解できていないため、うまく応用できずエラーになってしまいます。

="No."&SUBSTITUTE(MID(CELL("filename",$A$1),FIND("(",CELL("filename",$A$1))+1,5),")","")
とか
=INDIRECT(SUBSTITUTE(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))),"日","")-1&"日!A"&ROW(F24))
とか
=SUM(INDIRECT("'"&(SUBSTITUTE(RIGHT...続きを読む

Aベストアンサー

05から03までのF1セルに
=INDIRECT(TEXT(RIGHT(CELL("filename",A1),2)-1,"00;;12")&"!F24")
と記入します。

Q複数シートの同じセル内容を1シートに順番に貼り付けたい

複数あるシートの同じ番地のセルをコピーして、1シートの一覧にしたいと思っています。簡単な方法があったら教えてください。

Aベストアンサー

次のようにしてはどうでしょう。
あるシートのA2セルから下方に例えばSheet1,Sheet2などとシート名を入力します。
B1セルには表示したいセル番地を例えばA1のように入力します。他にも表示させたい場合にはC1セルにセル番地を入力します。
そこでB2セルには次の式を入力し右方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。
=IF(OR($A2="",B$1=""),"",INDIRECT($A2&"!"&B$1))

QExcel 表から値をさがして隣のセルの値を返す

お願いします、教えて下さい。
VLOOKUPのようにいまから左端に番号などを入れる手間無く、値を返したいです。

一つの目のbook     2つ目のbook
 A列  B列      A列   B列
顧客   担当    木下麻衣
小野博美 佐藤          ↑
田中香織 吉岡       ここに関数を入れて、B列の金田を返す
木下麻衣 金田   

同シート上で表をふたつ作っても構いません、どなたか教えて下さい。 

Aベストアンサー

質問者さんの意図にあっているかどうかわかりませんが。

内容を見る限りでは2つ目のbookのA列が検索値に
なるようでしたら、

=VLOOKUP(A1,Sheet1!A1:B5,2)

では如何でしょうか?
1つ目のbookをsheet1、2つ目のbookをsheet2で考えてます。
また、左上よりA1としてますので確認ください。

Qexcel INDIRECT 他ファイル参照

INDIRECTの関数を使って,他のエクセルファイル(以下Bファイル)を参照すると,
Bファイルを開いているときは正しく数値を表示しますが,
Bファイルを閉じるとエラー表示になります。

回避する方法は無いでしょうか?

(元ファイルと,Bファイルの両方から参照先に関する情報を得ているので,INDIRECT関数は,必須かと思っています)

参考までに3種類試したソースを示します。
できれば3は避けたいと考えています。
ご意見よろしくお願いします。


1:=INDIRECT("'[★★★Bファイル.xlsx]"&$A27&"'!o$7")
エラー表示になります。

2:=INDIRECT("'"&MID(CELL("filename",$A$1),1,FIND("[",CELL("filename",$A$1))-1)&"[★★★Bファイル.xlsx]"&$A26&"'!o$7")
エラー表示になります。(パスまで含めて参照)

3:='C:\Users\test\[★★★Bファイル.xlsx]213旅費'!O$7
正常(常に数値を表示します)

Aベストアンサー

>回避する方法は無いでしょうか?
INDIRECT関数を使っている限り、回避できません。

外部データの取り込み機能で一時的にデータをすべて持ってくれば、同一ブック内になるので参照できます。
(閉じるときに取り込んだデータを破棄できます)
手間が状況に左右されるので、マクロで3のようにしてしまう方が簡単かもしれません。

Q自分の左隣のセル

セルB1に=A1と入力してますが、
左隣のセルという指定は出来ますか?
行は同じで、列番号-1というように指定したいです。

Aベストアンサー

こんばんは!

当方もNo.2さんと同じ疑問を持ちつつ・・・

とりあえず
=INDIRECT(ADDRESS(ROW(),COLUMN()-1))
という数式を入れておけば、どのセルに数式を入れても
常に左隣のセルが返ります。

※ A列に上記数式を入れるとエラーになります。m(_ _)m


人気Q&Aランキング