• ベストアンサー

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

初めて質問します。解る方がいたら教えていただきたく書き込みします。エクセルで台帳を作成するため、sheet1に次の通り情報を入力しました。    A  B    C     D 1 日付 名前  住所   申請事由   2 1/1 甲川  東京都    1 3 1/2 乙本  大阪府     1 4 1/2 丙藤  北海道    2 5 2/1 甲山  京都府     3 ・ ・  ・  ・        ・ そして、sheet2に申請事項1の人の情報を、sheet3に申請事項2の人の情報を、sheet4に申請事項3の人の情報を空白を開けずに次の通り詰めて入力したいのです。 sheet2(申請事由1の人)     A      B      C 1  日付  名前   住所 2  1/1 甲川  東京都 3   1/2 乙本  大阪府 4 ・   ・    ・ sheet3(申請事由2の人)     A      B      C 1  日付  名前   住所 2  1/2   丙藤  北海道 3 ・   ・    ・ 4 ・   ・    ・ sheet1に日付、名前等を入力しただけで、各事由事に他のsheetに詰めて入力されるよう関数式で入力することは可能かどうか教えてください。よろしくお願いします。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.1

◆こんな方法はいかがでしょうか? ★Sheet1    A    B       C      D 1  日付  名前    住所  申請事由   2  1/1   甲川   東京都    1 3  1/2   乙本   大阪府    1 4  1/2   丙藤   北海道    2 5  2/1   甲山   京都府    3 ★Sheet2    A    B       C      D 1   1 2  日付  名前    住所  申請事由   3  1/1   甲川   東京都    1 4  1/2   乙本   大阪府    1 ★Sheet2のA1に抽出したい申請事由「1」を入力します A3=IF(ROW(A1)>COUNTIF(Sheet1!$D$1:$D$100,$A$1),"",INDEX(Sheet1!A$1:A$100,SMALL(INDEX(SUBSTITUTE((Sheet1!$D$1:$D$100=$A$1)*1,0,10^5)*ROW($1:$100),),ROW(A1)))) ★この式を右と下にコピー ★ただし、A列の日付はシリアル値になっていますので、表示形式を「日付」にしてください ◆A1を「2」、「3」に変更するとそれぞれのデータが抽出、表示されます

asahijp
質問者

お礼

返事遅くなってしみませんでした、今回教えてもらったとおりにやったら無事解決しました。ありがとうございます。ちなみに最後だけ教えてください。SUBSTITUTE((Sheet1!$D$1:$D$100=$A$1)*1,0,10^5)の10^5はどういう意味なんでしょう?検索してみたのですが、解決できませんでした・・・

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>初めて質問します 私にとっては毎日同じ類型の質問を読まされています。 1条件抜き出し問題です。 ーー エクセルでの回答類型は (1)関数    A.作業列を使わない(既出。回答の式の理解が初心者には無理)    B.作業列を使う(いくらか判りやすい) (2)VBA (3)操作(フィルタなど) (4)他ソフト利用 などあり、一般の初心者的質問者は(2)(3)の回答に思いも行かず、関数でを期待しているようだ。しかし関数では、抜き出しは得意ではない。ふさわしい機能ではない。それをまず知っておくべきだ。 許されるなら、フィルタなどで対処するのがエクセルの本筋かなと思う。 (1)Bの類型の回答で A1:D6(E1:E6は式の結果を前もって掲出) 日付 名前 住所 申請事由 連番 1月1日 甲川 東京都 1 1 1月2日 乙本 大阪府 1 2 1月2日 丙藤 北海道 2 2月1日 甲山 京都府 3 2月2日 岩田 福井県 1 3 E列の連番列は =IF(D2=1,MAX($E$1:E1)+1,"") と入れて下方向に式を複写する。 結果上記の通り。 Sheet2に行って A1:D1の見出しはコピー張り付けしておくとして、 A2に =INDEX(Sheet1!$A$1:$D$6,MATCH(ROW()-1,Sheet1!$E$1:$E$6,0),COLUMN()) と入れてD2まで式を複写。 A2:D2を範囲指定しD4で+ハンドルをだし、A4:D4まで式を複写。 結果 日付 名前 住所 申請事由 2008/1/1 甲川 東京都 1 2008/1/2 乙本 大阪府 1 2008/2/2 岩田 福井県 1 ただし第5行以下まで式を複写するとエラーが表示されるが、WEBで 「imogasi方式」で照会すれば、沢山同類の回答が出るのでその中に書いてある。また他の回答類型も当然載っている。 ーー しかし 申請事由2になると別列の作業列が要る。そういう欠点を抱えている。 今までは1区分の抜き出しで終わりが多かった。 ーー 本当はVBAででも使ってやらないとすっきりしないのかも知れない。 ーー お勧めは、質問者の程度なら、 別シートにコピー 申請事由でソート 目視で申請事由コードの区切りを捉え、その区間をコピーし 別シートに張り付け 上記申請事由コード数だけ繰り返し。 (これをマクロの記録をとって改変すると、VBAの1方法になる。)

