- 締切済み
EXCELでのデータ抽出方法
EXCEL2003を使用して次のような条件で式を作成したいと思っております。 下記表B列には、生徒から提出された課題が入力されています。 表は3行ごとに一つのグループになっています。 B列3行(一つのグループ)を見て、各自提出した課題の種類をC列の最初の行に表示させたいです。 尚、重複している課題は一つのみ表示します。 分かりずらい説明で申し訳ございませんが、ご教示よろしくお願い致します。 A列 B列 C列 提出者 課題 データ表示列 ---------------------------------------------------------- 1 A 課題A 課題A 2 B 3 C ---------------------------------------------------------- 4 D 課題A 5 E 課題A 6 F 課題A ---------------------------------------------------------- 7 G 課題C 課題C 8 H 課題B 課題B 9 I 課題A 課題A ---------------------------------------------------------- 10 J 課題C 11 K 12 L 課題C ----------------------------------------------------------
- Aquarius200
- お礼率0% (0/7)
- オフィス系ソフト
- 回答数7
- ありがとう数0
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17068)
関数でやろうとすると難しい式になる。 既に出ている関数の回答の長く難しいこと。 VBAが出来なければしょうがないが、VBAなら素直に条件をプログラムに組み込める。 例データ A列 B列 D列(VBA実行結果) 提出者 課題 データ表示列 A 課題A 課題A B C D 課題A 課題A E 課題A F 課題A G 課題C 課題C H 課題B 課題B I 課題A 課題A J 課題C 課題C K L 課題C 質問の例データも、このように書いてくれれば、すっきりしてわかりやすいのではないか。あと3行単位で考えることを添えて。 あと課題AのAは皆統一した。質問文では気をつけて。または別なら注記して。 ーー VBAコード Sub test01() Dim sh1 Set sh1 = Worksheets("Sheet1") d = sh1.Range("A65536").End(xlUp).Row For i = 2 To d Step 3 '3行づつとらえる Set rng = sh1.Range(sh1.Cells(i + 0, "D"), sh1.Cells(i + 2, "D")) 'D列で3行づつとらえる j = i: k = i '--- For j = 0 To 2 '3行内の各行処理 If sh1.Cells(i + j, "B") <> "" Then 'B列が空白で無ければ y = sh1.Cells(i + j, "B") 'B列の値取得 x = Application.WorksheetFunction.CountIf(rng, y) 'D列3行で同じものが既に無いか MsgBox x If x = 0 Then '同じものが無ければD列に増やす sh1.Cells(k, "D") = sh1.Cells(i + j, "B") k = k + 1 'D列で下の行をポイント End If End If Next j Next i End Sub コメントだけでも参考に。 上記D列が実行結果。 私は仕事でエクセルを使うには、VBAの仕様は必須だという持論。 ーー 2-3百人程度なら手作業でコピペするほうが回答を待って理解して、自分の場合に式を修正してより速い。 スペース行を省き、かつ3行内で同じ行は省く、VBAを作って手作業の再に使う手もある。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 重複分は不要という事なのでVBAを使用しました。 対象のシートタブ上で右クリック→コードの表示→以下のサンプルコードを貼り付け→F5キー押下 Sub sample() Set Db = CreateObject("Scripting.Dictionary") For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row Step 3 For j = 0 To 2 If Cells(i + j, "B").Value <> "" Then Db(Cells(i + j, "B").Value) = 1 End If Next j wk = Db.keys For k = 0 To Db.Count - 1 Cells(i + k, "C").Value = wk(k) Next k Db.RemoveAll Next i End Sub
- KURUMITO
- ベストアンサー率42% (1835/4283)
C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(MOD(ROW(A1),3)=1,IF(B2<>"",B2,IF(B3<>"",B3,IF(B4<>"",B4,""))),IF(MOD(ROW(A1),3)=2,IF(AND(B2<>"",B2<>C1),B2,IF(AND(B3<>"",B3<>C1),B3,"")),IF(MOD(ROW(A1),3)=0,IF(AND(B2<>"",COUNTIF(OFFSET(C1,-1,0):C1,B2)=0),B2,""))))
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答番号ANo.3です。 申し訳御座いません、 >尚、重複している課題は一つのみ表示します。 と言う箇所を見落としておりました。 先程の回答の関数は、重複の除外には対応しておりません。 重複を除外する場合には、以下の様な方法があります。 今仮に、Sheet1に A列 B列 C列 1行目 提出者 課題 データ表示列 2行目 A 課題A 課題A 3行目 B 4行目 C 5行目 D 課題A 6行目 E 課題A 7行目 F 課題A 8行目 G 課題C 課題C 9行目 H 課題B 課題B 10行目 I 課題A 課題A 11行目 J 課題C 12行目 K 13行目 L 課題C という形に表を作成するものとします。 又、Sheet2のA列を作業列として使用するものとします。 まず、Sheet2のA2セルに次の数式を入力して下さい。 =IF(COUNTIF(OFFSET(Sheet1!$B$1,FLOOR(ROWS(Sheet1!$B$1:$B2)-2,3)+1,,MOD(ROWS(Sheet1!$B$1:$B2)-2,3)+1),Sheet1!$B2)=1,ROW(),"") 次に、Sheet2のA2セルをコピーして、Sheet2のA3以下に貼り付けて下さい。 次に、Sheet1のC2セルに次の数式を入力して下さい。 =IF(MOD(ROWS($B$1:$B2)-2,3)<COUNT(OFFSET(Sheet2!$A$1,FLOOR(ROWS($B$1:$B2)-2,3)+1,,3)),INDEX($B:$B,SMALL(OFFSET(Sheet2!$A$1,FLOOR(ROWS($B$1:$B2)-2,3)+1,,3),MOD(ROWS($B$1:$B2)-2,3)+1)),"") そして、Sheet1のC2セルをコピーして、Sheet1のC3以下に貼り付けて下さい。
- kagakusuki
- ベストアンサー率51% (2610/5101)
今仮に、 A列 B列 C列 1行目 提出者 課題 データ表示列 2行目 A 課題A 課題A 3行目 B 4行目 C 5行目 D 課題A 6行目 E 課題A 7行目 F 課題A 8行目 G 課題C 課題C 9行目 H 課題B 課題B 10行目 I 課題A 課題A 11行目 J 課題C 12行目 K 13行目 L 課題C という形に表を作成するものとします。 その場合、まず、C2セルに次の数式を入力して下さい。 =IF(MOD(ROWS($1:2)-2,3)<COUNTIF(OFFSET($B$1,FLOOR(ROWS($1:2)-2,3)+1,,3),"*"),INDEX($B:$B,SUMPRODUCT(ROW(OFFSET($B$1,FLOOR(ROWS($1:2)-2,3)+1,,3))*(OFFSET($B$1,FLOOR(ROWS($1:2)-2,3)+1,,3)<>"")*(COUNTIF(OFFSET($B$1,FLOOR(ROWS($1:2)-2,3)+1,,ROW(INDIRECT("Z1:Z3"))),"*")=MOD(ROWS($1:2)-2,3)+1))),"") そして、C2セルをコピーして、C3以下に貼り付けて下さい。
- MackyNo1
- ベストアンサー率53% (1521/2850)
関数で対応するなら、力技になりますが、例えば以下のような数式で表示できます。 C2セル =IF(B2<>"",B2,IF(B3<>"",B3,B4&"")) C3セル =IF(MAX(INDEX((B2:B4=C2)*ROW(B2:B4),))>=ROW(B4),"",IF(OFFSET($B$1,MAX(INDEX((B2:B4=C2)*ROW(B2:B4),)),0)&""<>"",OFFSET($B$1,MAX(INDEX((B2:B4=C2)*ROW(B2:B4),)),0),B4&"")) C4セル =IF(AND(COUNTA(B2:B4)=3,B2<>B3,B3<>B4,B2<>B4),B4,"") 上記3つのセルを選択して下方向にオートフィルコピーしてください。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 関数ではなく、VBAでの一例ですので、参考にならなかったら読み流してください。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Columns(4).Insert For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 3 Range(Cells(i, 2), Cells(i + 2, 2)).Copy Cells(1, 4).Select ActiveSheet.Paste For j = 3 To 1 Step -1 If WorksheetFunction.CountIf(Range(Cells(1, 4), Cells(j, 4)), Cells(j, 4)) > 1 _ Or Cells(j, 4) = "" Then Cells(j, 4).Delete (xlUp) End If Next j Range(Cells(1, 4), Cells(3, 4)).Copy Cells(i, 3).Select ActiveSheet.Paste Next i Columns(4).Delete Cells(1, 1).Select End Sub 'この行まで ※ 無理矢理って感じのコードですがこの程度しか思いつきませんでした。m(_ _)m
関連するQ&A
- エクセルでのデータ抽出方法について
Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名 列D・列E→列A・列Bから抽出したい情報 【列A】 【列B】 【列C】 【列D】 【列E】 【行1】 11111 山田 太郎 - 11119 (※「山田 九郎を」入れたい) 【行2】 11112 山田 二郎 - 11112 (※「山田 二郎を」入れたい) 【行3】 11113 山田 三郎 - 11118 (※「山田 八郎を」入れたい) 【行4】 11114 山田 四郎 - 11114 (※「山田 四郎を」入れたい) 【行5】 11115 山田 五郎 【行6】 11116 山田 六郎 【行7】 11117 山田 七郎 【行8】 11118 山田 八郎 【行9】 11119 山田 九郎 : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセル2003 データの抽出
excel2003を使用しています。 A列に8桁のコード、B列に、そのコードの品名が入力された表があります。 この表の中から、最初の4桁だけ一致するデータを抽出したいのですが どうすればよいでしょうか? オートフィルタオプションを使ってみたのですが、うまくできません。 よろしくお願いいたします。 例:12348888、12349999、12346666、32224434、46732235・・・・と並ぶコードの中から、 1234×××× のコードの行だけが、表示されるようにしたい。
- ベストアンサー
- オフィス系ソフト
- 【エクセル】抽出データを上に詰めて表示させたい。
重複するデータを上に詰めて表示さセル方法が解らないです。 B列はA列の元データから重複分は表示しないようにしています。 C列はA列の元データから重複分の数を数えています。 │A │B │C│ D │ 1│あああ │あああ │3│ 2│いいい │いいい │2│ 3│あああ │ │ │ 4│ええ │ ええ │2│ 5│おおお │おおお │1│ 6│ええ │ │ │ 7│いいい │ │ │ 8│あああ │ │ │ 9│うううう│うううう│1│ ・ ・ 上記のような表で、A列が元データで、 B列にはセルB1から、=IF(COUNTIF($A$1:A1,A1)>1,"",A1)という関数を オートフィルで下まで伸ばしています。 C列は、=IF(COUNTIF($A$1:A1,A1)>1,"",COUNTIF($A$1:$A$100,A1))と いう関数を使用しています。 そこで、B列C列の何も表示されていないセルを詰めて、上に詰めて 表示させたいです。マクロは良くわからないのでなるべく関数で お願いします。ちなみに、今使用している関数も、こうしたほうが いいというのがありましたら。訂正してもらえると助かります。 解りづらいところがありましたら、補足します。 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセル データ抽出
A列には、年月6桁の数値 例/200501 B列には、サブグループを示す文字列 黒、白 のいずれか C列には、100刻みの整数(各サブグループ毎に連続した値となるが、最小値と最大値 は都度変化する。→個数・行数が変動) データが変化するたびに各グループごとに、自動でC列のデータ種類一覧を表示 させたい(重複を除いて、昇順)のですが、どのような方法がありますでしょうか。 LOOKUPとMAX(MIN)を併用するようなイメージを持ったのですが可能でしょうか? 例えば、下の場合、グループ「200501」のC列のデータ種類は200、300、400、500、というように。 A B C 1 200501 黒 300 2 200501 黒 400 3 200501 黒 500 4 200501 白 200 5 200501 白 300 6 200502 黒 400 7 200502 黒 500 ・ ・ ・ お手数ですがよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel データの抽出について教えて下さい。
初めて質問させて頂きます。 Excelでデータの抽出と言ったらいいでしょうか・・・ 「一定の条件に当てはまった場合に、別のセルに数字を入力する」 というような処理をしたいのですが、データ量が多くて、 どのようにやったら効率がいいのか、頭を悩ませています。 例えば・・・ A列 B列 1行目 111 A 2行目 112 B 3行目 115 C 4行目 115 C 5行目 118 D といったようなデータが1500件ほどあります。 このデータを使って、A列の中で番号が2つ(又は3つ等)あるものに、 A列 B列 C列 1行目 111 A 2行目 112 B 3行目 115 C 1 4行目 115 C 1 5行目 118 D といった感じで決まった数字を表示する方法がないでしょうか? こんな説明でご理解頂けるかどうか、心配なんですが・・・。 いい方法をご存知の方がいらっしゃいましたら、力を貸して下さい。
- ベストアンサー
- オフィス系ソフト
- エクセルで抽出の関数は?
A B C ----------- 1 A 1 あ 2 A 2 い 3 B 3 う 4 B 1 え 5 C 2 お 上記のようなA1からC5までの表があるとします。 例えばA6に「A」B6に「2」と入力した時に、C6に「い」と表示したいのですが、どのような関数を使って表示すればいいのですか? A列とB列の条件が合致するものをC列に表示する行を作成したいのです。教えてください。
- ベストアンサー
- オフィス系ソフト
- 「エクセル」で重複したデータだけを呼び出したい。
「Excel2000」を使用しています。 「重複しているデータだけ抽出する」 ということは出来るでしょうか? たとえば「A列」に名前が入っていて、 「B列」に住所、「C列」に電話番号が 入っているとします。 重複した名前だけを呼び出して、 なおかつ「B列」「C列」の データも表示させたいのですが…。
- ベストアンサー
- オフィス系ソフト
- エクセルでのデータの表示
エクセルでのデータの表示 次のような表が在ります。 A列 B列 100 2 100 2 101 6 101 2 101 6 102 6 102 6 103 2 103 2 103 2 104 6 104 2 ・ ・ ・ ・ ・ ・ これを、次のように、C列に「◎」と「×」を表示させるようにするには、どのようにすれば可いですか? つまり、「A列のナンバーが重複していて、且つ、B列の数字が異なる二種類の場合は、C列に◎」、「A列のナンバーが重複していて、B列の数字は一種類の場合は、Cれつに×」と表示させたいのです。 A列 B列 C列 100 2 × 100 2 × 101 6 ◎ 101 2 ◎ 101 6 ◎ 102 6 × 102 6 × 103 2 × 103 2 × 103 2 × 104 6 ◎ 104 2 ◎ ・ ・ ・ ・ ・ ・ 宜しくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- Excelでのデータ抽出
Excelで外部結合風のデータ抽出を教えてください。 シートAとシートBに表形式のデータがあり、 シートAのA列の値とシートBのA列の値が一致するシートBの 行を抽出するのが目的です。 具体的には次のような感じです。 シートA シートB ---------------- ---------------- A列 | B列 | C列 A列 | B列 | C列 ---------------- ---------------- 2 | 2B | 2C 1 | 1BB | 1CC ---------------- ---------------- 4 | 4B | 4C 2 | 2BB | 2CC ---------------- ---------------- 6 | 6B | 6C 3 | 3BB | 3CC ---------------- ---------------- ↓ シートB ---------------- A列 | B列 | C列 ---------------- 2 | 2BB | 2CC ---------------- 以下以外の方法がありましたら教えてください。 1)アクセスに両シートのデータを取り込み、2つのテーブルを外部結合で連結させる。 2)マクロで二重ループをつくり、A列が一致した行を取り出す。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELの重複データの抽出について
1月と2月という2つのシートがあり、それぞれA列に姓、B列に名、C列にメールアドレスが入力されています。 1月と2月を比べてABC列のデータが全く同じものだけを、1月重複分、2月重複分として抽出することが、ExcelまたはAccessでうまくできないため、どなたか教えてください。
- 締切済み
- オフィス系ソフト