• ベストアンサー
  • すぐに回答を!

エクセル等でのデータ抽出

 こんばんは、愚生は、エクセルデータベースの全くの初心者でございます。以下の質問をさせていただきたく、ブログをたてたせてもらいました。 以下のようなA列に日付;B列に地名;C列に数値が載せたtableがございます。(行数は総計約5000程度まで続きます) A1: 2009/10/3, B1: 東京; C1: 12000 A2: 2009/10/3, B2: 大阪; C2: 10000 A3: 2009/10/3, B3: 名古屋; C3: 7000 A4: 2009/10/3, B4: 京都; C4: 3000 A5: 2009/10/3, B5: 金沢; C5: 500 A6: 2009/10/3, B6: 神戸; C6: 4000 A7: 2009/10/5, B7: 大阪; C7: 7000 A8: 2009/10/5, B8: 東京; C8: 8000 A9: 2009/10/5, B9: 京都; C9: 5000 A10: 2009/10/5, B10: 横浜 C10; 4000  A11: 2009/10/6, B11: 東京; C11: 9000 A12: 2009/10/6, B12: 大阪; C12: 7000 A13: 2009/10/6, B13: 名古屋; C13; 8000 A14: 2009/10/6, B14: 京都; C14: 4000 A15: 2009/10/6, B10: 横浜; C15: 5000 2009/10/3には計6個のデータがあります 2009/10/3には計4個のデータがあります 2009/10/6には計5個のデータがあります →   「各日にちごとに、C列の値が大きい順にベスト3ずつを選び、表示させたい訳でございます。」 A1: 2009/10/3, B1: 東京; C1: 12000 A2: 2009/10/3, B2: 大阪; C2: 10000 A3: 2009/10/3, B3: 名古屋; C3: 7000 」 A4: 2009/10/5, B6: 東京; C6: 8000 A5: 2009/10/5, B7: 大阪; C7: 7000 A6: 2009/10/5, B8: 京都; C8: 5000 」 A7: 2009/10/6, B9: 東京; C9: 9000 A8: 2009/10/6, B10: 名古屋 C10; 8000 A9: 2009/10/6, B11: 大阪; C11: 7000 」  もし、mysql (SQL server)等のデータベストソフトが必要な場合も、対処させていただきます。  それでは、よろしくお願い申し上げます。

noname#135843

共感・応援の気持ちを伝えよう!

  • 回答数6
  • 閲覧数221
  • ありがとう数9

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

  • ベストアンサー
  • 回答No.4
  • ASIMOV
  • ベストアンサー率41% (982/2351)

>「C列-降順」の際、A列の昇順の順位がめちゃくちゃとなってしまいました 並べ替えをするときに、一度に3つのキーを設定できます その内 「最優先されるキー」に列Aを 「2番目に優先されるキー」に列Cを設定します

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 2回にも渡るご回答を賜り、厚くお礼申し上げます。  「並べ替え」画面で操作可能なのですね。  どうもありがとうございました。

