- ベストアンサー
エクセルで、同じ数値のものだけを抽出したいです。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
エクセル2003などでしたらD1セルを選択してから「データ」メニューから「フィルタ」さらに「オートフィルタ」を選択します。1行目のセルには▼マークが表示されるようになります。 D1セルの▼マークをクリックして(すべて)、(トップテン)、(オプション)と並んだ下に1が表示されているでしょう。その1を選択することでD列の1のみが表示されます。お求めの共通のID番号はA列に表示されていますので必要でしたらA列の該当部分をコピーして他のシートに貼り付けをすれば共通のIDが記録できることになります。 これらの操作がすんだあとでは「データ」から「フィルタ」で「オートフィルタ」が選択された状態ですので「オートフィルタ」のチェックマークをクリックして消すことで元の画面に戻ります。
その他の回答 (6)
- mimeu
- ベストアンサー率49% (39/79)
VBAはお嫌かもしれませんが、こんな方法もありますよ。 Option Explicit ' 話の前提として、 ' (1) IDは数値である ' (2) ABC各列ごとに昇順にソートされている Private Ws1 As Worksheet, Ws2 As Worksheet, 行(3), 行末(3) Sub Sheet2に整合表を作る() Dim 生徒番号 As Integer, 初番 As Integer, 末番 As Integer, 生徒あり As Integer, 列 As Long, 行2 As Long ' ここからは作業の準備 Set Ws1 = Worksheets("Sheet1") Set Ws2 = Worksheets("Sheet2") 初番 = Application.WorksheetFunction.Min(Ws1.Range("A2:C2")) 末番 = Application.WorksheetFunction.Max(Ws1.UsedRange) For 列 = 1 To 3 行(列) = 2 行末(列) = Ws1.Cells(65536, 列).End(xlUp).Row Next 列 Ws2.UsedRange.Clear Ws1.Range("A1:C1").Copy Ws2.Range("A1") 行2 = 2 ' ここから、仕事の本番 For 生徒番号 = 初番 To 末番 生徒あり = 0 For 列 = 1 To 3 生徒あり = 生徒あり + 番号が一致(生徒番号, 列, 行2) Next 列 If (生徒あり And 3) > 0 Then Ws2.Cells(行2, 4) = (生徒あり And 3) 行2 = 行2 + 1 End If Next 生徒番号 Ws2.Range("D1") = "出席回数" Ws2.Range("E1") = "3年とも出席者 = " & Application.WorksheetFunction.CountIf(Ws2.Range("D2:D" & 行2), 3) & " 人" End Sub Private Function 番号が一致(ByVal 生徒番号 As Integer, ByVal 列 As Long, ByRef 行2 As Long) As Integer Do While 行(列) <= 行末(列) If Ws1.Cells(行(列), 列) < 生徒番号 Then 行(列) = 行(列) + 1 If 行(列) > 行末(列) Then 番号が一致 = 8 Exit Function End If ElseIf Ws1.Cells(行(列), 列) = 生徒番号 Then 番号が一致 = 1 Ws2.Cells(行2, 列) = 生徒番号 Exit Function Else 番号が一致 = 4 Exit Function End If Loop 番号が一致 = 8 End Function
お礼
とても丁寧にご回答いただきありがとうございました。 高度なテクニックなんですね。エクセルは深いですね。 いつもは表をつくるだけで、あまり計算はしなかったので 関数もよくわかっていないレベルです(T-T) もっと上達してみたいです。 本当にありがとうございました!!
- makoteru
- ベストアンサー率29% (128/440)
現在のA列とB列の間に列を挿入してください。 B2から、次の式を入れてB3以降同じ式をコピーしてください。 但し、この式は画像のエクセルを基に作成しておりますので、$D$21は行数がふえれば、21の数値を調べたい最終行数に置き換えてください。 2008年度の出席された方で、2009,2010にも該当するID番号があれば、○印を出すようにしてみました。 =IF(COUNTIF($C$2:$D$21,A3)=2,"○","")
お礼
ご回答ありがとうございます! こういったやり方もあるのですね。 「COUNTIF」という関数を今回初めて使いました。 エクセルはすごいですね。 あらためて、がんばってみようと思います。
- KURUMITO
- ベストアンサー率42% (1835/4283)
何度もごめんなさい。 D列で1を抽出したときにA列に表示されているID番号が3列に共通して入力されているID番号です。
補足
早速ありがとうございます!! D列に、1を表示できたのですが、 > その後はD列を重点にして並べ替えのフィルタで1を抽出すればよいでしょう。 この部分はどうすればよいのでしょうか。 全然わかってなくてすみません。どうかお願いします!
- merlionXX
- ベストアンサー率48% (1930/4007)
2008年度~2010年度まで、全て出席している生徒なら必ずC列にあるはずですから、D2セルに =COUNTIF($A$2:$C$21,C2) $C$21は実際の行になおしてください。たとえば2万行あるなら =COUNTIF($A$2:$C$20001,C2) といれてフィルドラッグして式をコピーします。 3と返るIDが全て出席しているIDですから、D列を並び替えれば抽出できますね。
お礼
ご回答ありがとうございます。 COUNTIF、という関数を今回初めて知りました。 いつも合計を出したり平均を出したりくらいしか していなかったので・・・ 勉強になりました。ありがとうございました!
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 最初の文章だけ間違いでした。D1セルにはID抽出とでも入力してください。その後の操作はNo1と同じです。
- KURUMITO
- ベストアンサー率42% (1835/4283)
D1セルに抽出したいID番号を入力します。 D2セルにはセルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(COUNTIF(B:B,A2)>0,COUNTIF(C:C,A2)>0),1,"") A列、B列、C列に同じIDがあれば1が表示されますので、その後はD列を重点にして並べ替えのフィルタで1を抽出すればよいでしょう。
お礼
おかげさまで、解決できました!!!\(^o^)/ ずっと悩んでいたので、とても助かりました。 わかりやすいご回答本当にありがとうございました!