2016-04-14 7 views
-3

私は列1に対して複数の重複を含む20Kのデータシートを持っています。Excelは最初の3行を保持し、残りの部分を削除します

enter image description here

私が強調し黄色を維持し、それの残りの部分を削除する必要があります。

+0

最初の3つの複製を残して残りの部分を削除する必要があるようです。 – JNevill

+0

はい、それを行う方法! –

+1

4行目と5行目を強調表示し、削除キーを押します。 – JNevill

答えて

1

だから、VBAルートに行くには、タブの各行をループして値をテストして重複があるかどうかを調べる必要があります。重複している場合はカウンタ変数を増やし、 variable hits 3行の削除を開始します。

これは、VBAを使用していない場合は少し複雑です。コードで遊んで理解してください。私はそれを助けるためにコメントを書いた。

Sub keepFirstThreeDuplicates() 
    Dim workingRow As Integer 
    Dim currentDup As String 
    Dim dupCounter As Integer 
    Dim wsheet As Worksheet 

    'change this to your tab name 
    Set wsheet = ThisWorkbook.Sheets("Sheet1") 

    'loop through every row just guessing that your data starts at row 1 (A1) and goes to 50000 (A50000) 
    For workingRow = 1 To 50000 

     If workingRow = 1 Then 'we are at the first row, so grab the value and set dupCounter to 1 
      currentDup = wsheet.Cells(workingRow, 1).Value 'Assuming column 1, so this is Cell A1 
      dupCounter = 1 
     ElseIf currentDup = wsheet.Cells(workingRow, 1).Value Then 'we have another duplicate 
      If dupCounter = 3 Then 'We already have three duplicates, so delete the row, and set the row back one (because we deleted the row) 
       wsheet.Rows(workingRow).Delete 
       workingRow = workingRow - 1 
      Else 
       dupCounter = dupCounter + 1 
      End If 
     Else 'We are at a new value, so grab the value and set dupCounter to 1 
      currentDup = wsheet.Cells(workingRow, 1).Value 
      dupCounter = 1 
     End If 

     'exit the for loop if we hit a blank 
     If currentDup = "" Then Exit For 
    Next workingRow 

End Sub 

あなたはVBAにスーパー初めて使用する場合は、このコードを使用します

  1. ワークブックで、Visual Basicの エディタ(VBE)

  2. を取得するには、Ctrl + F11を打っている間
  3. ブックは、VBAProjectパネルの「VBAProject」と呼ばれます。 右クリックしてInsert >> Moduleを選択してください。

  4. 新しいモジュール "Module1"をダブルクリックして開きます。

  5. このコードにペーストします。

  6. 実行するには、コード内のどこかをクリックし、再生ボタンを 上(またはキーボードのF5)まで押します。タブ名をタブに変更するなど、ワークブックのニーズに合わせて に合うようにコードを編集してください。 は行を削除するため、実行する前にワークブックをバックアップしてください。元に戻すことはできません。

最後に、これは単なる1つの方法です。これは、行数、データの列、データが既に重複列でソートされていること、その他のその他のものではないことを推測しているため、100%のニーズに対応することは意味しません。これは、VBAの確実な方向性を示すためのものです。新しく作成したワークブックのA欄に作成した偽のリストのためのテストワークブックで作業しました。

0

VBAを使用せずにデータを並べ替える代わりに、Sender IDの発生回数を数えただけで3番目のデータ列を作成できます。 D2の代わりに

Assuming: 
Sender is column B 
Message is column C 
Count will be new column C 
Row 1 is a header row 
Data starts in row 2 

次の式:

=COUNTIF($B$2:B2,B2) 

コピー列全体をダウン。

データ内またはヘッダー行で選択を選択します。

D1のヘッダーを右クリックし、フィルタを選択し、セルから値を選択します。(あなたのデータは消えるかもしれませんが、ただ隠れるかもしれません)

D1のファンネルアイコンを左クリックし、番号フィルタを選択してください。飛行機から、より小さいか等しいかを選択し、右上のボックスに3を置きます。

元の2列のデータを選択してコピーして新しいシートに貼り付けると、最初の3つのエントリのみが新しいリストに表示されます。

+0

を取得する必要があります。データをコピー&ペーストしたくない場合は、隠れた行を無視してデータの出現をカウントする方法がありますが、それは違いです。 –

関連する問題