0

小さなデータ クリーニング タスクを実行しようとしており、通常の Python の代わりに Excel VBA を使用したいと考えています。

各行の列にまたがるアイテムのリストがあります。残念ながら、これらのリストには重複した項目があり、削除する必要があります。各リストには最大 15 個のアイテムしかないと想定できます。

疑似コードでの私の試み

Foreach row in selection:
Check Column n and n+1. (so thats column A and B for the first iteration)
If different, n++
If the same, remove the cell N+1 and shift all values to the right right of N+1 left 1 cell.
Check (n, n+1) again after.

いくつかの例の行を添付しました。どんな助けでも大歓迎です - 残念なことに、VBA は私がこれまでに取り組んできた他のどの言語よりも難しいと感じています。

以下の 3 つの行はすべて同じものになります。

1 アップル バナナ チョコレート ドッグ
2 アップル バナナ チョコレート チョコレート チョコレート ドッグ
3 アップル バナナ チョコレート チョコレート チョコレート チョコレート チョコレート 犬 犬 犬 犬

これらの 3 つの例はすべて、

アップル バナナ チョコレート ドッグ

4

1 に答える 1

2

確かにそれはできます、

コマンドボタンを Excel シートのどこかに配置し、次のコードを VBA エディタに挿入します。

Private Sub CommandButton1_Click()
    RecurseRows 'Start recursion
End Sub

Private Sub RecurseRows(Optional row As Long = 1)
    RecurseColumns row, 1, 2

    If (row = ActiveSheet.Range("A65536").End(xlUp).row) Then
        Exit Sub 'End recursion when next row is empty
    Else
        RecurseRows row + 1 'next row
    End If
End Sub

Private Sub RecurseColumns(row As Long, col1 As Long, col2 As Long)
    If (IsEmpty(ActiveSheet.Cells(row, col2))) Then
        Exit Sub 'End recursion
    Else
        If (ActiveSheet.Cells(row, col1) = ActiveSheet.Cells(row, col2)) Then
            ActiveSheet.Cells(row, col2).Delete xlShiftToLeft 'Remove duplicate
            RecurseColumns row, col1, col2 'Check same couple again, since col2 has changed
        Else
            RecurseColumns row, col2, col2 + 1 'Shift one cell to the right
        End If
    End If
End Sub

もちろん、繰り返し行うこともできます...XD

于 2013-07-16T09:21:46.580 に答える