- 締切済み
EXCEL表で同じ数値の行を削除する方法
こんにちは。マクロなどを使わない方法を教えて下さい。 EXCEL2003の表で下記のような表があったとします。 A | B | 1|100 |東京 | 2|100 | | 3|200 |大阪 | 4|200 | | 5|200 | | 6|300 |名古屋| 7|400 |仙台 | この表で、A列に同じ数字が入っている行の先頭行だけ残して、あとは削除したいんです・・・ 400行ぐらいあるので一気にできるいい方法がありましたら教えてください。 よろしくお願いします。
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- ufufuehehe
- ベストアンサー率63% (51/80)
A列を選択してデータ-フィルタ-オートフィルタを選択し、そのままデータ-フィルタ-フィルタオプションの設定で、 抽出先:選択範囲内 リスト範囲内:A列の該当行 検索条件範囲:ブランク を確認し、「重複するレコードは無視する」をオンにしてOK。その後抽出された行を選択して別のシートにコピー---では駄目ですか?
- imogasi
- ベストアンサー率27% (4737/17069)
今日も同じような質問の2回目なんだが 例データ Sheet1の A2:B9(C列は関数式の結果) 第1行目のC1は空白か文字列であること。 100 東京 1 100 200 大阪 2 200 200 300 名古屋 3 400 仙台 4 400 C2に=IF(COUNTIF($A$2:A2,A2)=1,MAX($C$1:C1)+1,"") と入れて下方向に+ハンドルを引っ張る。 A100は最終行より多めに指定。 Sheet2に行って A2に=INDEX(Sheet1!$A$2:$B$100,MATCH(ROW()-1,Sheet1!$C$2:$C$100,0),COLUMN()) と入れて横に式を複写。 A2:B2を指定して+ハンドルを出し、下方向に式を複写。 結果 100 東京 200 大阪 300 名古屋 400 仙台 これは自称「imogasi方式」ですが、OKWAVEで「imogasi方式」で照会してもらえば私の回答や他の回答も沢山が出てくる。 下の行の#N/Aのエラー防止式もそこに載せてます。
- imogasi
- ベストアンサー率27% (4737/17069)
マクロを使わない方法ということなのだが、やってみたので上げておきます。 VBA向きの処理のように思ったので。 Sheet1 元シート。 下記のSet sh1 = Worksheets("sheet1")の()内を自分のシート 名で変えてください。 Sheet2 中間シート Sheet3 結果シート Sheet2、Sheet3という名のシートを用意してください。 Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") Set sh3 = Worksheets("sheet3") sh1.Cells.Copy Destination:=sh2.Cells d = sh2.Range("A65536").End(xlUp).Row 'MsgBox d fg = InputBox("データ最初行=") '----- m = sh2.Cells(1, "B") For i = fg To d If sh2.Cells(i, "B") = "" Then sh2.Cells(i, "B") = m End If m = sh2.Cells(i, "B") Next i '---- sh2.Cells.Range(sh2.Cells(fg, "A"), sh2.Cells(d, "J")).Sort key1:=sh2.Range("A1"), _ key2:=sh2.Range("B1") '--------- k = 1 m1 = sh2.Cells(fg, "A"): m2 = sh2.Cells(fg, "B") For i = fg To d If sh2.Cells(i, "A") = m1 And sh2.Cells(i, "B") = m2 Then Else For j = 1 To 10 'J列まで sh3.Cells(k, j) = sh2.Cells(i, j) Next j k = k + 1 End If m1 = sh2.Cells(i, "A"): m2 = sh2.Cells(i, "B") Next i End Sub
- zap35
- ベストアンサー率44% (1383/3079)
#07です。再びですみません C列にCOUNTIF関数を入れたら、オートフィルタのオプションで「数値が2以上の行」を表示させて、その行を削除する方がスマートでしたね。 #07は上記のように訂正します
- zap35
- ベストアンサー率44% (1383/3079)
「削除」とは表示されなければいいのか、行の削除なのか、セルのデータを削除することなのか明示されていませんが、おそらく行ですね。 C1セルに =COUNTIF(A$1:A1,A1) と入力して、そのセルを残りの400行にコピーして下さい。($ に意味がありますから間違えないように!) すると1行目からその行までに、A列の値が何回目に出現したかが分かります。 2回以上に出現した行を消したいなら、 C列のデータを全て選択して→コピー→形式を選択して貼り付け→値 で一旦C列に値として貼り付けて、C列でソートしてまとめて消せばよいでしょう。 なお実際のA列の値が質問のように昇順に並んでいないなら、D列に1,2,3…という連番を入力しておいて、先述のソート→行削除→D列で再ソート すればよいでしょう
- twoic
- ベストアンサー率0% (0/0)
すいません、補足というか訂正です。 ד空いてる列のデータ行一番上に(例えばC2)” ○“空いてる列のデータ行一番上から一番下まで(例えばC2~C400)”
- twoic
- ベストアンサー率0% (0/0)
あー、書いてる間に補足がありましたね。 関数は使用していいんですか? でしたら、空いてる列のデータ行一番上に(例えばC2)に =IF(ISBLANK(B2),IF(A1=A2,"※",""),"") こういった、判定用の関数を入れて、※マークの付いた行を オートフィルタで表示させて削除するのが簡単かと思います。 なお、上の例では1行目に項目名が入っているものとして考えています。(A列なら番号、B列なら場所といったもの)
- sakemoni1008
- ベストアンサー率31% (317/992)
A列の先頭行にはB列に文字が入っている事を前提に (他のB列は空白として) データ→並べ替えで最優先キーでBを選択し、二番目に優先キーをAにしてOK そうすると 100.東京 200.大阪 300.名古屋 400.仙台 100.空白 999.空白 に並びますので、空白の100~999までを削除すればOKですね
- twoic
- ベストアンサー率0% (0/0)
オートフィルタを利用して、B列で(空白セル)を選択することで、同数値の先頭行以外が表示されるようになります。 あとは、全体を指定して削除するなりすれば良いかと。 ただし、質問内にある表を拝見しただけですので確実ではありません。 ファイルのコピーをとってから作業された方が良いかと思います。
- Ryokucha
- ベストアンサー率25% (115/450)
簡単なのは、No1の方の方法です。 それで、並び替える前に列を追加して、項番(1,2,3・・・)を付けて置きます。 付けてから、A列をキーに並び替えて、削除を行ってから、項番で並び替えれば、元の状態に戻ります。 もう一つの方法 先頭を見つけて、A列の次の行から最後まで選択して、消したい番号を置換を利用して削除します。 (置換後の文字列に何も指定しない)
- 1
- 2
補足
ちょっと書き足りてなかったです・・・ ごめんなさい。 A | B | 3|200 |大阪 | 4|200 | | 5|201 | | 6|300 |名古屋| こんな感じで大阪=200ではなくて201や202のような数字もあるんです・・・B列に文字が入っていて、その下の空欄セルは次の文字が来るまで同じ文字を意味しているんです。その際、削除したいのは3行目の数字と同じ数字が入っている4行目だけで3行目と5行目は離せないんです・・・ ソートすると数字が違う空欄のB列(ここでいう5行目)がわからなくなってしまってできないかなと。