[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『関数のなかであるセルを参照する』(和代)
お世話になります。
A3からA33迄、1日から31日の日にちが並んでいます。
B2からAS3迄、名前が表示されています。
B3の式は=(IFERROR(VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE),""))&" "&('1日'!$T$7&" ― "&'1日'!$U$7)
上記関数で1日はシート名を表わします。シート名は31日迄あります。
*上記関数の式を2日から31日迄とASの名前迄(B3〜AS33)にコピーしたい
のですが、行、列以外のシート名はコピーするときに自動で変化しません。
いちいち、一つの関数を4箇所の日を手で替え、それを全箇所を修正するのは、3行ほど
やり始めたのですが、細かい箇所を修正するので目が疲れて来ました。
そこで色々考えて、AV3〜AV33迄の場所に1日から31日表示しました。
そしてB3の式の1日をAV3に入れ替えるとAV列の1日が表示されると思ったのですが#REF!になります。
どなたかご教示して頂けないでしょうか?
< 使用 Excel:Excel2007、使用 OS:Windows7 >
INDIRECT関数? (GobGob) 2014/09/19(金) 16:33
あぁ。。。シート名ね。。。。
=REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A2)),"")
これでシート名取得
んで、INDIRECT。
=INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A2)),"")&"'!T7")
見たいな感じ? (GobGob) 2014/09/19(金) 16:37
?@=INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A2)),"")&"'!T7")は
?@の式は、具体的には何処に入れるのでしょうか?
また下記B3の式に応じて答えを表示するようにしているのですが、−−−?@とB3の式の関連は
どのようになるのでしょうか?教えて下さい。
B3の式は=(IFERROR(VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE),""))&" "&('1日'!$T$7&" ― "&'1日'!$U$7)
(和代) 2014/09/19(金) 17:03
数式のシート名&セル参照してる所を例示したINDIRECT関数式に置き換える ですわ。
(GobGob) 2014/09/19(金) 18:06
INDIRECT関数を使う話なら [[20140820133226]] 『項目の配置が違うデータの抽出』(和代) でやったと思いますが。。。 (HANA) 2014/09/19(金) 18:29
今、会社から帰ってきました。
会社にファイルがありますので
明日午後から出社したときに確認を致します。
(和代) 2014/09/19(金) 19:01
HANA様が別シートは必要ないのではと言われ、その通りだと思い削除しました。
後に使用する担当者が、残業も入れてほしい(当初は残業する人は一人でまれな為にいらないと言って
いました)
と言われ項目を増やした為にやむをえず=(IFERROR(VLOOKUP('1日'!$S8&"_"&'1日'!$T8,マスターコード結合!$F$2:$G$66,2,FALSE),"")) &" "&('1日'!$S8&" ― "&'1日'!$T8) の$S8&"_"&$T8の前後STをTUに
変更しました。それをコピー貼り付けするときにシート名だけが変化しませんでした。
GobGob様へ
「数式のシート名&セル参照してる所を例示したINDIRECT関数式に置き換える」−−−
色々置き換えたのですが「引数が多すぎます」とメッセージが出てうまく行きません。
(あてすっぽうに入れた一例です):=INDIRECT("'"&REPLACE(CELL("1日",$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE),""),1,FIND("]",CELL("1日",$T$7&" ― "&'1日'!$U$7)),"")&"'!T7")
私は応用が利きませんので、コピー元の関数を教えて下さい。お願い致します。
(和代) 2014/09/20(土) 16:45
まずはヘルプをみてみたら?
=INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!T7")
「T7」ってのを変更するだけ。
=(IFERROR(VLOOKUP(INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!T7") &"_"&INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!U7") ,マスターコード結合!$F$2:$G$66,2,FALSE),""))&" "&(INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!T7") &" ― "&INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!U7") ) (GobGob) 2014/09/22(月) 08:00
↓ の最後のコメントだけ読むと、既に解決したようなことが書かれていますね。 [[20140820133226]] 『項目の配置が違うデータの抽出』 シートの状況等がよくわからないのですが、 やりたいことを簡単に言うと ↓ のようなことではないのでしょうか?
=VLOOKUP('1日'!$C$1,F:G,2,FALSE)
この数式のシート名(1日〜31日)を1個1個手直しせずに、 オートフィルすればシート名が変わる方法。 A1からA31に「1日」から「31日」までが入力されているとして
B1 =IFERROR(VLOOKUP(INDIRECT("'"&A1&"'!C1"),F:G,2,FALSE),"")
B31までコピーします。
それともINDIRECTは揮発性関数なので使いたくないということなのでしょうか? (ウルトラマリン) 2014/09/22(月) 13:58
GobGob様
有難うございます。
下記の通り入力しましたが、「入力した数式は正しくありません」と出ました。
=(IFERROR(VLOOKUP(INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!T7")&"_"&INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!U7"),マスターコード結合!$F$2:$G$66,2,FALSE),""))&"&" ― "&INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!U7") "&(INDIRECT("'"&REPLACE(CELL("filename",A1),1,FIND("]",CELL("filename",A1)),"")&"'!T7")
どこが違っているでしょうか?
ウルトラマリン様
有難うございました。
B1 =IFERROR(VLOOKUP(INDIRECT("'"&A1&"'!C1"),F:G,2,FALSE),"")←&"'!C1"とは何でしょうか?
これがわかれば本来の下記の式に入れたいと思いますが、宜しくお願い致します。
*本来の式は、(B3から結果が入ります。)B3 =(IFERROR(VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスター
コード結合!$F$2:$G$66,2,FALSE),""))&" "&('1日'!$T$7&" ― "&'1日'!$U$7)の式です。
意味は、1日のT7(出勤時間)とU7(退勤時間)をシート名:マスターコード結合(コード番号と出勤退勤の時間を&でくくりコードの時間帯を縦列に並べています。)
一例、(31 B1 9 ― 13)--T7が9時、U7が13時ならば、?@1 B1です。プラス
"&('1日'!$T$7&" ― "&'1日'!$U$7)---?A出勤時間と退勤時間が表示 B3の結果は?@+?Aで、
(31 B1 9 ― 13)になります。
(和代) 2014/09/22(月) 17:47
> B1 =IFERROR(VLOOKUP(INDIRECT("'"&A1&"'!C1"),F:G,2,FALSE),"")←&"'!C1"とは何でしょうか?
簡単な例として ↓ の式で説明しています。 =VLOOKUP('1日'!$C$1,F:G,2,FALSE)
VLOOKUPの検索値が全てのシートでC1だとしたらということです。 ですので、それはC1セルのことです。
"'!C1" ← 「"」で囲っていますから、これは文字列。 右下どちらにコピーしても変化しませんので「$」を付ける必要はありません。 質問を読んで、疑問に思うところがありますので、それも書いておきます。
> A3からA33迄、1日から31日の日にちが並んでいます。 > そこで色々考えて、AV3〜AV33迄の場所に1日から31日表示しました。 A3:A33 と AV3:AV33 は何がどう違うのでしょうか? > B2からAS3迄、名前が表示されています。
2行目と3行目に名前が表示されているんですよね? なのにそのVLOOKUPの式を入れるセルもB3からなんですか? それとも名前が表示されているのは2行目だけの間違いなんでしょうか? > B3 =(IFERROR(VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE),""))&" "&('1日'!$T$7&" ― "&'1日'!$U$7)
この式をB3から右方向にもコピーするんですよね? これでしたら、右にどこまでコピーしても全部同じ結果になると思うんですが、そんなことありませんか?
A3:A33に「1日」から「31日」が入力されているとして 元が下の式だとすれば
=VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE) ↓ =VLOOKUP(INDIRECT("'"&A3&"'!T7")&"_"&INDIRECT("'"&A3&"'!U7"),マスターコード結合!$F$2:$G$66,2,FALSE)
右方向にもコピーする場合は A3 → $A3 に(ただし右方向の結果は全て同じ) > T7が9時、U7が13時ならば、?@1 B1です。 > ---?A出勤時間と退勤時間が表示 B3の結果は?@+?Aで
文字化けでしょうか、何が書いてあるのかよくわかりません。 (ウルトラマリン) 2014/09/23(火) 13:15
「そこで色々考えて、AV3〜AV33迄の場所に1日から31日表示しました。」ーー何故このように
書いたのかわかりません。日付は、A3:A33 が正しいです。迷わせてすみませんでした。
「B2からAS3迄、名前が表示されています。」−−AS2迄です。
「それとも名前が表示されているのは2行目だけの間違いなんでしょうか?」その通りです、
これも何でAS3としたのかわかりません。すみませんでした。
「この式をB3から右方向にもコピーするんですよね?、
これでしたら、右にどこまでコピーしても全部同じ結果になると思うんですが、そんなことありません?」 −その通りです、それで同じ結果になるので手で変更します。例えばTU列を7から8、910、と 右に最後の名前の人迄数値を変更していきます。そして横列の名前をコピーして、B3からB33迄に 貼り付をしたのです。
「 T7が9時、U7が13時ならば、?@1 B1です。
---?A出勤時間と退勤時間が表示 B3の結果は?@+?Aで 文字化けでしょうか、何が書いてあるのかよくわかりません。」 −−文字化けです。下記のことを書きたかったのです。 T7が9時、U7が13時ならば、シート名:マスターコード結合より、参照範囲!$F$2:$G$66,2の中に 9−13があればG列、コードの31 B1を表示します。そして"&('1日'!$T$7&" ― "&'1日'!$U$7)の式に より出勤と退勤の時間を表示させ、B3の関数の結果は31 B1 9−13となります。この結果を コピー、貼り付けをしたかったのです。
A3:A33に「1日」から「31日」が入力されているとして 元が下の式だとすれば
?@=VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE) ↓ ?A =VLOOKUP(INDIRECT("'"&A3&"'!T7")&"_"&INDIRECT("'"&A3&"'!U7"),マスターコード結合! $F$2:$G$66,2,FALSE)
?AをB3に入力すれば #N/Aになります。
(和代) 2014/09/23(火) 20:05
本題とは関係ありませんが、丸数字は文字化けするので (1) (2) 等にしてください。 (Mook) 2014/09/23(火) 20:14
> B3に入力すれば #N/Aになります。
B3に ↓ の式を入れたらどうなりますか? =VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE)
この式だったらエラーにならず正しい値が返るのに、 INDIRECTを使った方の式はエラーになるということでしょうか?
こちらで試してみましたが、上の式が正しい値を返しているのであればエラーにはなりません。 #REF! ではなく #N/A なんですよね? もう一度よく確認してみてください。 それが解決してから ↓ に進んでください。
> それで同じ結果になるので手で変更します。例えばTU列を7から8、910、と
B列はT7セルが検索値で、右方向にコピーしたらT8、T9、T10……になればいいんでしょうか?
INDIRECT("'"&A3&"'!T7") ↓ INDIRECT("'"&$A3&"'!T"&COLUMN(G3))
上のように変更すればいちいち手で変更しなくても、オートフィルでコピーするだけで T7、T8、T9、T10……と変化します。 COLUMN(G3) はG列の列番号を返しますから「7」のことです。
最終的には
B3 =IFERROR(VLOOKUP(INDIRECT("'"&$A3&"'!T"&COLUMN(G3))&"_"&INDIRECT("'"&$A3&"'!U"&COLUMN(G3)),マスターコード結合!$F$2:$G$66,2,FALSE)&" "&INDIRECT("'"&$A3&"'!T"&COLUMN(G3))&" ― "&INDIRECT("'"&$A3&"'!U"&COLUMN(G3)),"")
この式を下に33行目までオートフィルし、そのまま右方向にオートフィルします。 この式を入れたがために動きが重くなるかどうかは、そちらの環境で確認してみてください。 > そして横列の名前をコピーして、B3からB33迄に貼り付をしたのです。 おっしゃっている意味がわかりませんでしたので、これについては何も考えていません。 (ウルトラマリン) 2014/09/24(水) 03:23
(和代) 2014/09/24(水) 08:29
B3に入力すれば #N/Aになります。
[B3に ↓ の式を入れたらどうなりますか? =VLOOKUP('1日'!$T$7&"_"&'1日'!$U$7,マスターコード結合!$F$2:$G$66,2,FALSE) この式だったらエラーにならず正しい値が返るのに、 INDIRECTを使った方の式はエラーになるということでしょうか? こちらで試してみましたが、上の式が正しい値を返しているのであればエラーにはなりません。 #REF! ではなく #N/A なんですよね? もう一度よく確認してみてください。]
私は、> B3に入力すれば #N/Aになります。と#REFではなく#N/Aと書いていますが‐‐‐
最終的には B3 =IFERROR(VLOOKUP(INDIRECT("'"&$A3&"'!T"&COLUMN(G3))&"_"&INDIRECT("'"&$A3&"'!U"&COLUMN(G3)),マスターコード結合!$F$2:$G$66,2,FALSE)&" "&INDIRECT("'"&$A3&"'!T"&COLUMN(G3))&" ― "&INDIRECT("'"&$A3&"'!U"&COLUMN(G3)),"")でうまくいきました、これでほっとしました。あとは今後利用できますように覚えていきます。
有難うございます。
(和代) 2014/09/24(水) 20:53
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.