関連するQ&A

  • エクセルの並び替えで順番どうりにならない

    エクセル2003です。 並び替えでA列を対象にして 以下のように並び替えたいです。 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 ですが並び替えを実行すると A1 A10 A11 A12 A13 A2 A3 A4 A5 A6 A7 A8 A9 B1 B10 B11 B12 B2 B3 B4 B5 B6 B7 B8 B9 となってしまいます どのような方法がありますか。 よろしくお願いします。

  • エクセルのマクロ

    A列とB列に以下のような感じでデータが入ってます。 A列 A1  1 A2  あ A3  い A4  う A5  え A6  2 A7  お A8  か A9  3 A10  さ A11  し A11  す B列 B1   1 B2   a B2  2 B3  b B4  c B5  3 B6  d B7  e 両列に共通しているのは数字の1から始まり、1の後に何らかのデータが続いた後に2がきて、また何らかのデータが続いた後に3がきます。 そんな感じで数値が増えて両列とも500(行ではなく数値が)まであります。 この二つの列のデータを合わせたものをC列に表したいのですが。 その規則ですが。まず1がきて、その後にB列の1から下のデータ(2の前まで)がきて、次にA列の1から下のデータ(2の前まで)がきます。2以下も同様になります。 C1  1 C2  a C3  あ C4  い C5  う C6  え C7  2 C8  b C9  c C10  お C11  か C12  3 C13  d C14  e C15  さ C16  し C17  す C列のデータを求めるマクロを教えてもらいたいのですが。 よろしくお願いします。

  • EXCEL 並び替え

    a1 a4 a7 a10 a13 a16 a19 a2 a5 a8 a11 a14 a17 a20 a3 a6 a9 a12 a15 a18 a21 b1 b4 b7 b10 b13 b16 b19 b2 b5 b8 b11 b14 b17 b20 b3 a6 b9 b12 b15 b18 b21 上記のような3x7で一セットのかたまりのデータ(実際は文字列がはいっています)を下記のように簡単に横に並び替えるにはどうしたらよいでしょうか。各このセットが1枚のエクセルに最大30セットあり、EXCELは20ファイル程あるので手早くならびかえる方法を探しています。 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 a20 a21 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21

その他の回答 (5)

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

解答No3 です。 C列の並べ替えでは日付のデータがおかしくなるのは並べ替えの操作が間違っているかデータが文字列であったりすることによる場合が多いですね。 表を選択してから「データ」-「並び替え」で最優先されるキーに「日付」を選択して「昇順」に、2番目に優先されるキーで「金額」を選択して「降順」にそれぞれ設定したのちに「OK」します。 これで思うようにいかないのでしたらどこか全く別のセルに1を入力して、それをコピーします。その後に日付や金額の入ったセルをCtrlキーを押した状態で選択し、そこで右クリックして「形式を選択して貼り付け」で[乗算]にチェックしてOKします。これですべてのデータは文字列ではなく数値に変わりますので、その後に先に述べた並べ替えを行うとよいでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 再度に渡る、ご回答を頂戴しまして、厚くお礼申し上げます。  「並べ変え」画面での編集が可能なようです。  どうもありがとうございました。

  • 回答No.5

こんにちは。 ピボットテーブルで以下のようにレイアウトを組んでは如何でしょうか。 行エリアに[日付]を配置する  [日付]をダブルクリックし、「集計なし」にする データエリアに[数値]を配置する 行エリアに[地名]を配置する  [地名]をダブルクリックし、「詳細」ボタンをクリック  自動並べ替えオプションで「降順」を指定し、  使用するフィールドに「合計 / 数値」を指定  自動表示オプションで「自動」を指定し、  表示順位を「上位」「3(位)」に指定し、  使用するフィールドに「合計 / 数値」を指定  OK、OK これで、上位3位までの地名が取り出せます。 もし、空白セルを埋めたいということであれば、 そのピボットテーブルを数値化して空白を埋めれば、 目的のリストが作成できると思います。 ↓日付毎のTOP3のリスト作成までのサンプルマクロを載せておきます。 Sub Sample()   With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _     SourceData:=ActiveSheet.Range("A1").CurrentRegion.Address( _       External:=True)).CreatePivotTable(TableDestination:="")     .Format xlPTNone     .ColumnGrand = False     .PivotFields("日付").Subtotals(1) = False     .AddFields RowFields:=Array("日付", "地名")     With .PivotFields("数値")       .Orientation = xlDataField       .NumberFormat = "#,##0_ "       .Caption = "数値 "     End With     With .PivotFields("地名")       .AutoSort xlDescending, "数値 "       .AutoShow xlAutomatic, xlTop, 3, "数値 "     End With     With .TableRange2       .Copy       .PasteSpecial xlPasteValues       .Interior.ColorIndex = xlNone       .Font.ColorIndex = 0       .Font.Bold = False       .EntireColumn.AutoFit       With .Columns(1)         .SpecialCells(xlCellTypeBlanks).Value = "=R[-1]C"         .Copy         .PasteSpecial xlPasteValues       End With       Application.Goto .Range("A1")     End With   End With   Application.CutCopyMode = False End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 ご回答いただきまして、厚くお礼申し上げます。  ピボット → VBAを用いた空白セルの消去 操作法には頭が下がる思いでございます。  末尾ながら、厚くお礼申し上げます。

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

