エクセル2007で質問です。

「注文」というファイルと「出荷」というファイルの2つがあります。
注文ファイルには、A列=注文を受けた日付、B列=注文した人の名前、が並んでいます。
出荷ファイルには、A列=出荷番号、B列=注文した人の名前(これは注文ファイルのB列から本日出荷した人のみ抽出されてます)が並んでいます。

出荷ファイルのC列に、B列の人が注文した日付を表示させたいのですが、何かいい方法はないでしょうか?
たぶん関数を使えばできそうな気がするのですが、あまり詳しくないので教えてください。

回答の条件
  • 1人2回まで
  • 登録:2009/12/28 01:52:55
  • 終了:2009/12/30 23:53:48

回答(5件)

id:joruno No.1

joruno回答回数152ベストアンサー獲得回数12009/12/28 02:23:56

ポイント25pt

B列の注文した人の名前というのが、重複しないと仮定した場合、

VLOOKUP関数を使えばできると思います。


ただし、注文ファイルのA列とB列を入れ替えなけばいけませんが。

出荷ファイルのC列1行目の式

=VLOOKUP(B1,[注文ファイルのbook名]シート名!A1:B65536,2,0)


名前が同じもので紐付けて、隣の行の値を示すという感じです。

しかし、

注文した人の名前が重複した場合、一番上の行のものが表示されるため、

使えません。

id:ipsa

ありがとうございます。

2009/12/30 23:20:57
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/12/28 03:16:08

ポイント40pt

注文.xlsの注文主sheet

A B
1 受注日 注文主
2 12月1日 瀬能ナツル
3 12月1日 美嶋紅音
4 12月2日 三郷雫
5 12月2日 近堂水琴
6 12月3日 沙倉楓

出荷.xlsの出荷sheet

A B C
1 出荷番号 注文主 注文日
2 1201 瀬能ナツル =INDEX('[注文.xls]注文主'!$A:$A,MATCH(B2,'[注文.xls]注文主'!$B:$B,0),1)
3 1202 三郷雫 ↓ 下方向コピー
4 1203 美嶋紅音 ↓ 下方向コピー

※出荷sheetのC列は日付型にしておかないと、

 日付をあらわす内部データ(数値)が表示されたりします。

※上記以外の関数を使った方法も存在しますので、あくまでも一例です。

id:ipsa

ありがとうございます。

2009/12/30 23:21:03
id:Gay_Yahng No.3

Gay_Yahng回答回数724ベストアンサー獲得回数262009/12/28 08:51:53

ポイント25pt

注文ファイルのC2に

=A2

C2を下にコピー

出荷ファイルのC2に

=VLOOKUP(B2,注文!B:C,2,FALSE)

C2を下にコピー

で、どうでしょう?

ただ、この方法だと一人の人が何回も注文を出しているとうまくいきません。

id:ipsa

ありがとうございます。

2009/12/30 23:21:09
id:ttr6dyguu No.4

そうや回答回数3ベストアンサー獲得回数02009/12/28 10:17:56

さあーぼくも

id:SALINGER No.5

SALINGER回答回数3454ベストアンサー獲得回数9692009/12/28 16:34:35

ポイント30pt

応用編ということで、一人で何回も注文している場合や同姓同名に対応するために、

本日から遡って注文ファイルの近い日を返す関数も作れるということで紹介しておきます。


仕様は、id:kn1967 さんのブック名シート名表と同じです。

出荷ファイルは本日出荷した人が記入されるということで日付ごとになっているので、見出しに日付のセルがあると思います。

無ければ日付のセルを用意し、左上のボックスに「日付」と入力して名前を付けてください。

次に、C2セルの数式を

=日付-MIN(IF(([注文.xls]注文主!$B$2:$B$1000=B2)*([注文.xls]注文主!$A$2:$A$1000<=日付),日付-[注文.xls]注文主!$A$2:$A$1000,1000))

と入力し、Ctrl+Shift+Enterを押して{}で囲み配列数式にします。

後は下方向にオートフィルすればいいです。

※式中の1000は十分大きな数字の意味です。注文ファイルの行数以上にしてください。

id:ipsa

ありがとうございます。

