エクセル関数で最新データを取得する方法

このQ&Aのポイント
  • エクセルで顧客毎の最新(直近)のデータを取得する方法について教えてください。
  • 売上データから顧客毎の直近リストを作成する方法を教えてください。
  • エクセルの関数を使って顧客毎の最新データを抽出する方法について教えてください。
回答を見る
  • ベストアンサー

エクセルの関数で最新データの取得について

慣れない関数で計算式が作れず質問させて頂きました。 顧客毎の最新(直近)のデータを取得するには エクセルでどのような計算式を作ればいいでしょうか。 下記のような売上データがあります。 (1)     A     B     C     D    日付   顧客  情報1  情報2 1  1/2  顧客1   ○   2 2  1/5  顧客2   ○   5 3  1/3  顧客1        1 4  1/5  顧客3   ○  5  1/4  顧客2   ○   3 ※ひとつの顧客から同じに日に2回売上は無いものとしますが、  日付は前後して入力されます。 ※「日付」「顧客」は重複しています。 この表を元に顧客毎の直近リスト(2)を 作成できればと思ってます。 (2)     AA    AB   AC   AD    顧客   日付  情報1  情報2 1  顧客1   1/3        1 2  顧客2   1/5   ○   5 3  顧客3   1/5   ○ 4  顧客4  5  顧客5 ※AAの顧客名は既に入力があります。 AB1に入る計算式はMAXを使って配列数式でなんとか 作れました。(見よう見まねですが・・・) {=MAX(IF(b1:b5=AA1,A1:A5,""))} AC1 AD1 にはどのような計算式を入れればいいか お力添え頂けたらと思います。 また、何かいい方法があればエクセルで違った方法などでも 教えていただければ嬉しいです。 分かりにくくてごめんなさい。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

配列数式で次の方法は如何でしょうか。 AC1は、 =IF(COUNTIF($B:$B,$AA2),INDEX(C:C,SUMPRODUCT(($B$2:$B$6=$AB2)*($A$2:$A$6=$AA2)*(ROW($A$2:$A$6))))&"","") AD1は、 =IF(COUNTIF($B:$B,$AA2),INDEX(D:D,SUMPRODUCT(($B$2:$B$6=$AB2)*($A$2:$A$6=$AA2)*(ROW($A$2:$A$6))))&"","")

kururu_y
質問者

お礼

スゴイです!出来ました!! ずっとひとりで悩んでました。。 本当にありがとうございました。 あの・・・ 回答頂いてから計算式の意味を理解しようとするのですが、 知識が乏しくてよく分かりません。・゜゜・(>_<)・゜゜・。 単体ではなんとか使ったことのある関数なのですが ちょっとでも複雑になるとダメで。。 まして配列数式で頭こんがり中です。 甘えて申し訳ないのですが 簡単にで結構ですので意味を教えて頂けないでしょうか。 (特に最後の方の「&"",」部分等・・・) ご迷惑お掛けしてすみません。 どうぞよろしくお願い致します。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

NO1です。以下に解説します。 (1)顧客名がない場合、該当セルを空白にする為、COUNTIF使用して有無を判定する様にしました。 (2)SUMPRODUCT内は、最新日付と顧客名と行番号をAND条件で確定したセルの行番号を取得しています。 仮に3行配列として2行目に条件一致とすると、  最新日付{1,1,1}  顧客名 {0,1,0}  行番号 {1,2,3}  上記の3要素を論理積すると結果が{0,2,0}となり、その和で2が戻される事になります。 この値がINDEX関数の行番号となり該当セルのデータを参照する事になります。 (3)&""は、INDEX関数の該当セルが空白だった場合、0表示を空白にする為です。 因みにSUMPRODUCT関数は、配列関数の為、入力完了時のshift+ctrl+enterは不要です。

kururu_y
質問者

お礼

続けて回答頂いてすみません。 有り難うございます。 すごくいい勉強になりました。 時間は掛かりましたがお陰で理解することができました。 応用できるよう頑張って行きたいと思います。 本当に有り難うございました。

