- 締切済み
同じ行に混在している別々の項目の抜き出し
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- mate0128
- ベストアンサー率30% (31/103)
並べ替えとフィルタを使えば、楽になると思います。 まず、名前の入力してある列のどれか、1つのセルを選んでおいて、[データ]-[並べ替え]で、並べ替えます。そうすると、名前のアイウエオ順に並びます。 並べ変わった結果を[切り取り]ー[貼り付け]、または、[コピー]-[貼り付け]で、自分の貼り付け隊列に貼り付けます。 後で並べ替えを元に戻したかったら、先に1番左に列を挿入して1から始まる連番を振っておきます。後から、その番号を選択しておいて、並べ替えを実行してください。
- imogasi
- ベストアンサー率27% (4737/17068)
#4です。 質問者の要望と少し違いますが、操作だけでまとめの表を作れないかと考えて、下記は出来るので、書いてみます。 こういう表はどうですか。 ピボットテーブルを使う方法です。 例データ Sheet1に データに点数がありませんが、加えた表でも操作は同じです 氏名 科目 日付 a 英語 2011/1/1 a 数学 2022/2/2 b 数学 2011/2/1 b 英語 2011/2/4 c 数学 2011/2/4 b 国語 2011/3/1 c 英語 2011/3/2 a 数学 2011/3/2 b 数学 2011/3/3 ーー データーピボットテーブルと・・ 次へ 次へ レイアウトで 「行」へ 右のボタンの中から 氏名 科目 日付 をそれぞれ、マウスでD&D(ドラッグアンドドロップ) データは氏名をD&D(ドラッグアンドドロップ)して個数等を選ぶ 完了 ここでピボットテーブルが出来る。 ーー 英語/合計の1つを選択 右クリック 「表示しない」を選択 ーー a合計の1つを選択し 右クリック 表示しない -- 結果 データの個数 / 氏名 氏名 科目 日付 合計 a 英語 2011/1/1 1 数学 2011/3/2 1 2011/2/2 1 b 英語 2011/2/4 1 国語 2011/3/1 1 数学 2011/2/1 1 2011/3/3 1 c 英語 2011/3/2 1 数学 2011/2/4 1 総計 9 -- ここで 合計列 総計行 を除いて範囲指定 コピー 他のセル範囲に貼り付け ーー 結果 レイアウトが乱れますが実際にシートでやってみてください。--は本当は空白セルです。 氏名 科目 日付 a 英語 2011/1/1 ーー 数学 2011/3/2 ーー ーー 2011/2/2 b 英語 2011/2/4 ーー 国語 2011/3/1 ーー 数学 2011/2/1 ーー ーー 2011/3/3 c 英語 2011/3/2 ーー 数学 2011/2/4 ーー 数学 2011/2/4 となる
- imogasi
- ベストアンサー率27% (4737/17068)
そもそも、エクセルで条件による抜き出しは、良い関数がない。こういう問題には適してない。エクセルの関数は計算が中心。 無理にしようとすると、既に出ている回答のような、長く、且つ初心者には理解できない式になる。 今まではそれでも初心者や、ここの質問者はコピペして、旨く出来ましたと、いっているのが多い。 それでもよければそうしたら良い。 ーーー もうひとつ、A列に現われる名前の一覧を出すのも、質問者は気づいてないだろうが、結構難しいのだ。 そこで関数を使わず操作だけでやる方法を参考に挙げておく。 ーー A列の名前の、もれがなく、ダブりがない、一そろいの名前が必要です。その出し方を書く。 A1:A13 3対づつになっているが、2回しかない人が居ても良い 氏名 佐藤 田中 上野 山田 佐藤 田中 上野 山田 佐藤 田中 上野 山田 メニュ0のデーターフィルターフィルタオプションの設定ー 抽出先 指定した範囲 リスト範囲 A1:A13 抽出する範囲 D1:D11 重複するレコードは無視する OK ーーー 結果 D1:D5 氏名 佐藤 田中 上野 山田 ーーーー D1:D5範囲指定 編修ーコピー E2:IV2を名愛指定 編修ー形式を選択して張り付け 行列を入れ替える。 ーーー E1を選択 E1に式 =IF(MOD(COLUMN(),3)=2,INDEX($E2:$IV2,1,INT((COLUMN()-3)/3)),"") を入れて右方向に式を吹くさh D1:D4をクリア E2より右列をクリア。 E1:IV1をコピー 同じ範囲にkウィ式を選択して貼り付けー値 で式を消す。 === 名前で並べ替えて、VBAで名前ごとに別のセル範囲に移すのが、考えやすいがVBAができないあdろうし悩ましい。、 ーーー でも手作業で並べ替えるのが、質問を出して回答を待って理解して、自分のために修正するより速いだろう。 50人までなら確実に手作業がに速い。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号:ANo.2です。 先程の私の回答で述べた方法は、元データに氏名が現れた順番に、データを並べているため、元データが日付順に並んでいない場合には、抽出したデータも日付順には並ばない事があります。 もし、元データが日付順に並んでいない場合であっても、抽出したデータを日付順に並べ換える必要がある場合には、作業列を3列使用した、以下の様な方法にすると良いと思います。 今仮に、元データが存在しているSheetの名前がSheet1であるものとして、Sheet2のA列~C列を作業列として使用するものとします。 まず、Sheet2のA1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT(Sheet1!$C:$C),"",SMALL(Sheet1!$C:$C,ROWS($1:1))) 次に、Sheet2のB1セルに次の数式を入力して下さい。 =IF($A1="","",INDEX(Sheet1!$A:$A,SUMPRODUCT(ROW(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C)))*(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C))=$A1)*(COUNTIF(OFFSET(Sheet1!$C$1,,,ROW(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C)))),$A1)=COUNTIF($A$1:$A1,$1))))) 次に、Sheet2のC1セルに次の数式を入力して下さい。 =IF($A1="","",INDEX(Sheet1!$B:$B,SUMPRODUCT(ROW(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C)))*(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C))=$A1)*(COUNTIF(OFFSET(Sheet1!$C$1,,,ROW(OFFSET(Sheet1!$C$1,,,MATCH(9^9,Sheet1!$C:$C)))),$A1)=COUNTIF($A$1:$A1,$A1))))) 次に、Sheet2のA1~C1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 次に、Sheet1のD2セルに次の数式を入力して下さい。 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX(Sheet2!$C:$C,SUMPRODUCT(ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A)))*(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A))=D$1)*(COUNTIF(OFFSET(Sheet2!$B$1,,,ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A)))),D$1)=ROWS($2:2))))) 次に、Sheet1のE2セルに次の数式を入力して下さい。 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX(Sheet2!$A:$A,SUMPRODUCT(ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A)))*(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A))=D$1)*(COUNTIF(OFFSET(Sheet2!$B$1,,,ROW(OFFSET(Sheet2!$B$1,,,MATCH(9^9,Sheet2!$A:$A)))),D$1)=ROWS($2:2))))) 次に、Sheet2のD2~E2の範囲をコピーして、下方や右方の、抽出結果を表示させるセル範囲に、貼り付けて下さい。 以上です。
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、 D1セルに 佐藤 F1セルに 田中 と言う具合に、1列おきの1行目のセルに、各氏名を入力して下さい。 次に、D2セルに次の数式を入力して下さい。 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX($B:$B,SUMPRODUCT(ROW($A$1:$A$100)*($A$1:$A$100=D$1)*(COUNTIF(OFFSET($A$1,,,ROW($A$1:$A$100)),D$1)=ROWS($2:2))))) 次に、E2セルに次の数式を入力して下さい。 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX($C:$C,SUMPRODUCT(ROW($A$1:$A$100)*($A$1:$A$100=D$1)*(COUNTIF(OFFSET($A$1,,,ROW($A$1:$A$100)),D$1)=ROWS($2:2))))) 次に、D2~E2の範囲をコピーして、下方や右方の、抽出結果を表示させるセル範囲に、貼り付けて下さい。 以上です。 尚、元のデータの行数が、次々に増えて行き、100行以内には収まらなくなる場合には、以下の様な数式とすれば、元データの行数に合わせて、一々数式を修正する必要が無くなります。(もし、満点が999点かそれ以上になる場合は、数式中の999となっている部分を、満点よりも高い数値に変更して下さい) D2セルの数式 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX($B:$B,SUMPRODUCT(ROW(OFFSET($A$1,,,MATCH(999,$B:$B)))*(OFFSET($A$1,,,MATCH(999,$B:$B))=D$1)*(COUNTIF(OFFSET($A$1,,,ROW(OFFSET($A$1,,,MATCH(999,$B:$B)))),D$1)=ROWS($2:2))))) E2セルの数式 =IF(OR(D$1="",ROWS($2:2)>COUNTIF($A:$A,D$1)),"",INDEX($C:$C,SUMPRODUCT(ROW(OFFSET($A$1,,,MATCH(999,$B:$B)))*(OFFSET($A$1,,,MATCH(999,$B:$B))=D$1)*(COUNTIF(OFFSET($A$1,,,ROW(OFFSET($A$1,,,MATCH(999,$B:$B)))),D$1)=ROWS($2:2)))))
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 ↓の画像のようにA列を挿入し、作業用の列としています。 (氏名を重複なしに抽出するためです) 作業列A2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(),"") という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。 そしてF1セルに =IF(COUNT($A:$A)*2<COLUMN(A1),"",INDEX($B$1:$B$1000,SMALL($A$1:$A$1000,COLUMN(B1)/2))) という数式を入れ隣のG1セルを結合しています。 この結合セルのフィルハンドルで列(右)方向に2列ずつオートフィルでしっかりコピーしておきます。 F2セルに =IF(OR(F$1="",COUNTIF($B$1:$B$1000,F$1)<ROW(A1)),"",INDEX($C$1:$C$1000,SMALL(IF($B$1:$B$1000=F$1,ROW($A$1:$A$1000)),ROW(A1)))) これは配列数式になってしまいますので、F2セルに貼り付け後 Shift+Ctrlキーを押しながらEnterキーで確定! G2セル(これも配列数式です)に =IF(OR(F2="",COUNTIF($B$1:$B$1000,F$1)<ROW(A1)),"",INDEX($D$1:$D$1000,SMALL(IF($B$1:$B$1000=F$1,ROW($A$1:$A$1000)),ROW(A1)))) という数式を入れ、Shift+Ctrlキーを押しながらEnterキーで確定! G2セルの表示形式は「日付」にしておきます。 そしてF2・G2セルを範囲指定し列方向に2列ずつオートフィルでコピー! 最後にそのまま下へコピーすると画像のような感じになります。 以上、他によい方法があればごめんなさいね。m(__)m
関連するQ&A
- SQLの質問です。
以下のようなテーブルで、レベルが4以下で点数が入力されているMAXの行を取得したいです。 よろしくお願いいたします。 職員番号 氏名 レベル 点数 01000 山田 花子 4 01000 山田 花子 3 40 01000 山田 花子 2 30 01000 山田 花子 1 20 01100 田中 あああ 4 10 01100 田中 あああ 3 20 01100 田中 あああ 2 30 01100 田中 あああ 1 40 01200 佐藤 あああ 4 01200 佐藤 あああ 3 01200 佐藤 あああ 2 30 01200 佐藤 あああ 1 40 この場合、取得したいのは 職員番号01000の人は点数40の行、01100の人は点数10の行、01200の人は点数30の行の 合計3行です。
- ベストアンサー
- Oracle
- SQLの質問です。
下記のようなテーブルで、 レベル4以下で点数が入力されているMAXの行を持ってくるにはどうしたらよいでしょうか?よろしくお願いいたします。 職員番号 氏名 レベル 点数 01000 山田 花子 4 01000 山田 花子 3 40 01000 山田 花子 2 30 01000 山田 花子 1 20 01100 田中 あああ 4 10 01100 田中 あああ 3 20 01100 田中 あああ 2 30 01100 田中 あああ 1 40 01200 佐藤 あああ 4 01200 佐藤 あああ 3 01200 佐藤 あああ 2 30 01200 佐藤 あああ 1 40 この場合欲しい結果は 職員番号01000の人は点数40点の行、01100の人は点数10点の行、01200の人は点数30点の行 3行を表示したいです。
- ベストアンサー
- Oracle
- excelで1人ずつ行の高い点数だけ抜きだしたい。
excelで1人ずつ行の高い点数だけ抜きだすことはできますか。 例) A 列 B列 <=をつけている行が取り出したい行 田中 100 <= 田中 70 佐藤 80 <= 佐藤 70 佐藤 65 ; ; 宜しくお願いします。
- ベストアンサー
- Excel(エクセル)
- Excelで頭数を算出する関数?
こんにちは。 C列3行目から20行目に氏名があり、D列には個数があります。氏名欄には同一人物も載っているので、メンバーの人数を知るにはどの関数がありますか。 例えば3行目から6行目まではメンバーが3人という結果が出るようにしたいのです。 3 山田太郎 3個 4 佐藤花子 5個 5 田中次郎 6個 6 山田太郎 2個 メンバーは相当の数なので誰が何個売ったかは問題にしません。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルにて「期間指定」で「データ集計」する方法
エクセルで営業商談用顧客管理を行っています。 シート1には、商談日を下記のように記載しており A列 B列 日付 担当 1/1 山田 1/6 田中 1/8 佐藤 2/3 山田 2/4 山田 2/6 佐藤 2/9 田中 3/1 佐藤 3/2 山田 3/5 佐藤 別シートにて、例えば1月にどの担当が何件商談をしたか、を 下記のように管理したいのですが 山田 ○件 田中 ○件 佐藤 ○件 こちらの関数の指定方法について、ご教授いただけないでしょうか? よろしくお願いします
- 締切済み
- マーケティング・企画
- (エクセル)日付に相当するデータを入力する
シート1に以下のように、A列には氏名、C列に日付がランダムに入力されています。 A B C 1 山田 4/4 3:00 2 佐藤 4/3 2:00 3 石井 4/4 3:00 4 加藤 4/3 2:00 5 田中 4/1 5:00 シート2に上から順位に並び替えたいです A B C D E F G 1 4/1 4/2 4/3 4/4 4/5 2 1 田中 4/1 5:00 3 2 佐藤 4/3 2:00 4 3 加藤 4/3 2:00 5 4 山田 4/4 3:00 6 5 石井 4/4 3:00 1行目のC~Gには既に4/1~4/5が入力されています。 対応するところに日付を入力し、さらにB列には氏名を表示したいです。 C2には「=IF(AND(SMALL(Sheet1!$C$1:$C$5,$A2)<D$1,SMALL(Sheet1!$C$1:$C$5,$A2)>=C$1),SMALL(Sheet1!$C$1:$C$5,$A2),"")」としてうまくいきました(C1:F6も同様)。 問題はB列なのですが、B2に「=INDEX(Sheet1!$A$1:$A$5,MATCH(SUM(C2:G2),Sheet1!$C$1:$C$5,0))」や「=INDEX(Sheet1!$A$1:$A$5,MATCH(SMALL(Sheet1!$C$1:$C$5,A2),Sheet1!$C$1:$C$5,0))」としても同じ失敗結果になりました。 両方とも、上から順に 田中 佐藤 佐藤 ←失敗(加藤が正解) 山田 山田 ←失敗(石井が正解) となってしまい、重複する日付が失敗してしまいます。 B列にどのようにしたら良いか教えてください。 よろしくお願いします。
- 締切済み
- Excel(エクセル)
- Excel(2010)で氏名の頻度の求め方
Excel(2010)で、A列に縦に 山田 鈴木 田中 山田 鈴木 山田 というように氏名の並べてある表があるとします。この表で氏名の頻度が 山田 3 鈴木 2 田中 1 というように表示できる関数または方法があるでしょうか。 この表のように項目が少なければ 山田 鈴木 田中 というセルを作っておいて、VLOOKUP関数で求められますが、実際には約500行ありその中の氏名をすべて手作業で入力するのは大変ですので、重複なくすべての氏名を抜き出すのは実際的ではありません。 以上よろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- excelのソートと取り出し
excelで複数をソートして高い点数だけ抜きだすことはできますか。 例) A 列 B列 <=をつけている行が取り出したい行 田中 70 佐藤 90 <= 田中 100 <= 佐藤 70 ; ; 宜しくお願いします。
- ベストアンサー
- Excel(エクセル)
- excelVBA 項目ごとに連番をふりたい
よろしくお願いします。 excelで連番を振りたいのですが、隣のセルに並んでいる 項目ごとに振りたいのです。VBAでできるでしょうか? 番号を振りたいのはB列で、名前ごとに1から順番に番号を 振りたいです。名前が変わるとまた1に戻って、振っていき、 A列がなくなると終了です。 A列の名前の数や、それぞれのデータ数、 全体のデータ数などは、ばらばらです。 もしかしたら列数はかわるかも知れませんが、 隣の列の項目ごとに番号を1から振る、ということは 変わりません。 (A列) (B列) 山田 1 山田 2 山田 3 田中 1 田中 2 田中 3 田中 4 佐藤 1 佐藤 2 加藤 1 斎藤 1 斎藤 2 斎藤 3 斎藤 4 斎藤 5 ・ ・ ・ ・ ・ ・ 今は目で見ながら毎日、オートフィルタでがんばっています。 これができるとすごくうれしいです。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- アクセス関数を使って、重複チェック
アクセス2003を使っています。 ある講座の受講者のデータが入っているデータベースを作ろうと考えています。 その講座には受講者が実際に重複して受講する人がいます。 重複して受講しているかどうかを、「選択クエリ上の関数」を使って調べたいです。 具体的には 氏名 受講月 山田太郎 2009/1 佐藤一郎 2009/2 山田次郎 2009/3 佐藤一郎 2009/4 というデータベースがあり、佐藤一郎が重複しています。(受講月は重複していません) これをクエリを使って、 氏名 受講月 山田太郎 2009/1 佐藤一郎 2009/2 重複 山田次郎 2009/3 佐藤一郎 2009/4 重複 というクエリを作りたいです。 どうすれば良いでしょうか?
- ベストアンサー
- その他MS Office製品