シート1の1行目には項目名があり2行目からお示しのデータがあるとします。例えばA1セルには日付、B1セルには地区、C1セルには金額とあるとします。 初めにA,B,C列を選択してエクセル2007でしたら「ホーム」タブの「並べ替えとフィルタ」から「ユーザー設定の並べ替え」をクリックします。 最優先されるキーに「日付」を選んで「昇順」に設定します。次に「レベルの追加」をクリックして次に優先されるキーで「金額」を選んで「降順」に設定してOKします。エクセル2003でしたら「データ」メニューから「並べ替え」で上記と同じように並べ替えをします。 次にD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)<4,MAX(I$1:I1)+1,"")) お望みの表はシート2に表示させるとしてシート2のA1セルからC1セルにはシート1での項目名を入力します。 次にA2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$D:$D,ROW(A1))=0,"",INDEX(Sheet1!$A:$C,MATCH(ROW(A1),Sheet1!$D:$D,0),COLUMN(A1))) A列のセルの表示形式を日付にします。これで日付ごとのベスト3が表示されることになります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 ご回答いただきまして、まことにありがとうございました。  No.2のご回答者様と重複してしまうのですが、「並べ替え」(愚生は2003を利用しております)  の際に、データが不揃いになってしまいます。  もし、お分かりの点等ございましたら、よろしくお願い申し上げます。

  • 回答No.2
  • ASIMOV
  • ベストアンサー率41% (982/2351)

まず、A列-昇順、C列-降順で、並べ替えしておきます(図のA~C列) 図で、 E6 =IF(AND($A6=$A5,$A6=$A4,$A6=$A3),"*",A6) とし、F,G列にもコピーし、下にもコピーします (3~5行まではA~C列をそのままコピーしておく) これで、上位3位が表示され、4位以下は「*」表示になります 次に、出来たE~G列をコピーして、I~K列に「形式を選択」で「値」貼り付けします そうして、もう一度E~G列をソートすると1~3位分づつが残ります

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 ご回答いただきまして、どうもありがとうございました。  ただ、 > A列-昇順、C列-降順で、並べ替えしておきます(図のA~C列)  をいたしますと、「C列-降順」の際、A列の昇順の順位がめちゃくちゃとなってしまいました。  愚生に、何か誤操作等あるのでしょうか?  ご返答いただければ幸いでございます。

  • 回答No.1
noname#204879

》 各日にちごとに、C列の値が大きい順にベスト3ずつを選び、表示さ 》 せたい訳でございます。 「ベスト3ずつを選び」が必須でないなら、添付図に示すピボットテーブル(関数を使わないで簡単に得られます)でお茶を濁せませんか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 ご回答いただきまして、どうもありがとうございました。  ピボットテーブルでの+αとなり、今回の質問をさせていただいた次第でございます。  ですが、ご丁寧な回答をお送りいただいただきまして、厚くお礼申し上げます。

