エクセル関数について - 数式1, 数式2, 数式3の意味と特定数字の反応しない理由

このQ&Aのポイント
  • エクセルの関数について教えてください。数式1、数式2、数式3の意味と特定の数字が反応しない理由が知りたいです。
  • エクセルの関数を使用して表を作成していますが、数式1、数式2、数式3の意味がわかりません。また、特定の数字を入力しても反応しない理由も教えてください。
  • エクセルの関数について質問です。数式1、数式2、数式3の意味と、特定の数字を入力しても反応しない理由を教えてください。
回答を見る
  • ベストアンサー

エクセルの関数について。

エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こういうQAサイトは本来、質問をする場です。質問者の方々の代わりに、回答者に作業させることが目的ではないのですよね。ですから質問者さんは、前回のご質問のときに、分からない部分があれば回答者に確認し、自分なりにでも内容を理解した上で数式を使うようにされるべきでした。 さて、式の意味について。まず、「数式3」の「Sheet2!B:B」という箇所に「$」が付いていないという件ですが。参照先はSheet2ですから、相対参照、すなわち「$」なしで、問題ないと思います。 各式の意味は、添付図に表示されているとおりにSheet2の値をSheet1に持ってくることで、同一コードのレコードだけを抜き取って表示しているわけですね。 式全体を見て、何か問題があるという感じは、今のところしていません。試しに私の手元でも添付図どおりに入力してみましたが、添付図どおりの結果が表示されました。 添付図は、No.2さんが前のご質問というので回答されたときの図の使い回しですよね?質問者さんが新たに入力されたわけではないのですね? 質問者さんは、正確に添付図どおりに入力されましたか?E~H列に異常があるとのことですが、他の箇所の計算結果はどうですか?また、Sheet1の1行目とか、Sheet2の内容も、そっくり同じにしていますか?さらに、数式は、ウェブページからコピーしたものを使われたでしょうか? 「ある特定の数字を入力しても」とは、一部のコードのみのことですか、それともどんなコードでもダメですか? 使用条件が覆ると、うまく行くものも行かなくなります。この場合、データ量は関係ありません。きちんとご説明ください。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 前回この数式を投稿した者です。 数式の詳しい説明はNo.1さんがしっかりしてくださっているので、まさにその通りです。 本来であれば作業用の列はSheet2に作成して方が判りやすいと思うのですが、 前回の投稿でSheet2には手を加えられない!という条件があったと思います。 そこでSheet1に作業用の列を設けた次第です。 作業列の目的だけ・・・ 作業列1の目的はSheet2のA列(コード)が空白だと検索がかなり難しくなります。 そこで、1セルでもデータが入っているものすべてにコードを表示させています。 作業列2は Sheet1のD2セルと一致するデータのみの行番号を表示させます。 最後の数式で作業列2に入っている数だけ行番号の小さい順に表示させています。 ※ 最後の &"" の部分はSheet2の空白セルを表示してしまうと「0」となりますので、 それを回避するためです。 ただ・・・ D2セルにデータを入れても結果が表示されない!というコトですね? 考えられる原因としては (1)作業列1・2のオートフィルがSheet2のデータがある最終行まで行われていない。 (2)D2セルデータがSheet2のA列にない。 原因としてはこの程度しか思いつきません。 追伸 前回のお礼欄に複数データ抽出が希望だと書いてありましたが、 お示しのレイアウトでは、関数で表示させるとなるとかなり難しくなると思います。 マクロでやれば可能かもしれません。 この程度でごめんなさいね。m(_ _)m

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

