• ベストアンサー

2つの数値の組合せで区分わけしたい(エクセル)

A行に4桁(1900~2013)の数値が、B行に1~12の数値がそれぞれランダムに4万件ほどあります。 数値の意味的にはA行は「西暦」、B行は「月」なのですが、この組合せを下記の7区分に分ける方法があれば教えていただきたく、よろしくお願いします。 フィルタ▼で検索して作業していたのですが、同じ作業をあと25ファイル分あることに気づき、 作業セルに【区分】の1~7が表示される最適な関数があれば教えてください。 (エクセル2002) 【区分1】 2010年4月以降 【区分2】 2008年4月~2010年3月 【区分3】 2006年4月~2008年3月 【区分4】 2001年4月~2006年3月 【区分5】 1996年4月~2001年3月 【区分6】 1991年4月~1996年3月 【区分7】 1991年3月以前

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

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (292/393)
回答No.1

Sheet2のA列に 年月 0 199104 199604 200104 200604 200804 201004 B列に(実際は「区分」と付けなくてもいいみたいですが念のため) 区分 区分7 区分6 区分5 区分4 区分3 区分2 区分1 と入力し、元のシートの区分を設定したいセル(例えばセルC2なら)に =VLOOKUP(A2*100+B2,Sheet2!$A$2:$B$8,2) と入力してみてください。 Sheet2の年月は古い順に並べてください。

arohajam
質問者

お礼

早急で、かつ、わかりやすい関数で助かりました。

その他の回答 (9)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.10

 回答番号ANo.9です。  間違えました、集計を行った日付を入力しているのは、AA1セルではなく、Z1セルでした。 【誤】 =IF(AND(ISNUMBER(DAY($AA$1)),ISNUMBER(DAY((INDEX($A:$A,ROW())&"/"&INDEX($B:$B,ROW())&"/1")*1))),"区分"&MATCH(YEAR($AA$1)-INDEX($A:$A,ROW())-(INDEX($B:$B,ROW())>3),{-9999,1,3,5,10,15,20}),"") 【正】 =IF(AND(ISNUMBER(DAY($Z$1)),ISNUMBER(DAY((INDEX($A:$A,ROW())&"/"&INDEX($B:$B,ROW())&"/1")*1))),"区分"&MATCH(YEAR($Z$1)-INDEX($A:$A,ROW())-(INDEX($B:$B,ROW())>3),{-9999,1,3,5,10,15,20}),"")

arohajam
質問者

お礼

まだ試しておりませんが、これは集計日(月)を基準にできるようですので 次回のタイミングで挑戦してみようと思います。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.9

 回答番号ANo.8です。  先程の関数ですが、次の様に簡略化する事が出来ます。 =IF(AND(ISNUMBER(DAY($AA$1)),ISNUMBER(DAY((INDEX($A:$A,ROW())&"/"&INDEX($B:$B,ROW())&"/1")*1))),"区分"&MATCH(YEAR($AA$1)-INDEX($A:$A,ROW())-(INDEX($B:$B,ROW())>3),{-9999,1,3,5,10,15,20}),"")

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

 もし、 【区分1】 集計した年の、1年前の4月以降 【区分2】 集計した年の、3年前の4月~1年前の3月 【区分3】 集計した年の、5年前の4月~3年前の3月 【区分4】 集計した年の、10年前の4月~5年前の3月 【区分5】 集計した年の、15年前の4月~10年前の3月 【区分6】 集計した年の、20年前の4月~15年前の3月 【区分7】 集計した年の、20年前の3月以前 という事でしたら、次の様にされると良いと思います。  まず、何時のデータであるのかを明確にするためにも、適当なセル(ここでは仮にZ1セルにします)に集計を行った日付を入力し、そのセルの書式設定の表示形式を[日付]の 2001年3月14日 等としておきます。  次にAA1セルに「現在」と入力して下さい。  次に、区分を表示させるセルの中で、最も上にあるセルに、次の関数を入力して下さい。 =IF(AND(ISNUMBER(DAY($Z$1)),ISNUMBER(DAY((INDEX($A:$A,ROW())&"/"&INDEX($B:$B,ROW())&"/1")*1))),"区分"&MATCH(IF(DATE(INDEX($A:$A,ROW()),INDEX($B:$B,ROW()),1)>=(YEAR($Z$1)-1&"/4/1")*1,0,DATEDIF(DATE(INDEX($A:$A,ROW()),INDEX($B:$B,ROW()),1),(YEAR($Z$1)&"/3/1")*1,"y")),{0,1,3,5,10,15,20}),"")  次に、上記の関数を入力したセルをコピーして、区分を表示させたい全てのセルに貼り付けて下さい。  これで、集計を行った日付に合わせて、区分が表示されます。  又、A行やB行の数値が、セルの切取り&貼付けや、セルの削除、セルの挿入、等の編集作業を行なう事で、セルの位置が上下に移動した場合でも、上記の関数の場合には、関数の参照先がおかしくなって、動作不良を起こす事はありません。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