関連するQ&A

  • エクセルのグラフについて

    x | y1 |y2 |y3 |x | y1 |y2 |y3 |x | y1 |y2 |y3 | x1 |a1 |b1 |c1 |x4 |a4 |b4 |c4 |x7 |a7 |b7 |c7 | x2 |a2 |b2 |c2 |x5 |a5 |b5 |c5 |x8 |a8 |b8 |c8 | x3 |a3 |b3 |c3 |x6 |a6 |b6 |c6 |x9 |a9 |b9 |c9 | というような表があって、x軸をx1~x9として、y軸に、y1のa1~a9、y2のb1~b9、y3のc1~c9のデータを載せた1つのグラフを作りたいのですが、うまく作れません。x1~x3とx4~x6とx7~X9を結びつければ作れると思い、やってみたのですがうまくできませんでした。都合上、x3の行の下には、x4の行以降のデータを持ってこれないので、できれば、上のような表があったときのグラフの作り方を教えていただきたいのです。よろしくお願い致します。

  • リストファイルの列の操作

    シェルスクリプト(Bシェル)の中で、 例えば以下のようなカンマ区切りのリストファイルを ---------------- a1,b1,c1 a2,b2,c2 a3,b3,c3 a4,b4,c4 a5,b5,c5 a6,b6,c6 a7,b7,c7 a8,b8,c8 a9,b9,c9 a10,b10,c10 ---------------- 以下のように変換する方法が知りたいです。 ---------------- xx,a1,b1 xx,a2,b2 xx,a3,b3 xx,a4,b4 xx,a5,b5 xx,a6,b6 xx,a7,b7 xx,a8,b8 xx,a9,b9 xx,a10,b10 ---------------- ※3列目を削除して、1列目に"xx"の文字列を挿入。 forやwhileで1行ずつ読み込んで処理するのではなく、 sedやawk等を用いてズバッと変換する方法が知りたいです。 宜しくお願いします。

  • エクセルのマクロで"~"を用いた数字の連番

    エクセルのマクロで"~"を用いた数字の連番 について、ちょっと困っています。 以下のように、セルに入力があります。 A1:0 A2:1 A3:2 A4:3 A5:4 A6:5 A7:6 A8:7 A9:8 A10:9 A11:10 次に、B1~B11の任意のセルに "無" もしくは "有" の文字を入力し、 B列に"有"の文字が入力されているA列の数字を"~"を用いて連番にしたい。 ただし、「0」は独立した値とし、「B1:有、B2:有」の場合、「0~1」ではなく、 「0,1」とカンマ区切りとする。 (例) A1:0/B1:有 A2:1/B2:有 A3:2/B3:無 A4:3/B4:有 A5:4/B5:有 A6:5/B6:有 A7:6/B7:無 A8:7/B8:無 A9:8/B9:有 A10:9/B10:無 A11:10/B11:無 ⇒ 『 A12 = 0,1,3~5,8 』としたい。 マクロでご教授いただけると幸いです。 よろしくお願いいたします。

  • Excel n行毎の合計数値

    Excelで2行毎、できればn行毎に合計値を求めるセルを作りたいのです。 A1:A10に{1,2,3,,,,}と値が入っているとして、B1から B1=A1+A2 B2=A3+A4 B3=A5+A6 というふうになり、B1=3,B2=7,B3=11,,,と1行毎に合計する範囲がズレていくような列を作るには どうすればいいでしょうか? C1=A1+A2+A3 C2=A4+A5+A6 C3=A7+A8+A9 となっていくような列を作る必要も出てきそうなので、 n行合計ずつ以外でも出来る方法をお願いします。

  • Excel2007でVBAでも関数でも構いません。

    Excel2007でVBAでも関数でも構いません。以下のように表示させる方法がお分かりの方、ご指導願います。 A1(●) B1() A2(●) B2() A3() B3() A4(●) B4() A5() B5() A6() B6(●) A7() B7() A8() B8(●) A9() B9() A10(●) B10() を・・・ C1(●) D1() C2() D2() C3() D3() C4() D4() C5() D5() C6() D6(●) C7() D7() C8() D8() C9() D9() C10(●) D10() に。 言葉では上手く説明できませんが、宜しくお願い致します。

  • Excel 関数かVBAでの解決方法

    Excel 関数かVBAでの解決方法 A列に"1" もしくは"2"がランダムで並んでいるとします。B列にその連続回数を表示させるにはどのようにすればよいでしょうか? 例えばA1からA5まで"1"、A6からA8までが"2"、A9~"1"の場合はB1~B5には1~5、B6~B8には1~3、B9には1~と言うように、それぞれの数字の連続回数を示したいのですが・・・かなりの作業列を使う方法しか思いつきません。どうかよろしくお願いします。

  • エクセルのマクロの事?

    エクセルで A1あ、B1い、C1う A2え、B2お、C2か A3き、B3く、C3け 以下続く このようになっている物を A1あ A2い A3う A4え A5お A6か A7き A8く A9け こんな感じにマクロを使って変更したいのですが、どのようにすればいいでしょうか?

  • エクセルVBA【かんたんなデータ入力】

    お世話になります。 下記データがランダムに何通りもあるとします。 (1)A1~A11をD列以降横列に入力します。 (2)B1~B11のデータを(1)で作った横列の下に入力します。 またデータはたくさんあり、(2)で入力したデータの下に入力していきます。 (3)データ入力の際B4~B9のデータは10で割り小数点第一位まで出します。 RUNボタンを作り(2)と(3)を実行します。 A1 NO   B1 1 A2 年齢   B2  20 A3 性別   B3 ♂ A4 身長 B4 2000    A5 体重 B5 1000 A6 体脂肪率 B6 101 A7 胸囲 B7 1200 A8 胴囲 B8 1000 A9 視力  B9 1 A10 備考 B10 ニュージーランド A11 備考2 B11 ラグビー 上記のようなVBAを教えて下さい。 言葉足らずな点は補足させて頂きます。 宜しくお願い致します。

  • 二つの検索値から別のシートに抽出する

    WinXP,Excel2000 下記のような表から例えば氏名コード(A列)103番と 日付(B列)2006/5/3からE列のデータ3.50を導きたい のですが、この場合検索値がA列・B列と2つあるので 同じシートに答えを出す場合は F3=SUMPRODUCT((A1:A9=F1)*(B1:B9=F2)*E1:E9)で できるのですが、別のシートに抽出するにはどうしたら よいでしょうか。ご教授ください。<m(__)m> A列 B列 C列 D列 E列    F列 1 100 2006/5/3 東京 8:10 8.00   103 2 101 2006/5/3 名古屋 9:10 7.25  2006/5/3 3 102 2006/5/3 大阪 7:45 5.00   3.50 4 103 2006/5/3 京都 10:30 3.50 5 104 2006/5/3 札幌 8:40 4.75 6 100 2006/5/4 福岡 8:45 5.00 7 101 2006/5/4 東京 9:05 6.25 8 103 2006/5/4 大阪 8:15 1.50 9 105 2006/5/4 横浜 10:15 3.00

  • EXCELのSUM()関数の範囲指定について

    お世話になります。以前に同様の質問がありましたら、その場所を教えて下さって頂いても構いません。 各セルには、以下の項目が入っています。 A列には西暦、B列には台数が入っています。 現在、2004年まで入っていますが、毎年行を増やして行こうと思っています。 開始年に1993、終了年に2000と入力すると、合計欄には、1993~2000年の合計値600が自動的に入ります。このとき、計算式をB3に入れ、VBA(マクロ)は使わない方法を教えて下さい。 SUM(範囲)関数なのですが、この範囲の指定を任意に変更できればと思っていますが、どう指定すればいいのか、見当も付きません。 A1="開始年"  B1=1993 A2="終了年"  B2=2000 A3="合計"   B3=600 A5="西暦[年]" B5="台数" A6=1990    B6=10 A7=1991    B7=20 A8=1992    B8=30 A9=1993    B9=40 A10=1994    B10=50 A11=1995    B11=60 A12=1996    B12=70 A13=1997    B13=80 A14=1998    B14=90 A15=1999    B15=100 A16=2000    B16=110 A17=2001    B17=120 A18=2002    B18=130 A19=2003    B19=140 A20=2004    B20=150 よろしくお願いします。