最終的にどうしたいのかがわからないので、 とりあえず式の解説だけでも。 数式1 =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) COUNTA関数は、範囲内の「空白以外」のセルの個数を返す関数ですから、 わかりづらく日本語で読んでいくと Sheet2の2行目の空白以外のセルが0個だったら、空白を、 0個じゃなかった場合、Sheet2のA2セルが空白だったら(Sheet1の)A1セルを、 そうじゃない場合はSheet2のA2セルを、返しなさい。 と言う意味です。 Sheet1のA1セルは"作業列1"と言う文字列が格納されていますから、 ここで既におかしなことになりそうな気がします。 数式2 =IF(A2=$D$2,ROW(),"") ROW関数は行番号を返す関数ですから、 A2セルがD2セルと同じなら、行番号を、 違ったら空白を返しなさい。 と言う意味でしょうか。 > フィルハンドルで下へコピー しているようですが、D2が絶対参照されていますので、 どれだけ下にコピーして行っても必ずD2セルを見てしまいます。 大丈夫でしょうか。 数式3 =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") COUNTは範囲内の数値が入力されているセルの個数を返す関数、 INDEX関数はINDEX(範囲,行,列)の形で使用し、範囲内の●行目・○列目のセルを返す関数、 SMALL関数は範囲内で○番目に小さい値を返す関数ですから、これらをまとめると B列内の数値データがROW(A1)つまり、1未満・・0個なら、空白を そうじゃなかったら、INDEX以下の処理をさせる・・と言う意味です。 ここで、SMALL関数を使って、B列でROW(A1)=1番小さい値を求め(■)、 INDEX関数にその値を与えて、B列で上から■行目のセルの値を最終的に返してきます。 これを > E2セルに > オートフィルで列方向・行方向にコピー すると、今度は相対参照ですので、 F2ではINDEX以下の参照列がC列になってしまいます。 見た感じ、C列は全空白のようですので、これは上手くいかないのでは?と想像できます。 最終的な形がハッキリしないので、すいませんが、コレが限界です。

