• ベストアンサー

エクセルにて、別シートから柔軟に未納者を取り出したいです

はじめまして。 エクセルに、このようなシートがあります。 (1月~12月まで、12シート) A ナンバー B 氏名 C ふりがな D~Hまで使用料金など I 受領日 この中から、月ごとの料金未納者一覧を別シートに割り出したいので、 「未納者リスト」というシートを、新たに作成しました。 A ナンバー B 氏名 C ふりがな D 4月 E 5月 F 6月… 受領日セルには、受領した場合、日付が入っています。 未納の場合は空白です。 仮に、4月が空白(未納)だった場合には、 未納者リストシートの4月に、「未納」であると表示したいです。 ただ、月ごとに、若干、利用者さまが増減しますので、 普通のVLOOKUP関数を入れただけでは、 単純にその月に利用していない方まで「未納」になってしまい、うまく引き出せません…。 柔軟に、月ごとの未納者さまをうまく取り出すには、 どうしたらよろしいのでしょうか? 良いお知恵をお持ちの方、 ぜひ、ご教授いただけますと幸いです。 どうかよろしくお願いいたします。

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

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

こういうシートの組み換え、のようなことは、関数では不得意だと思います。 年の途中の新規顧客についても、扱いが難しい。 本来アクセスででも扱って、それも易しく無い課題だと思います。 其れでエクセルVBAでやってみたのですが1点疑問があります。 (1)受領日は本来4月に受け取るべき4月分を5月に受け取った場合受領日はどちらに入力されますか。 下記は、もらうべき月に入力すると仮定します。 === 4-6の3月分に簡略化。項目も最小限にした。 例データ  「4月」シート 氏名 受領日 aaa bbb 2009/4/1 ccc 2009/4/27 ddd 2009/4/3 eee 2009/4/11 fff ggg 3009/4/23 ーーーーーーーーーー 「5月」シート 氏名 受領日 aaa 2006/5/14 bbb 2009/5/1 ccc ddd 2009/5/3 eee 2009/5/11 fff 2009/5/12 kkk iii 2009/5/12 ーーーー 「6月」シート 氏名 受領日 aaa bbb 2009/6/1 ccc ddd 2009/6/3 eee 2009/6/11 fff hhh 2009/6/11 iii ーーーーーーーーーー 「集積」シート(途中の表) aaa 4月 aaa 2006/5/14 5月 aaa 6月 bbb 2009/4/1 4月 bbb 2009/5/1 5月 bbb 2009/6/1 6月 ccc 2009/4/27 4月 ccc 5月 ccc 6月 ddd 2009/4/3 4月 ddd 2009/5/3 5月 ddd 2009/6/3 6月 eee 2009/4/11 4月 eee 2009/5/11 5月 eee 2009/6/11 6月 fff 4月 fff 2009/5/12 5月 fff 6月 ggg 3009/4/23 4月 hhh 2009/6/11 6月 iii 2009/5/12 5月 iii 6月 kkk 5月 6月 ーーー 結果 日付のセルは日付の表示形式を設定のこと。 「月別」シート - 4月 5月 6月 aaa - 2006/5/14 bbb 2009/4/1 2009/5/1 2009/6/1 ccc 2009/4/27 ddd 2009/4/3 2009/5/3 2009/6/3 eee 2009/4/11 2009/5/11 2009/6/11 fff - 2009/5/12 ggg 3009/4/23 hhh - - 2009/6/11 iii - 2009/5/12 kkk ーは空白セル(左寄せされないように入れたもの) ーーーー コード 標準モジュール Sub test01() x = Array("4月", "5月", "6月") k = 2 For Each sh In x MsgBox sh d = Sheets(sh).Range("A65536").End(xlUp).Row MsgBox d MsgBox k Sheets(sh).Range("A2:B" & d).Copy Sheets("集積").Range("A" & k) For i = k To k + d - 1 Sheets("集積").Range("C" & i) = sh Next i k = k + d - 1 Next '---- Sheets("集積").Range("A2:C" & k).Sort Key1:=Sheets("集積").Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub Sub test02() Dim sh1, sh2 Set sh1 = Sheets("集積") Set sh2 = Sheets("月別") d = sh1.Range("A65536").End(xlUp).Row MsgBox d k = 2 'kは月別の行 j = 1 'jは月別の列 m = sh1.Cells(1, "A") sh2.Cells(k, j) = m j = sh2.Range("B1:D1").Find(sh1.Cells(2, "C")).Column sh2.Cells(k, j) = sh1.Cells(1, "B") For i = 2 To d If sh1.Cells(i, "A") = m Then '上行と同じ得意先 j = sh2.Range("B1:D1").Find(sh1.Cells(i, "C")).Column sh2.Cells(k, j) = sh1.Cells(i, "B") Else '得意先変わった k = k + 1 j = 1 m = sh1.Cells(i, "A") sh2.Cells(k, j) = m j = sh2.Range("B1:D1").Find(sh1.Cells(i, "C")).Column sh2.Cells(k, j) = sh1.Cells(i, "B") End If Next End Sub 私も時間がかかった。実際の質問者の場合に上記コードを修正できるかな。