関連するQ&A

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

    下記のようなことが関数で出来ますか? A1セルに「AA AB AC AD AE」というデータがあったときに、 B1に、A1に「AB」か「AC」という文字列があればそれを取り出す。なければブランク(もしくは#N/A) かつ優先順位もつけたい。 (「AB」も「AC」もある場合は「AB」) 「AA」と「AB」の間など、文字間は必ず半角スペースがあいている状態です。 具体的な例は↓の画像のような感じです。 かなり高度だと思うんですが、関数で実現できますでしょうか? よろしくお願いします。

  • IF関数が反応しないのはなぜですか??

     A1からAE1まで1から31の日付が入っています。 A1には○月1日と入力し表示形式はdで日付の数字のみです。 B1からAE1までは、A1+1、B1+1・・・・・・・・AD1+1のように入力してあります。 そこで、28日までしかない月もあるので、AC1には、=if(AC1<AB1,"",AB1+1)という式をいれてみたのですがうまく反応しません!!同じような感じでAD1・AE1 にも入力したいのですが、解決策を教えてください!!分かりずらくスミマセン。

  • データの抽出

    お願いします。 Sheet1のデータからSheet2にリストされている顧客のデータだけをSheet3に出したいです。 毎月Sheet1のデータが変わりますので、新しいデータを貼り付けるたびに、Sheet3に反映させる方法があればお願いします。実際のデータの量は膨大です。 簡単な方法でお願いします。 初心者なのでむずかしい事ははわかりません。すいません。 Sheet1 顧客  数  年        AA 5 2008 AA 6 2009 AB 10 2009 AB 18 2010 AC 33 2008 AC 40 2009 AC 31 2010 AD 1 2009 AD 3 2010 Sheet2 AA AC Sheet3 AA 5 2008 AA 6 2009 AC 33 2008 AC 40 2009 AC 31 2010

  • EXCELでデータの履歴を残したいんですが

    EXCELで顧客名簿を使用しているのですが、これから購入履歴を管理していきたいと考えています。 具体的にはユーザーフォームに顧客名、購入商品名、購入金額、購入日等の情報を入力すると下記のように値が返ってくるようなマクロを教えて頂きたいです。 直近の購入履歴が左から順に見れるようにしたいです。 1回目の購入の際(商品a) A B C D E F G 1顧客名  a  金額 日付 2 3 4 5 2回目の購入の際(商品b) ユーザーフォームに商品名、金額、日付を入力すると A B C D E F G 1顧客名  b 金額  日付  a  金額 日付 2 3 4 5 以上のようにしたいのですが何分EXCELが苦手ですのでお力おかしください。宜しくおねがいいたします。

  • エクセルの計算式

    A1:A31に日付、B1:B31に売上入力したエクセルにC1に日付を記入するとB1の売上が自動で表示できる計算式を教えてください。

  • エクセルの関数やマクロで

    A列に以下のように入力したいのですが。 aa ab ac ad ae af 上記のようにアルファベット順で入力して、azまでいったら、今度はbaからbzでまで入力します。そのような感じでzzまで入力していきたいのですが。 この入力作業を、関数やマクロで行なうことは可能でしょうか? おわかりになる方がいましたら教えて下さい。

  • エクセルでとびとびのデータの累計の出し方

    エクセルで、とびとびのデータの累計の出し方を教えてください。 例えば、たてに顧客ごとに A顧客「前月売上」 A顧客「今月売上」 B顧客「前月売上」 B顧客「今月売上」 ・・・と並べたときに、 最後の行に「前月売上累計」「今月売上累計」を作りたいのです。 =SUM(A1,A3) というように作ってもいいのですが、クリックして選択していくのは手間がかかります。また、顧客数が多いとなぜかエラーになってしまい、現状、2つ以上のSUMをつなげて累計を出したりしています。。 何か簡単に計算する方法があったら教えてください。 よろしくお願いします。

  • IF文の質問

    エクセル初心者の者です。 「=IF(MAX(AA17,AD17)>=30,IF(AA17>AD17,"A","B"),"")」と言う文章がエクセル2003のファイルにありますが「AA17とAD17の数値が等しい時はA・Bと加える」と言う条件のIF文を、先ほどの計算式に加えるにはどうすれば良いでしょうか?

  • 関数をVBAで知りたい

    300ぐらいのセルに関数で計算をしているのですが、時間がかかって仕方ありません。次の関数をVBAに直して頂けませんか 質問1:表示したいセルはRange("AD98")です =IF(AND(COUNT(OFFSET(AC98,1-AD$8,0):AC98)<>AD$8),"",IF(AND(COUNT(OFFSET(AC98,1-AD$8,0):AC98=AD$8,AD97=""),AVERAGE(OFFSET(AC98,1-AD$8,0):AC98),IF(COUNT(AD97=1),AD97+2/(AD$8+1)*(AC98-AD97)))) 質問2:表示したいセルはRange("AC98")です =IF(AND(COUNT(AA98)=1,COUNT(AB98)=1),AA98-AB98,"") よろしくお願いします

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

    エクセルの関数についてです エクセルで出勤簿を作っているのですが、関数の数式がわかりません。 結論から申しますと、退勤時間を24:00と書いても0:00←(24時のこと)と書いても同じ処理をしてほしいということです。 詳細を以下に記載していきます C9出勤:手入力 D9退勤:手入力  ←問題はココ 休憩セルには=AN9 AN9には「=SUM($AD9:$AM9)」 AD9には「=IF(OR(($C9=$D9),(設定!$A$4=設定!$C$4),COUNT($C9,$D9,設定!$A$4,設定!$C$4)<4),0, IF(AND(設定!$A$4<=$C9,$C9<=設定!$C$4,設定!$A$4<=$D9,$D9<=設定!$C$4),($D9-$C9), IF(AND(設定!$A$4>$C9,設定!$A$4<$D9,$D9<=設定!$C$4),($D9-設定!$A$4), IF(AND(設定!$A$4<=$C9,$C9<設定!$C$4,設定!$C$4<$D9),(設定!$C$4-$C9), IF(AND(設定!$A$4>$C9,設定!$C$4<$D9),(設定!$C$4-設定!$A$4),0)))))」 AM9には「=IF(OR(($C9=$D9),(設定!$A$14=設定!$C$14),COUNT($C9,$D9,設定!$A$14,設定!$C$14)<4),0, IF(AND(設定!$A$14<=$C9,$C9<=設定!$C$14,設定!$A$14<=$D9,$D9<=設定!$C$14),($D9-$C9), IF(AND(設定!$A$14>$C9,設定!$A$14<$D9,$D9<=設定!$C$14),($D9-設定!$A$14), IF(AND(設定!$A$14<=$C9,$C9<設定!$C$14,設定!$C$14<$D9),(設定!$C$14-$C9), IF(AND(設定!$A$14>$C9,設定!$C$14<$D9),(設定!$C$14-設定!$A$14),0)))))」 AD9~AN9までは同じようなことが書いてあります。 設定!$A$4には「12:00」 設定!$C$4には「13:00」 以上までが、休憩セルです H9拘束時間には、=AS9 AS9には、「=AC9」 AC9には、「=IF(COUNT($C9:$D9)<2,0,IF($AA9*24>$AB9*24,0,TEXT($AB9-$AA9,"[h]:mm")))」 AA9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(CEILING($C9,"0:10"),"[h]:mm"))」 AB9には、「=IF(COUNT($C9:$D9)<2,0,TEXT(FLOOR($D9,"0:10"),"[h]:mm"))」 以上が拘束時間 I9普通残業セルには、=AT9 AT9には、「=IF(D9-設定!$C$2<0,"0:00",D9-設定!$C$2)」 設定!$C$2には、「18:00」 以上が普通残業時間 J9深夜残業時間セルには、「=AU9」 AU9には、「=AQ9」 AQ9には、「=SUM($AO9:$AO9)」 AO9には、「=IF( COUNT($C9:$D9)<2, 0, IF( AND(22<=$AA9*24,$AA9*24<29,22<$AB9*24,$AB9*24<=29), ($AB9-$AA9), IF( AND($AA9*24<=22,22<$AB9*24,$AB9*24<=29), ($AB9-"22:00"), IF( AND(22<=$AA9*24,$AA9*24<29,29<=$AB9*24), ("29:00"-$AA9), IF( AND($AA9*24<22,29<$AB9*24), ("29:00"-"22:00"), 0 )))))」 以上が深夜残業時間 ということで、分かる方ご教授願います。

専門家に質問してみよう