アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでこのようなことができるか、わからないのですが
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


計算式でできるのか、マクロを使わないと無理なのかも
教えて頂けると大変助かります。
どうぞよろしくお願い致します。

A 回答 (5件)

◆初回


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),"")
★下にコピー
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
とてもシンプルな数式なので、驚きました。
参考にさせて頂きたいと思います。

お礼日時:2009/07/27 12:38

こんばんは!


すでに回答は出ていますが・・・

他の方法の一例です。

↓の画像で説明させていただきます。

配列数式になりますので
数式をコピー&ペーストした後に、
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
「エクセル 初回購入月と最終購入月の検索」の回答画像4
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
画像も添付して頂き、ありがとうございました。

配列式はあまり使ったことがないのですが、
参考にさせて頂きたいと思います。

お礼日時:2009/07/27 12:37

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)))
「エクセル 初回購入月と最終購入月の検索」の回答画像3
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
画像もありがとうございました。
実際のデーターは約10年ありますので
(説明不足で申し訳ありません)
今後、参考にさせて頂きたいと思います。

お礼日時:2009/07/27 11:49

顧客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の購入月が左から右に大きくなるように並ぶように工夫してください。これが上記どおりでうまくいく前提となります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ただ、実際のデーターは約10年分あるため、
この方法ですと列数が足りなくなりそうです。
説明不足で申し訳ありません。
今後、参考にさせて頂きたいと思います。

お礼日時:2009/07/27 11:47

VBAなら、ほかの場合に良く使うやり方が有るので、VBAが出来る人には簡単。

End(xlToRight)やColumn、End(xlToLeft)。
関数では、難しい問題で、エクセル関数のエキスパートが回答をくれるかもしれない。
あまり良い方法を思いつかないので配列数式を使った。
最終月は
例データ 7月までで省略
月1234567
a1212
=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(月)
    • good
    • 0
この回答へのお礼

すばやいご回答、ありがとうございました。
参考にさせて頂きます。

お礼日時:2009/07/27 11:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!