• ベストアンサー

エクセルの自動入力を

今、手元にエクセルで作った一覧表が有ります A列には「入荷日」 B列には「製品番号」 C列には「製品名」 D列には「大きさ(重量)」 E列には「担当者」 が入っていて、全部で約25000行ほどの一覧表です。 入荷日の欄<A列>には =TODAY() の関数式が入っており、自動で入力されます。 (最後のコピー→テキストで貼付けをする) 製品番号,製品名,大きさ,担当者は関連しているため 製品番号を入力すれば他が自動で入る仕組みになっていました。 例えば製品名の所には =VLOOKUP(B25633,B:E,2,FALSE) といった感じで、B25633のセルの製品番号から製品名を自動記入 していました。 しかし最近になり担当者が変わってしまったのですが、この関数では いまだに過去の一番古い担当者を自動入力してしまいます。 上から検索が行われているためだと思うのですが、 一番最近のデータ(画面で言う下)から検索を行い 自動入力をする方法って、他には無いんでしょうかお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

C25633に入れる式は以下の通りです。  =INDEX(C$1:C25632,SUMPRODUCT(MAX(($B$2:$B25632=$B25633)*ROW($B$2:$B25632)))) このセルを横方向(D,E列に)コピーしてください。($C$1:C25632と$B$2:$B25632の範囲が1つ上の行を指し示す点に気をつけてください) さらに25634行より下に入力する場合はC25633を下方向にコピーすれば良いです。ただし過去に入力した製品番号で一致するものがなければ(=新規の製品番号)#VALUE!エラーになります。エラー処理を追加すれば回避できます。(ただし式は長くなります) =IF(SUMPRODUCT(MAX(($B$2:$B25632=$B25633)*ROW($B$2:$B25632)))=0,"新規",INDEX(C$1:C25632,SUMPRODUCT(MAX(($B$2:$B25632=$B25633)*ROW($B$2:$B25632)))))

decoration
質問者

お礼

 お礼遅れてスミマセンでした。回答ありがとうございます。 教えていただいた関数で、完全に自動化する事が出来ました。 ただ...現状は、関数の知識がここまで及ばす ”意味はわからないけれど、このまま式を使用すれば出来る” といった状態です。もっと勉強して式の意味が わかるくらいにならないと、意味が無いですよねぇ...反省してます。 エラー対策までしていただいて、本当に感謝の気持ちでいっぱいです。

その他の回答 (2)

noname#30052
noname#30052
回答No.2

他に良い方法があればどなたかにフォローを 頂きたいところですが、今思いつくのは以下の方法です。 (1)マクロを作る。 (2)別テーブルを作る。 (3)無理やり動かす。 (2)の場合はC列に1列追加してC1に以下の関数を 埋め込んで下さい。 =IF(B11="","",IF(COUNTIF(B:B,B11)=COUNTIF($B$1:B11,B11),B11,"")) で、C1のセルを全行にコピーします。 するとC列に各製品番号の最新のデータのところだけ、製品番号が 表示されると思います。 次にC~Eを別のシートに”値貼り付け”でコピーした後、ソート すれば別テーブルが出来上がります。 (製品番号が表示されてない行は削除して下さい) で、VLOOKUPはそちらの新しいテーブルを参照するようにする。 今後変更が発生したら新しいテーブルの方だけ修正すると良いかと 思います。 (3)の場合はC列に1列追加してC1に以下の関数を 埋め込んで下さい。(2)と少しだけ違います。 =IF(B1="","",IF(COUNTIF(B:B,B1)-1=COUNTIF($B$1:B1,B1),B1,"")) で、C1のセルを全行にコピーします。 次にD列に(次回入力する場所が2万行目だとすればD20000に) =IF(B20000="","",VLOOKUP(B20000,C:D,2,FALSE)) と入れて、最下行まで数式をコピーします。 そうすればB列に製品番号を入れたときに直近の数値がヒット するかも(昇順でないので保証できません)しれません。 但し、D列は自動検索された後、値貼り付けし直しておく必要が あります(循環参照となるため) E列もD列と同様の設定です。 が、できれば(2)をお奨めします。 (1)をチャレンジしたいという場合には簡単なロジックをレスします。

decoration
質問者

お礼

 お礼遅くなってしまいましたが、回答ありがとうございます。 担当者が変更となり、先輩が会社を去り・・・ どんどん環境が変化していく中、対応できずにいました。 マクロの作成での自動化も、一時は考えていたんですが 思うようにいかず、ただいま勉強中です。ありがとうございました。

noname#30052
noname#30052
回答No.1

読み違いかもしれませんが、VLOOKUPの使い方が 間違っているようにおもわれます。 以下の関数が入っているのであれば、 =VLOOKUP(B25633,B:E,2,FALSE) B列は昇順になってないのではないでしょうか? しかもB列に同一Keyが複数存在する? B,C,D,Eだけのテーブル(最新の状態のみ、 かつBに同一値はなく、昇順になっている)を 別に作って、そちらからVLOOKUPでB~Eの値を 持ってくるようにしてはいかがでしょうか?

decoration
質問者

お礼

 解答ありがとうございます。関数について言うなら・・ ご指摘の通り、B列は製品番号なので、昇順にはなってはいません むしろ綺麗な数字にもなっていません。例『1B363-33A』etc  B列には複数同じ番号も存在しています。 ただ、そのBの値だけを読みとりC,D,Eを自動で 入力を行っていました、今まではそれでも十分使用出来ていました。 しかし担当者の変更により、今ではその部分だけをわざわざ 確認して訂正している状態で、何とかならないかとの質問でした。  ランダムに複数同じ値の存在する 25000もの一覧表を、別に作る事も容易では有りません・・・ やっぱり、一字一字見直して訂正するしか無いんでしょうかねぇ

関連するQ&A