- 締切済み
エクセル 初回購入月と最終購入月の検索
エクセルでこのようなことができるか、わからないのですが 1万件以上あるデーターなので、全て手入力でやるには 労力がかかりますので、質問させて頂きました。 以下のような表の中から、初回購入月をI欄に、最終購入月をJ欄に抽出したいと思います。 A B C D E F G H I J 顧客NO(1月)(2月) (3月) (4月) (5月) (6月) 合計 初回 最終 10010 3000 6000 9000 10020 3000 3000 10030 3000 3000 1000 7000 計算式でできるのか、マクロを使わないと無理なのかも 教えて頂けると大変助かります。 どうぞよろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- maron--5
- ベストアンサー率36% (321/877)
◆初回 I2=IF(COUNT(B2:G2),INDEX($B$1:$G$1,MATCH(0,INDEX(0/B2:G2,),0)),"") ★下にコピー ◆最終 J2=IF(COUNT(B2:G2),LOOKUP(1,0/(B2:G2>10),$B$1:$G$1),"") ★下にコピー
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますが・・・ 他の方法の一例です。 ↓の画像で説明させていただきます。 配列数式になりますので 数式をコピー&ペーストした後に、 F2キーを押して編集可能にするか、又は数式バー内で一度クリックして Shift+Ctrl+Enterキーを押してみてください。 数式の前後に { } の記号が入り、配列数式になります。 I2セルに =IF(COUNTBLANK(B2:G2)=6,"",INDEX($B$1:$G$1,SMALL(IF(B2:G2<>"",COLUMN(A2:F2)),COLUMN(A1)))) J2セルに =IF(COUNTBLANK(B2:G2)=6,"",INDEX($B$1:$G$1,LARGE(IF(B2:G2<>"",COLUMN(A2:F2)),COLUMN(A1)))) そして、I2・J2セルを範囲指定して オートフィルで下へコピー、又はオートフィルハンドルの(+)マークで ダブルクリック! これで希望に近い形にならないでしょうか? 尚、購入月が1度しかない場合は 初回も終回も同じ月になります。 以上、参考になれば幸いです。m(__)m
お礼
ご回答ありがとうございます。 画像も添付して頂き、ありがとうございました。 配列式はあまり使ったことがないのですが、 参考にさせて頂きたいと思います。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
6ヶ月だったらIF関数で事足りるのでは? 初回 =IF(COUNT(B2:G2)=0,"",IF(B2<>"",$B$1,IF(C2<>"",$C$1,IF(D2<>"",$D$1,IF(E2<>"",$E$1,IF(F2<>"",$F$1,IF(G2<>"",$G$1,""))))))) 最終 =IF(I2="","",IF(G2<>"",$G$1,IF(F2<>"",$F$1,IF(E2<>"",$E$1,IF(D2<>"",$D$1,IF(C2<>"",$C$1,IF(B2<>"",$B$1))))))) 最終ならこんなのもありです =IF(I2="","",INDEX($B$1:$G$1,MATCH(8^3^8,B2:G2)))
お礼
ご回答ありがとうございます。 画像もありがとうございました。 実際のデーターは約10年ありますので (説明不足で申し訳ありません) 今後、参考にさせて頂きたいと思います。
- n09430515
- ベストアンサー率52% (11/21)
顧客No10010が行番号2だとして、セルK2に数式 =if(isblank(B2),T(""),$B$1) と入力すれば、K2が(1月)になると思います。 同じ要領でL2セルを =if(isblank(C2),T(""),$C$1) とすれば、L2がブランク。 数式がG2とG$1になるまで横に並べると、K列からP列までの間に(1月)と(4月)が出ます。 I2とJ2に次の数式を入れれば、それらが顧客No10010の答えです。 I2 =min(K2:P2) J2 =max(K2:P2) I2からP2までの範囲を下方向にセルコピーすれば、全行結果が出ると思います。 行1の購入月が左から右に大きくなるように並ぶように工夫してください。これが上記どおりでうまくいく前提となります。
お礼
ご回答ありがとうございます。 ただ、実際のデーターは約10年分あるため、 この方法ですと列数が足りなくなりそうです。 説明不足で申し訳ありません。 今後、参考にさせて頂きたいと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAなら、ほかの場合に良く使うやり方が有るので、VBAが出来る人には簡単。End(xlToRight)やColumn、End(xlToLeft)。 関数では、難しい問題で、エクセル関数のエキスパートが回答をくれるかもしれない。 あまり良い方法を思いつかないので配列数式を使った。 最終月は 例データ 7月までで省略 月 1 2 3 4 5 6 7 a 1 2 12 =INDEX($A$1:$J$1,1,MAX((B2:H2<>"")*(COLUMN(B1:H2)))) と入れてSHIFT+CTRL+ENTERを同時押し。配列数式。 結果 5(月) ーー 最初月は =INDEX($A$1:$H$1,1,MIN(IF(B2:H2<>"",COLUMN(B2:H2),999))) と入れてSHIFT+CTRL+ENTERを同時押し。配列数式。 結果 2(月)
お礼
すばやいご回答、ありがとうございました。 参考にさせて頂きます。
お礼
ご回答ありがとうございます。 とてもシンプルな数式なので、驚きました。 参考にさせて頂きたいと思います。