0

私は Excel の経験があまりありません - 私は ac# の方がずっと好きです - Excel の達人がここで私を助けてくれることを望んでいました!

基本的に、テキスト データの列が 1 つしかないスプレッドシートがあります (列 a)。このデータのリストを照会する必要があります。

基本的に、さらにテキスト データを別の列 (列 b としましょう) にコピーする必要があります。次に、列 a のどこかに既に存在する列 b のレコードを除外し、そこにある一意のレコードのみを残します。列 b で、列 a ではありません。

高度なフィルターを使用してみましたが、機能しないようです。これを行う方法に関するヒントやアドバイスは素晴らしいでしょう。

ありがとう

4

3 に答える 3

1

次のような数式を使用して、列 C にデータを動的にフィルター処理できます。

=IF(ISNA(VLOOKUP(B1,A:A,1,FALSE)),B1,"")

次に、列Cの空でないセルをフィルタリングします

それ以外の場合、この単純なマクロは重複をその場で消去します

Sub FilterDuplicates()
  Dim r As Range
  For Each r In ActiveSheet.Columns("B").Cells
    If r.Value <> "" Then
      On Error Resume Next
      WorksheetFunction.VLookup r, ActiveSheet.Columns("A"), 1, False
      If Err.Number = 0 Then r.ClearContents
      On Error GoTo 0
    End If
  Next r
End Sub
于 2012-06-03T15:19:48.733 に答える
0

これはあなたが必要とすることをするはずです。列 A の列 B の各値を検索し、一致が見つかった場合はセルを削除します。データを列 B に貼り付けた後、コードを実行します。列 B から重複を削除するのではなく、列 A にある列 B から値を削除するだけであることに注意してください。列 B から重複を削除するには、列を選択します。タブから選択Remove DuplicatesDataます。

ワークブックにモジュールを追加し、モジュールに次のコードを挿入する必要があります。

コード:

Option Explicit

Sub RemoveMatchesFromColumn()
    On Error Resume Next

    Dim LastRow As Long
    Dim SearchText As String
    Dim MatchFound As String

    LastRow = Range("b" & ActiveSheet.Rows.Count).End(xlUp).Row
    SearchText = Range("b" & LastRow).Value

    Do Until LastRow = 0

    MatchFound = Find_Range(SearchText, Columns("A")).Value
        If SearchText = MatchFound Then
            Range("b" & LastRow).Delete Shift:=xlUp
        End If
        LastRow = LastRow - 1
        SearchText = Range("b" & LastRow).Value
    Loop

End Sub


Function Find_Range(Find_Item As Variant, _
    Search_Range As Range, _
    Optional LookIn As Variant, _
    Optional LookAt As Variant, _
    Optional MatchCase As Boolean) As Range

     ' Function written by Aaron Blood
     ' http://www.ozgrid.com/forum/showthread.php?t=27240

    Dim c As Range
    Dim firstAddress As Variant
    If IsMissing(LookIn) Then LookIn = xlValues 'xlFormulas
    If IsMissing(LookAt) Then LookAt = xlPart 'xlWhole
    If IsMissing(MatchCase) Then MatchCase = False

    With Search_Range
        Set c = .Find( _
        What:=Find_Item, _
        LookIn:=LookIn, _
        LookAt:=LookAt, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=MatchCase, _
        SearchFormat:=False)
        If Not c Is Nothing Then
            Set Find_Range = c
            firstAddress = c.Address
            Do
                Set Find_Range = Union(Find_Range, c)
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With

End Function

サブを実行しますRemoveMatchesFromColumn。ステップインして、実行内容を確認しF8たり、 で実行したりできますF5

于 2012-06-03T14:53:20.853 に答える
0

非 VBA メソッド

この数式をセル C1 に入力します。

=IF(VLOOKUP(B1,A:A,1,0)=B1,"DELETE ME","")

最後までドラッグします。列 C のデータをフィルター処理してDELETE ME、重複データを削除します。

VBAメソッド

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Dim delRange As Range, aCell As Range

    Set ws = Sheets("Sheet1")
    With ws
        lRow = .Range("B" & Rows.Count).End(xlUp).Row
        For i = 1 To lRow
            Set aCell = .Columns(1).Find(What:=.Range("B" & i).Value, _
                        LookIn:=xlValues, LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                        MatchCase:=False, SearchFormat:=False)

            If Not aCell Is Nothing Then
                If delRange Is Nothing Then
                    Set delRange = .Range("B" & i)
                Else
                    Set delRange = Union(delRange, .Range("B" & i))
                End If
            End If
        Next i
        If Not delRange Is Nothing Then delRange.Delete shift:=xlUp
    End With
End Sub
于 2012-06-03T15:16:11.083 に答える