kome73
質問者

お礼

ありがとうございます、 利用料に関して、仰られる通り、4月分に関しては、 5月に料金を受け取ったとしても、4月に入力されます。 VBAはまったく使ったことがないのですが、 懇切丁寧に考えてくださり、心より感謝の限りです。 本当にありがとうございます。 専門家の方でもお時間がかかったとのこと、 あたたかなお気持ちに感謝いたしますとともに、 そのご労力を、何とか自分の表に反映させたいのですが、 どうしていいのかわかりません…(>_<)。

kome73
質問者

補足

ありがとうございます、 利用料に関して、仰られる通り、4月分に関しては、 5月に料金を受け取ったとしても、4月に入力されます。 VBAはまったく使ったことがないのですが、 懇切丁寧に考えてくださり、心より感謝の限りです。 本当にありがとうございます。 専門家の方でもお時間がかかったとのこと、 あたたかなお気持ちに感謝いたしますとともに、 そのご労力を、何とか自分の表に反映させたいのですが、 どうしていいのかわかりません…(>_<)。

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

未納者リストシートの1行目は項目名や4月、5月、6月・・・などが入力されているとして、4月のシートはシート名が4月のようになっているとします。 ナンバー、氏名、ふりがなは予め入力されているとします。 D2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(OR($A2="",D$1="",ISERROR(INDIRECT(D$1&"!A:A"))),"",IF(COUNTIF(INDIRECT(D$1&"!A:A"),$A2)=0,"",IF(INDEX(INDIRECT(D$1&"!I:I"),MATCH($A2,INDIRECT(D$1&"!A:A"),0))<>"","","未納")))

kome73
質問者

お礼

ありがとうございます、 関数を入れてみましたら、 未納の方は、きれいに未納表示されるようになりました! ですが、月別で、その月に利用しなかった方は、 利用料を頂いてはいけないのですが、 そういった方に関しても、「未納」になってしまいます… ここを修正できますと完璧なのですが、 なんとかなりませんでしょうか…?(>_<)

kome73
質問者

補足

先ほど、お礼に書かせていただきました点ですが、 無事、利用していない方は排除されるのを確認しました。 わたしのミスだったようです、本当にすみません。 ご協力とお力添えに、本当に感謝しています。 無事に表が完成しました。 ありがとうございます。