関連するQ&A

  • エクセルで時間を起点として集計

    A列に開始時間、B列は~という文字 C列は終了時間、D列は種類名、E列は値(経過時間)が記載されています 1行目はタイトルで、2行目から始まっています。 A B C D E 07:00 ~ 07:12 バナナ 12 07:20 ~ 07:40 りんご 20 09:00 ~ 09:12 りんご 12 09:20 ~ 09:22 ぶどう 2 09:30 ~ 09:42 メロン 12 13:00 ~ 14:12 すいか 72 このDセルの種類名のカウントと、Dセルに対してEセル経過時間の値の合計値を計算する関数というと物を以前教えて頂きました。 下記の物を使わせて頂いております。 >Sheet1のデータをSheet2に表示するようにしてみました。 >↓の画像で左がSheet1・右側がSheet2とします。 >Sheet1に作業用の列を1列設けます(今回はF列にしています) >F2セルに >=IF(COUNTIF(D$2:D2,D2)=1,ROW(),"") >という数式を入れ、これ以上データはない!というくらいまでしっかり下へオートフィルでコピーしておきます。 >Sheet2のA2セルに >=IF(COUNT(Sheet1!F:F)<ROW(A1),"",INDEX(Sheet1!D:D,SMALL(Sheet1!F:F,ROW(A1)))) >B2セルに >=IF(A2="","",COUNTIF(Sheet1!D:D,A2)) >C2セルに >=IF(A2="","",SUMIF(Sheet1!D:D,A2,Sheet1!E:E)) >という数式を入れA2~C2セルを範囲指定 → C2セルのフィルハンドルで下へオートフィルでコピー! 回答者様のお知恵を借り、とても楽に計算する事ができ、感謝しております。 贅沢な者で、もう少し楽をしたいと欲を出してしまいまして・・・。 この集計で朝の7時~19時までと夜19時~7時までで分けて集計する事は可能でしょうか? 基本的には19時で一度〆るので、19時前と19時後を跨ぐ事はないのですが(18:50 ~ 19:10)←こんな感じには基本ならないのです。 たまに作業が停止する時は(14:00 ~ 6:59)という形で、跨いでしまう事があります。 この場合は19時を跨いだ時点で一度朝の時点での経過時間の計算をし、再度19:00~夜の経過時間を再計上という形をしたいのですが可能でしょうか? 長々となりましたが、お知恵をお貸し下さい。

  • エクセルで非常に困っています。

    昨日、エクセルで複数の条件範囲に合う行を別シートに抽出したいと思い 書き込んだ者です。 http://okwave.jp/qa/q7859821.html 参照して頂ければお分かりになると思います。 教えて頂いた通りに Sheet2のP2セルに(←関らずSheet1の最初のデータがある行に数式をいれます) =IF(AND(Sheet1!A2>=$B$2,Sheet1!A2<=$D$2,Sheet1!O2>=$B$3,Sheet1!O2<=$D$3),ROW(),"") という数式を入れオートフィル Sheet2のA6セルに =IF(COUNT(Sheet1!$P:$P)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$P:$P,ROW(A1)))) と入れたのですが、どうしても検索結果が 宿泊日、人数ともに検索条件と違う行が抽出されてしまいます。 作業列は、間違えてないと考えているのですが、 どうしても検索結果が上手く出ません。 どなたか、お分かりになる方助けて下さい。 宜しくお願いします。

  • エクセルについての質問です。こんなことはできるのでしょうか?

    エクセルについての質問です。こんなことはできるのでしょうか? まず「データ」という名前のシートのA列に動詞,名詞など品詞が入っています。B列に高1,高2など学年が入っています。C列に数字(2や3など)が入っています。D列に英単語が入っています。E列に日本語訳が入っています。F列は作業列でF2のセルに=IF(AND(A2=問題作成!$A$2,B2=問題作成!$B$2,AND(C2>=問題作成!$C$2,C2<=問題作成!$D$2)),ROW(A1),"")が入っており,以下のセルに数式がコピーされています。 次に「問題作成」というシートのA5セルに=IF(COUNT(データ!$F$2:$F$2294)<ROW(A1),"",INDEX(データ!D$2:D$2294,SMALL(データ!$F$2:$F$2294,ROW(A1))))が入っており,以下のセルに数式がコピーされています。B5セルには=IF(COUNT(データ!$F$2:$F$2294)<ROW(B1),"",INDEX(データ!E$2:E$2294,SMALL(データ!$F$2:$F$2294,ROW(B1))))が入っており,以下のセルに数式がコピーされています。 「問題作成」のシートのA2セルは動詞や名詞など品詞が選択できるようになっています。B2セルは学年が選択できるようになっています。 この後,C2セルにWordでページを指定して印刷するときのように,2-3,6,8のように入力すると,「データ」のシートからそのページに該当する単語のみを「問題作成」のA5,B5以下に引っ張ってくるようなことはできますでしょうか? また,入っている数式に問題があれば,お教え願いたいのですが。 よろしくお願いいたします。

  • 関数で対応が可能でしょうか?

    次のような、エクセル表で、関数(IF関数?)を使って、コピーが出来ますか? <sheet1>    A列    B列  C列  D列  E列  F列  ・・・ 1行 タイトル1  1 2行 数式1        2 3行 タイトル2          3 4行 数式2                4 5行                       タイトル1をコピー 6行                       数式1をコピー 7行                       タイトル2をコピー 8行                       数式2をコピー (1)B1=1 且つ C2=2 のとき、A1のタイトル1をF5にコピー (2)B1=1 且つ C2=2 のとき、A2の数式1をF6にコピー (3)D3=3 且つ E4=4 のとき、A3のタイトル2をF7にコピー (4)D3=3 且つ E4=4 のとき、A4の数式2をF8にコピー

  • エクセル2010 検索と抽出

    エクセル2010を 使っています。 以前教えていただいた、数式を改変して応用したいのですが、うまくいきません。 やりたいのは画像の処理で、 B83の値を E列から探しその関連セルであるF列、G列の値を、C列D列に抜き出すという作業です。 改変した数式は以下の様なもので、C83に入力後、オートフィルで使おうと思っていました。 詳しい方、教えていただけませんか? =IFERROR(INDEX(F83:F162,SMALL(IF(E83:E162=B83,ROW(E83:E162)),ROW(A1))),"") (配列数式) 3キー打鍵 よろしくお願い致します。

  • エクセルの空白を詰めて別シートに表示

    sheet1のデータを参照して、空白を詰めてsheet2へ表示させたいんです! sheet1(元データになるもの)  A列 |B列|C列・・・ 1行目A|100|100 2行目B|  |200 3行目C|100| 4行目D|  |200 5行目E|100| 6行目F|  |100 ・ ・ sheet2(sheet1でB列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目C|100 3行目E|100 sheet3(sheet1でC列に入力があるものを抽出)  A列 |B列 1行目A|100 2行目B|200 3行目D|200 4行目F|100 sheet2のA1に下記の式を入力してA列とB列に数式をコピー =IF(COUNT(Sheet1!$B$1:$B$6)<ROW(A1),"",INDEX(Sheet1!A$1:A$6,SMALL(IF(Sheet1!$B$1:$B$6<>"",ROW($A$1:$A$6)),ROW(A1)))) すると下記のように表示されます。 A1=A     B1=100 A2=#NUM! B2=#NUM! A3=#NUM! B3=#NUM! 4行目から空白 sheet2のA2のところにエラーが出ていますが、「関数の引数」のところで「数式の結果」には「100」と 正解が表示されています。(B2、A3、B3も同様に)数式の結果のところには正解が表示されています。 答えの「#NUM!」のところに正解を表示させるには、どうしたらいいですか? 見よう見まねでつくったのもで。。。関数にあまり詳しくありません。 よろしくお願い致します。

  • エクセル関数2

    シート(1) A B C D 作業列    コード    顧客名     金額 3        300001     A 10,000 3        300002   B 15,000 3        300003   C 20,000 3        300004   D 25,000 3        300005   E 30,000 4        400001   F 35,000 4        400002   G 40,000  4 400003 H 45,000 4 400004 I 50,000 4 400005 J 55,000         シート(2) A B C D E F 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でVLOOKUP関数を使い‥シート2の10,000のセルの場合、 VLOOKUP(C$2,sheet1!$A$3,$D$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。

  • エクセル2003の、関数を教えてください。

    エクセルの関数で、三つの条件を満たし、なおかつその中の1つは除く数式を探しています。 たとえば、A列  B列  C列      担当 売上月 区分      山本 1月   市      田中 2月   町      鈴木 済    国 としますと、担当が山本で、区分が市 となっている 済を除いた数 がいくつなのか? を数えたい場合、どんな関数を使えばいいのでしょうか? ここで教えていただいた方に、下記の方法を教えていただきやってみたのですがうまくいきません・・・何かがいけないのでしょう・・・ 1.D列に[判定]などの項目で、以下の数式を記述。  =IF(A2="山本",IF(B2<>"済",IF(C2="市","対象",""),""),"")   ※2行目(D2)への記述例です。 2.1の数式をD2から下方向へコピー。   ※データ終了行まで 3.(例えば)E列の1行目などに、以下の数式を記述。  =COUNTIF(D2:D100,"対象")   ※データが100行存在する場合の記述例です。 これで、3.の  =COUNTIF(D2:D100,"対象")  を貼り付けましたが 0 と出てしまいます

  • エクセルでお聞きします。

    こちらのサイトの回答を参考に、セルに下記のような式が入れました。 他のシートや他のセルにも同様の式が入っているのですが割愛致しました。 通常Sheet1のB列は空白なんですが、もし何か文字が入っていたら その行に関してはこの式を反映させない方法を教えて下さい。 (Sheet2) B列 =IF(ROW(E1)>COUNT('Sheet1'!$E$4:$E$505),"",INDEX('Sheet1'!E$1:E$505, SMALL(INDEX(SUBSTITUTE(('Sheet1'!$E$4:$E$505<>"")*1,0,10^5)*ROW('Sheet1' !$E$4:$E$505),),ROW(E1)))) D列 =IF(ROW(C1)>COUNT('Sheet1'!$E$4:$E$506),"",INDEX('Sheet1'!C$1:C$505, SMALL(INDEX(SUBSTITUTE(('Sheet1'!$E$4:$E$505<>"")*1,0,10^5)*ROW('Sheet1' !$E$4:$E$505),),ROW(C1))))

  • excelで、数式がそのまま文字として張り付いてしまう!

    Sheet2の1行目のセルに A1には=Sheet1!A1、B1には=Sheet1!C1、C1にはSheet1!E1 というSheet1の1列おきを引っ張ってくるわりと簡単な数式を入れました。 A~Cはうまく引っ張ってきたのですが、 D列を新しく作ろうと思い、A1のセルをコピペして、 =Sheet1!A1のAをGに変えたら、 D1のセルに数式が「=Sheet1!G1」というふうに そのまま文字として張り付いてしまいました。 これはイカンと思い、D1のセルに直接数式を打ち込んだりしましたが、 状況は変わりません。 ちょっと困っています。 よろしくお願いします。

専門家に質問してみよう