Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10463 / 13644 ツリー ←次へ | 前へ→

【21692】重複するデータの削除について もくたん 05/1/27(木) 0:37 質問[未読]
【21693】Re:重複するデータの削除について IROC 05/1/27(木) 8:57 回答[未読]
【21712】Re:重複するデータの削除について YN61 05/1/27(木) 20:49 回答[未読]
【21713】Re:重複するデータの削除について Hirofumi 05/1/27(木) 21:21 回答[未読]
【21715】Re:重複するデータの削除について もくたん 05/1/27(木) 23:06 お礼[未読]

【21692】重複するデータの削除について
質問  もくたん  - 05/1/27(木) 0:37 -

引用なし
パスワード
   はじめまして、こんにちは。
次の作業について、困っております。お知恵を拝借したいと考えております。

   A  B  C  D・・・
1  住所 氏名 年齢
2 東京都 あ  22
3 埼玉県 え  40
4 千葉県 う  17
5 東京都 あ  22
6 東京都 か  34
・  ・  ・  ・
・  ・  ・  ・
・  ・  ・  ・
(シート1)

上記のようにAからCの列に各項目が入っています。
2列目と5列目に同じ人のデータが入っています。(下の列にも違ったデータですが、同じ人のものがあります。)
重複したデータの人を両方とも削除したものを別のシート(シート2)へ転記したいのです。つまり、シート2には、2列目と5列目両方ともない状態です。
なお、重複しているデータは3つ以上はありません。
一般化したものは作成することができるでしょうか。
よろしくお願いいたします。

【21693】Re:重複するデータの削除について
回答  IROC  - 05/1/27(木) 8:57 -

引用なし
パスワード
   フィルタオプションは試しましたか?

【21712】Re:重複するデータの削除について
回答  YN61  - 05/1/27(木) 20:49 -

引用なし
パスワード
   ▼もくたん さん:
>はじめまして、こんにちは。
>次の作業について、困っております。お知恵を拝借したいと考えております。
>
>   A  B  C  D・・・
>1  住所 氏名 年齢
>2 東京都 あ  22
>3 埼玉県 え  40
>4 千葉県 う  17
>5 東京都 あ  22
>6 東京都 か  34
>・  ・  ・  ・
>・  ・  ・  ・
>・  ・  ・  ・
>(シート1)

sub 重複検出()

Dim Ks As String  'Ks・・・検索語
Dim Ts As Long   'Ts・・・対象数
Dim Kn As Integer  'Kn・・・確認

Range("A2"),Activate

Do Until ActiveCell.Value=""

Ks=ActiveCell.Value
Ts=WorksheetFunction.CountIf(Range("A:A"),Ks)

If Ts>=2 Then
 ActiveCell.AutoFilter Field:=1,Criteria1:=ks
 Kn=MsgBox("次を検索しますか?",vbYesNo)
 If Kn=vbNo Then Exit Sub
End If

ActiveCell.Offset(1,0).Activate

Loop

MsgBox"終了しました。"

Range("A1").Select

End Sub

【21713】Re:重複するデータの削除について
回答  Hirofumi  - 05/1/27(木) 21:21 -

引用なし
パスワード
   こんなのでどお?

Option Explicit

Public Sub Sample()

  Dim i As Long
  Dim rngResult As Range
  Dim vntdata As Variant
  Dim dicIndex As Object
  Dim lngRows As Long
  
  Application.ScreenUpdating = False
  
  'Sheet2の出力位置を指定
  Set rngResult = Worksheets("Sheet2").Cells(1, "A")
    
  'Listの有るシートのList左上隅を指定(住所のセル)
  With Worksheets("Sheet1").Cells(1, "A")
    'データ行数を取得
    lngRows = .Offset(65536 - .Row, 1).End(xlUp).Row - .Row + 1
    'データが無い時は終了
    If lngRows <= 1 Then
      GoTo Wayout
    End If
    '氏名の列を配列に取得
    vntdata = .Offset(, 1).Resize(lngRows).Value
    'Sheet2にSheet1のListをコピー
    .CurrentRegion.Copy _
        Destination:=rngResult.Offset(, 1)
  End With
    
  'Dictionaryオブジェクトを取得
  Set dicIndex = CreateObject("Scripting.Dictionary")
  
  With dicIndex
    '氏名列全てを繰り返す
    For i = 2 To UBound(vntdata, 1)
      'もし、Indexに登録が有るなら
      If .Exists(vntdata(i, 1)) Then
        '最初に登録した氏名をEmptyに
        vntdata(.Item(vntdata(i, 1)), 1) = Empty
        '重複した氏名をEmptyに
        vntdata(i, 1) = Empty
      Else
        'Indexに氏名をKeyに並び順を登録
        .Add vntdata(i, 1), i
        '配列に並び順を代入
        vntdata(i, 1) = i
      End If
    Next i
  End With
  
  'Dictionaryを破棄
  Set dicIndex = Nothing
  
  '配列の先頭に列見出しを代入
  vntdata(1, 1) = "Number"
  '配列のEmpty数を取得
  lngRows = 0
  For i = 2 To UBound(vntdata, 1)
    If vntdata(i, 1) = Empty Then
      lngRows = lngRows + 1
    End If
  Next i
  
  With rngResult
    '結果をSheet2のA列に出力
    .Resize(UBound(vntdata, 1)).Value = vntdata
    'A列をKeyとしてソート
    .CurrentRegion.Sort Key1:=.Item(1), Order1:=xlAscending, _
              Header:=xlYes, OrderCustom:=1, _
              MatchCase:=False, Orientation:=xlTopToBottom, _
              SortMethod:=xlStroke
    'A列がEmptyの行を削除
    .End(xlDown).Offset(1).Resize(lngRows).EntireRow.Delete
    'A列を削除
    .EntireColumn.Delete
  End With
    
Wayout:
  
  Application.ScreenUpdating = True

  Set rngResult = Nothing
  
  Beep
  MsgBox "処理が完了しました"
    
End Sub

【21715】Re:重複するデータの削除について
お礼  もくたん  - 05/1/27(木) 23:06 -

引用なし
パスワード
   IROCさん、フィルタオプションについて初めて知ることができました。
こんな機能があったなんて知りませんでした。ありがとうございます。

また、YN61さん、Hirofumiさんありがとうございました。
思ったような処理ができました。感謝いたします。
また、私の説明が悪かったため、YN61さんには少し違ったものでしたが、
ほかの作業をするために使えるものでした。ありがとうございます。

また、何かの機会で質問させていただくことがありましたら、よろしくお願いいたします。

10463 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free