関連するQ&A

  • Excel 別ファイルからのデータ抽出

    OfficeXP-Excelにて質問させて頂きます。 以下のような異なるファイルが2つあります。 ------------------- [ファイルA]     A         B     C     D     E     F    G 1    No.           1            2           3 2    氏名         山田         田中        佐藤 3             送付日 受領日  送付日 受領日 送付日 受領日 4   2007年04月分   4/2  4/27   4/3  4/26   4/2  4/25 5   2007年05月分   5/1  5/30   5/1  5/31   5/2  5/30                   ・                                     ・                   ・ (1行目・2行目のB:C、D:E、F:Gは結合されています。) ------------------- [ファイルB-シート2007/5]     A     B     C     D 1   2007年05月分 2     ←空白行 3   No.    氏名  送付日  受領日 4   1    山田 5   2    田中 6   3    佐藤                   ・                                     ・                   ・ ------------------- [ファイルA]のA4以降の『2007年**月分』のデータ『送付日』と『受領日』を [ファイルB]のセル[A1(2007年**月分)]と『No.』が一致する『送付日(C4~)』『受領日(D4~)』に 関数などを用いて抽出したいのです。 1年分のデータを1つの表にまとめて格納している[ファイルA]に対し[ファイルB]は各月のデータをシート毎に分けてあります。 [ファイルB]で元になるシートを作成しておき、毎月その元シートをコピーし[A1]の日付だけを変更すれば自動的に必要なデータを引っ張ってくるように出来ますでしょうか? 説明が解り辛ければ補足致しますので、何卒ご教示宜しくお願いします。

  • エクセルで別シートを参照

    「あ」のシートに"社員番号"(A列)と"カナ"(B列)のリストがあり、 「い」のシートには"社員番号"(A列)と"漢字氏名"(B列)・"部署"(C列)のリストがあります。 「あ」のシートのC列とD列に、「い」のシートのB列とC列を表示させるにはどうしたらよいでしょうか。 新規に社員番号を入力していく場合は、VLOOKUPなどで出来ると思いますが、すでに入力済みのデータについて一括で参照する方法が判りません。 よろしくお願いいたします。

  • excelでデータを別シートに引っ張ってきたい

    excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

  • エクセルでこんなジャンプ出来ますか

    Sheet2    A     B   C  D    E   F   G     H 3  no.   氏名     no.   氏名     no.   氏名 4 100001 山本A   102001        104001 伊藤F 5 100002        102002 佐藤D   104002  6 100003 鈴木B   102003        104003 中村G 7 100004 高橋C   102004 山田E   104004 :   :    :       :     :       :     : Sheet1    A     B    C   3  no.   氏名  回数   4 104003 中村G   3 5 100004 高橋C   5 6 102003 :   :    :    : Sheet2の表を基にSheet1のような表を作成したい。 Sheet2には約2万件の番号が登録されています。 Sheet1のA列のno.は番号順に入力されるわけではない。 Sheet1のA列にno.を入力するとSheet2より該当の氏名をB列に表示、 該当氏名が空白の場合は、Sheet2の該当セルにジャンプし、氏名入力後Sheet1のC列にジャンプして戻る。 また、Sheet2において例えば、B1に104001を入力するとH4にジャンプしEnterを押すとB1に戻り、100002を入力するとB5にジャンプ氏名入力後Enterを押しB1に戻る。・・・ということもしたいのですがマクロではなく関数で出来るでしょうか?

  • エクセルで別シートのデータを抽出

    ~シートA~   A B C D E F G  ┌─────────────┐ 1│ │10│20│30│40│50│60│  │ │───────────│ 2│ │11│21│31│41│51│61│  │4│───────────│ 3│月│12│22│32│42│52│62│  │ │───────────│ 4│ │13│23│33│43│53│63│  │ │───────────│ 5│ │14│24│34│44│54│64│  └─────────────┘ 6  ┌─────────────┐ 7│ │10│20│30│40│50│60│  │ │───────────│ 8│ │11│21│31│41│51│61│  │5│───────────│ 9│月│12│22│32│42│52│62│  │ │───────────│ 10│ │13│23│33│43│53│63│  │ │───────────│ 11│ │14│24│34│44│54│64│  └─────────────┘         ・         ・         ・ ~シートB~   A B C D E F G  ┌─────────────┐ 1│ ▽ │ │ │ │ │ │  │ │───────────│ 2│ │ │ │ │ │ │ │  │○│───────────│ 3│月│ │ │ │ │ │ │  │ │───────────│ 4│ │ │ │ │ │ │ │  │ │───────────│ 5│ │ │ │ │ │ │ │  └─────────────┘ ↑はリストボックスで1月~12月の値が入っている。 上記条件でシートBのリストボックスから選んだ月のデータをシートAの表から該当する月のデータを全て抽出したいのですが、どのようにすればよろしいでしょうか。

  • エクセルでシート1の内容を他のシートに個々に反映させる方法

    エクセルでシート1には、氏名・氏名がA2~B11に10件入力されたリストがあります。 次に、 シート2のC2にはシート1のA2、D2にはシート1のB2の内容、 シート3のC2にはシート1のA3、D2にはシート1のB3の内容、       :            : シート11のC2にはシート1のA11、D2にはシート1のB11の内容が反映される様に、シート2~11を作成したいのです。 シート2からシート11のC2、D2に一つずつ計算式を入力せずに、もっと早急に作成する方法を教えて下さい。 宜しくお願いします。    

  • エクセルで個人表からの抜き出し

    いつもありがとうございます。 同じような質問があったはずですが、見つけられず質問しました。 シート1に個人表があります。  Aに個人No.、Bに氏名 C~月(1月~12月) C1・D1はセル結合で”1月”、E1・F1もセル結合で”2月”、続いてG1・H1は”3月”・・・と12月までつづきます。 2行目以降より明細が入り、C2は1月の金額、D2は1月のマイナスの金額が入っています。 マイナスの金額は入っているときと、入っていないときがあります。     A       B     C      D     E       F      G      H        I 1   NO.   氏名       1月          2月           3月 2     1    ああ   300   -10    400   -10    400            500 ・・・・・ 3    2     いい   200   -15    600          200    -10     300 ・・・・・ 4    3     うう   500   -10    900   -18    100     -5     700 ・・・・・ シート2にNO.と月を入力すえれば、氏名と数字がでてくるようにしたいのですが、できますでしょうか 例)A1に”1” の B1に”2”(2月のこと) A2に氏名、A3に2月の金額、A4に2月のマイナスの金額(無いときは空白)     A    B        1     1      2 2     ああ 3     400   4     -10

  • エクセル 別シートの参照について

    Sheet2のD5に=Sheet1!D5を参照して返す時にsheet1のD5が「空白」の場合、Sheet2のD5は「0」と表示されてしまいます。空白の場合は空白にしたい場合の数式を教えていただけませんか。

  • Excel VBA で条件を満たしたセルの値を別のシートに貼り付けるには?

    VBA初心者です。700行くらいあるリストの中から所属別の名簿を作りたいのですが、マクロを使えば簡単に出来ますか? データは、 A列にNO.、B列に氏名、C列に所属 となっていて、C列の所属ごとにSheet2,Sheet3・・・にB列の氏名だけの名簿を作りたいのです。 例えば、C列が”総務課”の人の氏名(B列)をSheet2のCell("A2")から行方向に、C列が”会計課”の人の氏名はSheet3のCell("A2")から行方向に という感じです。 Do~Loop を使ってみたり、If~Then を使ってみたりするのですがうまく貼り付けられません。 データの最終行が変化するので範囲の指定もよく分かりません。 どなたか教えて下さい。

  • エクセルの同一ファイル内での検索

    行き詰ってます。 例えば・・・ シート1 A  B   C 1 No. 氏名 支給月 ・・・ 2 ↓ シート2・・・ A  B 1 No. 氏名 2 ↓ 上記のように、シート2には支給月により、No.と氏名のみ表示したいのです。 条件は、支給月が毎月ではないので、C~Nを4月から翌年3月とし、支払月に○を入力します。 シート2以降、シート13までを4月から翌年3月にしたい場合に、シート2以降はどのような組み方が可能でしょうか? 説明下手ですみませんがご教示願います。

専門家に質問してみよう