asahijp
質問者

お礼

返事遅くなって申し訳ありません。今まで結構同じ質問が出ていたとは私が過去の質問をあまりよく見てなかったようです。ただ皆さん同じようなことで悩んでいるんだな、とも思いました。エクセルもこういう作業が容易にできればいいのにと思います。今までVBAは全く無知でしたが、せっかくなので、少しづつ勉強していきたいと思います。ありがとうございました。

関連するQ&A

  • エクセルVBAでできますか?

    以前ここでこんな質問をさせていただきました。 ________________________________________________ エクセルで台帳を作成するため、sheet1に次の通り情報を入力しました。    A  B    C     D 1 日付 名前  住所   申請事由   2 1/1 甲川  東京都    1 3 1/2 乙本  大阪府     1 4 1/2 丙藤  北海道    2 5 2/1 甲山  京都府     3 ・ ・  ・  ・        ・ そして、sheet2に申請事項1の人の情報を、sheet3に申請事項2の人の情報を、sheet4に申請事項3の人の情報を空白を開けずに次の通り詰めて入力したいのです。 sheet2(申請事由1の人)     A      B      C 1  日付  名前   住所 2  1/1 甲川  東京都 3   1/2 乙本  大阪府 4 ・   ・    ・ sheet3(申請事由2の人)     A      B      C 1  日付  名前   住所 2  1/2   丙藤  北海道 3 ・   ・    ・ 4 ・   ・    ・ sheet1に日付、名前等を入力しただけで、各事由事に他のsheetに詰めて入力されるよう関数式で入力することは可能かどうか教えてください。よろしくお願いします。 ______________________________________________ その際、関数でするやり方を教えてもらったのですが、(A3=IF(ROW(A1)>COUNTIF(Sheet1!$D$1:$D$100,$A$1),"",INDEX(Sheet1!A$1:A$100,SMALL(INDEX(SUBSTITUTE((Sheet1!$D$1:$D$100=$A$1)*1,0,10^5)*ROW($1:$100),),ROW(A1))))というやり方)何しろデータが10000件くらいあり、かなり処理速度が重いです。どなたかマクロで上記の処理の方法を教えていただけませんでしょうか?

  • EXCELのIF関数の使い方

    わかりづらいかもしれませんが、よろしくお願いします。 シート1とシート2があり、シート2にはA、B、C3つの列にそれぞれのグループ(各50名ほど)が並べてあります。 ここで、シート1のA1に特定の名前をいれ、 シート2のA列なら甲、B列なら乙、C列なら丙といった値を、 シートB1に自動的に打ち出してくれる数式を教えてください。よろしくお願いします。

  • エクセルで照合に適切な関数を教えてください。

    すっごく困っているのでよろしくお願いします。 sheet1・・・Aの情報  sheet2・・・Bの情報 sheet3・・・二つの照合結果 A・Bはそれぞれ入力件数、並び順(行・列)もまったく違います。 例) sheet1・sheet2  A列・・・都道府県  B列・・・市区  C列・・・町 件数は同じ東京都○○区でもC列の町名が違った場合は、複数件になります。

  • エクセル関数について

    いつもお世話になります。 ”管理”と”リスト”というシートがあります。 ”管理”シートは A1    B1    C1・・・・・ 番号   名前   住所・・・・ と、情報が管理してあります。 ”リスト”シートのB3に番号を入力するセルを作りB11に =IF($B$3="","",VLOOKUP($B$3,注文管理!$A$3:$AE$9880,31)) という関数を入れて、”管理”シートの該当セルに記入があるなら B11に返すようにしています。B11に答えが返った場合、D4に「★備考あり★」と返したいのですが、 =IF(B11>1,"★備考あり★",IF(B11<1,"")) の関数を使うと、もともとB11には関数が入っているのでずっと「★備考あり★」のままです。 これを、B11に答えが返ってきた時のみ「★備考あり★」とする関数はありますか?

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

    入力シートにデータがあり、請求書シートに期間を参照して日付を埋め込みたいと考えています。 期間というものは、請求シートの請求日の前月1ヶ月間を考えています。 入力シート    a    b     c     d 1 日付  商品1  商品2  商品3 2 12/7    100   200   300 3 12/15    40    50   60 4 1/7      70    80   90 請求シート  請求日(AR3)  請求内訳日付欄(C12:C42) C12などの欄の数式で、セルAR3の日付の前月の日付範囲で入力シートの日付欄を抽出したいのです。 いろいろ調べましたが、なかなかうまくいかず困っています。 参考となる数式を教えていただければ、助かります。

  • エクセル

    シート1~5まであります。別に情報シートを作成しています それぞれ同じ原本から作成しています 全部のシートにA1~A10のセルに日付、B1~B10のセルに文字など入力がするところがあります 入力はA1から順番に入れていきます 例えば 保存ボタンを作成しておく シート1のA1に日付、B1に”文字”を入力し、保存ボタンをおす 情報シートに日付と内容が一致する情報がなければ、 情報シートのA列にシート名、B列に日付、C列に入力した内容が 空白のところに出力される こんな感じに作成できないでしょうか?

  • エクセル・if関数

    シート名「計算式」のセルA1には日付の入力 シート名「計算式」のセルB1には計算式が入力されている シート名「計算式」のセルB1は別シート セルC1にリンクしている シート名「計算式」のセルA1に入力した日付が 2008/12/31以降ならば、 別シート セルC1の数字を100倍にしたい場合の 関数を教えていただきたく思います。 質問が分かりづらくて申し訳ありません。 よろしくお願いいたします。

  • エクセル関数につきまして

    皆様の知識を頂きたく、投稿させて頂きます。 EXCELのVLOOKUP関数なのですが、2個の条件から一致する項目を選ぶ事は出来ないのでしょうか? たとえばですが、 ≪参照シート≫ A   B   C   コード 数量  日付 → タイトル行 1   1    1/1 2   1    1/1 1   2    1/2 2   2    1/2 ≪入力シート≫ A   B   C  ~ コード 1/1  1/2  ~ 1 2 といった感じで、入力シートと参照シートのコードと日付が一致するデータを取り出したいのです。 VLOOKUPを重ねて使用したりとか、HLOOKUPを使用したり等考えたのですが、うまくいきませんでした。 現在使用しているのは、Microsoft Office EXCEL2003になります。 どなたかご教授下さい。 よろしくお願い致します。

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

    こんにちは。 画像のように、B列に名前、C列以降に日にちがあります。C3にまると入力するとvlookupによって、別シートに○と入力されるようになっています。 ここからが質問なのですが、例えば、シートの名前の順番を変えた場合、別シートでは vlookupの検索値をC3やD5にしているため、シートと別シートの名前(記号)が異なってしまいます。 メインシートの名前順を変えたら、別シートに反映される関数や、やり方はあるでしょうか?(名前欄2行になっています) よろしくお願いします。

  • エクセル2013関数について

    エクセル2013について教えてください。 sheet1には出席者の名簿一覧を入力しています。 sheet2には支払い済の人の名前を入力しています。 sheet1の名簿の横に sheet2の支払い済みが分かるように『○』を表示させたいのですが エクセル初心者のため、関数がよくわかりません。 詳しい方、わかりやすく教えていただけませんでしょうか。 ちなみに sheet1のC7~C600まで名前が入力してあり E7~E500に『○』を表示させたいです sheet2はA2~A500まで名前が入力してあります 分かりづらく申し訳ありません

専門家に質問してみよう