例えば作業列としてF1セルから下方に区分1、区分2、・・区分7とF7セルまでに入力します。G1セルには2010/4/1、G2セルには2008/4/1、G3セルには2006/4/1・・・・のようにG7セルには1991/3/1と入力します。 そこでC列に区分を表示させるとしてC1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(DATE(A1,B1,1)>=MAX(G:G),F$1,IF(DATE(A1,B1,1)<=MIN(G:G),F$7,INDEX(F:F,MATCH(DATE(A1,B1,1),G:G,-1)+1))))

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

(1)これらの区分を日付として扱うのが良いだろう そのためにはすべての月の1日の日付だと考える。 (2)日付のセルの値は、日付シリアル値といって正整数の値だということを知ってますか。 不知なら、Googleででも「エクセル 日付シリアル値」で照会して勉強のこと。 だから、日付の前後判定や期間幅に入るかどうかの判定は、ある正整数より大や小や、間にあるという判定になるのだ。 (3)隙間の無い区間にコードを振るのは、VLOOKUP函数のTRUE型の特徴的な使い方だ。 IF函数をネスとしたりする方法を使うとしたら、質問者のエクセルの技量に進歩が無いよ。 Google[ででも、「エクセル VLOOKUP TRUE」で照会して、勉強してから質問すべきぐらいなものだ。 (4)TRUE型を使う時は、前記検索テーブルデータは昇順に記述しておく。 旧い年月が上の行に来るということ。 (5)前記検索テーブルデータは区分のスタートの日付を並べる。 ーー 十分テストして無いが 1900/1/1 7 1991/4/1 6 1996/4/1 5 2001/4/1 4 2006/4/1 3 2008/4/1 2 2010/4/1 1 のようになる。 1900/1/1 7 1991/4/1 は、1900/1/1 から 1991/4/1間での間はコード 7を降るという構成である。 X-->a ↑ Y のように見る。検索票の区切りの日はよく注意して区切りの日のテーブルを作ること。 以上、以下、未満的なことに注意。 ーー 例 C1に 2003 D1に 8 の場合 E1に =VLOOKUP(DATE(C1,D1,1),$F$1:$G$8,2,TRUE) のような式になって、(DATE(C1,D1,1),  は1日に統一(看做す)ということ) 結果 4 -- 上記では =IF(A1="","",VLOOKUP(A1,$F$1:$G$7,2,TRUE)のような A1="","",の部分は省いて説明している。

回答No.5

#4です E2:E8セル範囲の画像を削ってしまいましたm(_ _)m {1,33329,35156,36982,38808,39539,40269} は 1900/1/1 1991/4/1 1996/4/1 2001/4/1 2006/4/1 2008/4/1 2010/4/1 を数値化(シリアル値)したものです

回答No.4

C2セルに ="区分"&8-MATCH(DATE(A2,B2,1),$E$2:$E$8) とか 作業列を使わないなら ="区分"&8-MATCH(DATE(A2,B2,1),{1,33329,35156,36982,38808,39539,40269}) とすればよいと思います

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 一例です データはSheet1の2行目からあり、Sheet1のC列に表示させるとします。 ↓の画像のようにSheet2に表を作成しておきます。 Sheet1のC2セルに =IF(COUNTBLANK(A2:B2),"",VLOOKUP(DATE(A2,B2,1),Sheet2!$A$2:$B$8,2,1)) という数式を入れ、オートフィルで下へコピーすると 画像のような感じになります。 参考になれば良いのですが・・・m(__)m

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

一例です。 (1)以下の様な表を作成(仮にSheet2のA,B列に設定、因みに;は単にセル区切り) 0;7 1991/4/1;6 1996/4/1;5 2001/4/1;4 2006/4/1;3 2008/4/1;2 2010/4/1;1 (2)データシートの空き列2行目に=IF(A2<>"",VLOOKUP(DATE(A2,B2,1),Sheet2!A:B,2,TRUE),"")を入力、A2のフィルボタン(右枠下の■)をダブルクリック    

関連するQ&A

  • Excelで同数値の数を数える

    次のような数値があるとします。  A   B   C   D  201   1   205   2           201   2   205   1   203   1  行A、Cには201、202などの値がランダムに 表示されています。(関数で表示された値です) 行Bには、例えばB1にはA1:A3の範囲中にA1セルで表示されて いる値と同じ値がいくつあるかをカウントしてあるのですが、 このカウントに関数を使いたいのです。 行Dには、A1:C3の範囲で同じようにカウントした結果を表示 させたいと思います。 同じ行に同じ値が表示されていることはありません。 AとCのセルが空白の場合はBとDも空白にしたいため、 IF(A1="","",COUNTIF($A$1:$A$3,A1)) と入力してみたのですが、空白セルに関数があるせいか、 空白セルまでカウントされてしまいます。 行Aの関数を消すとうまくいくのですが、 消さずに、空白セルをカウントしない ようにする方法はあるでしょうか。 お返事お待ちしています。  

  • Excelでグループ化し、グループ名を数値で返すには?

    Excelで次の解を求める時、いいアイディアはないでしょうか。 1) セルをグループ化します。 2) 次にグループ化したまとまりごとに、 左列に数値を順に返します。 つまり以下のようなセルがあるとき : A B 1 : 空白 442565 2 : 空白 442565 3 : 空白 332211 4 : 空白 332211 5 : 空白 332211 ↓ : A B 1 : 1 442565 2 : 1 442565 3 : 2 332211 4 : 2 332211 5 : 2 332211 つまりBが同じ数値である セル同士をワングループとして、 そのグループを順列に数値でA列に 区分したいのです。 A列が何セルでグループ化されるかは ランダムです。B列において2つのセルが 同じ数値を共有している場合もありますし、 100のセルが同じ数値を共有しているもあります。 データ総数はおよそ9000列ほどになります。 集計機能を用いた方がよいでしょうか。 関数の他にアイディアがあれば、教えて 頂けるととても助かります。 宜しくお願い致します。

  • EXCELで数値により自動で区分値を与える

    あるセルに、計算によって出力された数値があり、この値により、別の指定したセルに区分を表す数値を与える方法はあるでしょうか? 具体的には、0~15未満は1、15~30未満は2、30~45未満は3、45~60未満は4、60以上は5を表すとして、計算によって出力されたセルAの値を判断して、セルBに1~5までの値を自動で入力する方法です。

  • VBAか関数 「 2と3の組合せ 」 の行が、いくつあるか?

    VBAか関数 「 2と3の組合せ 」 の行が、いくつあるか? Windows XP Home Edition SP3 Office XP Personal 2002 Excel 2002 画像の 「 C列 D列 E列 」 の 「 3列 」 だけを使った質問でございます。 数値は 2桁の整数 までしかありません。 6行目の「 C列 D列 E列 」以外で、オートフィルタをかけた後ですが、空白行もたまにございます。 オートフィルタをかけた後ですので、データのある最後行以下は全部空白です。   実際には、セルには色分けはされておりません。 ---質問のまとめ-------------------------------------- ● 「 2 と 3 の組合せ 」(画像の黄色セル) の行が、いくつあるか? を算出できる、関数 か マクロは、ありますでしょうか? 質問の例では、答えは 「 3行 」 となります。 存在しない場合には、「 0行 」 となります。 ----------------------------------------------------- また、 「 1 と 3 の組合せ 」 の行が、いくつあるか? 「 * と * の組合せ 」 の行が、いくつあるか? などのように、いろいろと算出できればと思っております。 非常にややこしい質問で、恐れ入ります。 今までは、手作業で、6行目にオートフィルタをかけて行っておりました。 何卒、ご教示のほどをお願い致します。 

  • EXCEL 桁数を合わせた数値型セルの結合

    EXCELでのセル操作に関して下記のような結果を求めたいのですが、どういう関数なり操作を行えばいいのでしょうか? よろしくお願いします。 セルA(数値型) 123 セルB(数値型) 89 → セルC 12300089 セルA(数値型) 4567 セルB(数値型) 765 → セルC 456700765 ※セルBの部分を5桁扱いにしてセルCを完成させたいのです。 セルBの桁数が何桁になってもうまくいく方法を 教えてください。よろしくお願いします。

  • 組み合わせがあった時その隣の数値を表す関数を教えて欲しいのですが?

    何時も色々教えて頂き有難うございます。   A      B     C      D      E       F 1  2      3     12     5or8     8or5      16 2  5      8     16                 3  6      1     8              4  7      4     5.2      4      7          5.2 5  3      9     4.6       ・      ・         ・ 上記のように範囲A1からC5に(同様にB1、C1、・・・)から縦にランダムな数字 横にもランダムな数字が入っている表が有ったとします。 この時、D1のセルに5(又は8) E1のセルに8(又は5)と数値を入れた時F1にはCの11を表示させたいです。 (横軸で5と8の組み合わせをA1からB5の範囲で探し、その組み合わせがあった時、C列の対応する数値をFのセルに入れたいです) 上手く説明できてないかも知れませんが、その場合には再度補足を入れますので、どなたか教えて頂けないでしょうか? (エクセルの知識は独学で、初心者レベルです)。 宜しくお願い致します。

  • このようなエクセルの関数の組み合わせはありますか

    エクセルの関数についての質問です。 たとえば、A列とB列にタテに10個ずつのデータ(A1:B10)があって、 (1)A列とB列の同じ行のデータの小さいほうを選んだあと、 (2)選んだ10個のデータを合計したい のですが、そのような関数の組み合わせを作る(一つのセルに一気に表示する)としたら、どのようなものになるのでしょうか。MIN関数と、SUM関数を組み合わせればいいような気がするのですが、うまくいきません。 ご存知の方ならすぐにわかるようなことでしょうが、どうもわかりません。どなたか教えていただけないでしょうか。

  • Excelの組み合わせをカウントしたいです。

    こんにちは。 Excelの組み合わせをカウントしようと試行錯誤したのですが 未だに完成出来ないので質問させて頂きます。 A列に1から10までの数字がランダムで500行ほどあり、 A列の中で1と言う数字があった場合、 その下のセルに2があればその組み合わせを1とカウントし、 B列に合計を表示したいのですが、これは可能でしょうか? どうかご教授下さいますよう、宜しくお願い致します。

  • エクセルで番号を作り出したい。

    はじめまして。エクセルを勉強しています。色々なサイトを見たのですが、下記のようなケースに関して事例が見当たりませんでしたので質問させていただきました。 どうか、皆様の力を添えていただけませんでしょうか。 エクセルで一覧表を作りたいのですが、そこに管理番号をつけたいのです。 考え方として K10セルに日付を入力する。このとき、A10セルに下記の組み合わせで管理する番号を出す。  K10セルに入力された年月 + A10の行番号 例) K10セル ・・・ 6/15(月)※書式設定しているものとする。  ⇒結果、150610と表示されるようにしたいのです。。。 1506は西暦2015年の下2ケタと月06です。そこに10行の10を加える形にしたいのですが このようなケースは可能でしょうか。できればマクロを使わない関数のみで入れたいと 思います。 Lowなど色々試しているのですが、なかなかうまくいかなくて困っています。 なにとぞよろしくお願いいたします。

  • セルに入力した数値の組み合わせを抽出する方法

    セルに入力した数値の組み合わせを抽出する方法 色々探したのですが、よく分からないので教えてください。 エクセルシートのB3:E6の16個の各セルに、任意に数値を入力していきます。 その入力した数値の組み合わせを全て抽出したいと思っております。 (抽出先はどこでもいいです。) 希望としてはB3:E3の4個の数値は必ず入った組み合わせを作りたいです。 関数でもVBAでも何か方法が有れば教えてください。 宜しくお願い致します。

専門家に質問してみよう