2009/12/30 23:21:20
  • id:Reiaru
    http://www.hatena.ne.jp/ttr6dyguu/

    またうごメモですか。
  • id:kn1967
    うごメモ? 良くわからん。


    それはさておき、回答2も回答1や回答3と同様に、
    ・同姓同名の人がいた場合は最初に見つかった行を対象とする
    ・同じ人が複数回注文していた場合は最初に見つかった行を対象とする。
    という問題があります。
    ※肝心の注意文を入れておくのを忘れました。申し訳ない。

    上記2点だけであれば、関数だけで対応する手段も無くはないですが、さらに、
    ・同じ人の注文で、後から注文されたほうを先に出荷してしまった。
    という問題もはらんでいるため実際に使えるものは関数のみでは対応できません。


    諸所の問題に対応する手段としては、
    (案1)「注文」のほうに通し番号を振って「出荷」のほうもB列は通し番号とし、
     「出荷」の氏名と注文日は、それぞれVLOOKUP関数で通し番号を使って、
     「注文」から持ってくるようにする。
    (案2)「出荷」のほうのB列には「注文」の行番号を記入し、
     「出荷」の氏名と注文日は、それぞれINDEX関数で持ってくるようにする。
    などといったような方法になります。
    ※2が簡単だけど、将来を見据えると断然1のほうを推奨。


    この先問題になりそうな点として、
    データ件数が増えてくればくるほど、Excelでの動作は遅くなるという問題があり、
    関数を多様すればするほど、問題はさらに深刻になります。

    毎月の件数が少ないようであれば、そもそも2つのシートに分けるような必要もなく、
    1つのシートに受注日、氏名、発送日の欄を設けておき、必要に応じて、
    受注日で並べ替えたり、氏名で並べ替えたり、発送日で・・・、
    という操作をすればよいだけになりますが2つに分けなければならないのでしょうか?
    ※Excel2007は 104万行という膨大な行数まで対応する仕様にはなっていますが、
     実用限界はパソコンに搭載されたメモリの量などによって、かなり制限され、
     昨今のパソコンでは仕様の数分の1までしか使えないと覚えておくと良いです。

    2種類のシートに分ける事をしなければ2009年12月sheet、2010年1月sheetなどと、
    月単位などで簡単に分ける事ができ、そうすれば関数で悩む事も減りますし、
    動作の問題も比較にならないほど格段に軽減されます。

    真に2種類のシートに分ける必要があるかどうかを再考してみてください。

    以上、お詫びがてら追記です。
  • id:MEI-ZA-YU
    >うごメモ? 良くわからん。

    ヒント
    プロフィールをもっと
  • id:kn1967
    id:MEI-ZA-YU さんへ

    お手数かけてスミマセン。
    でも、そういう意味ではないです・・・。
  • id:h_kondo
    複数回の受注に対応するために
    注文ファイルには受注番号(自動採番)を入れるべきだと思います。
    出荷ファイルにはどの注文の出荷なのか分かるように受注番号を記載するべきです。

    早めに受注番号の列を追加して今後に備えたほうがいいです。
  • id:ipsa
    長文になるのでコメント欄で失礼します。
    みなさんいろいろな方法やご意見をありがとうございます。

    現状なのですが、WEB上で管理する受注システムを使っていまして、そこから受注データをダウンロードし、配送業者に委託しています。
    ダウンロードした状態が「注文ファイル」です。
    業者が当日配送分の手配を完了し、出荷番号(配達伝票No.)を入力した状態で送ってくるのが「出荷ファイル」です。
    注文ファイルと出荷ファイルを注文者名で照らし合わせて当日出荷したものを特定し、WEBのシステムを使ってその注文者に出荷番号をメールをします。
    しかし、WEB上では注文日ごとに顧客が管理されているのに、業者から送られてくる出荷ファイルには注文日が記載されていないので、出荷メールを送る際、注文日をまず特定する必要があり、それに時間がかかるので質問させていただきました。

    注文ファイルと出荷ファイルのフォーマットを同じにすれば即解決なのですが、それぞれ別のシステムで管理されているので変えるのは難しそうです。

    皆さんにご指摘いただいた複数回の注文への対応ですが、現状では前日に頂いた注文は翌日に総て出荷できていること、また出荷した注文はデータ上に上ってこないこと、注文数が少ないので人力で管理できていることからなんとか対応できています。

    先に詳しい状況を書いた方が良かったですね。申しわけありません。

    ですが今後のことを考えると何かしら対応しなくてはいけないことが分かりましたので、頂いたご意見はたいへん参考になりました。
    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません