Dror ha un foglio di lavoro che contiene un bel po ‘di dati. È possibile che i dati in una colonna siano esattamente gli stessi dei dati in un’altra colonna, quindi si chiede se esiste un modo semplice per eliminare eventuali colonne duplicate all’interno del foglio di lavoro.

Il primo passo, ovviamente, è capire se due colonne sono identiche o meno. Questo può essere determinato abbastanza facilmente con una formula di matrice come la seguente:

=AND(A1:A100=B1:B100)

(Ricorda che una formula di matrice viene inserita utilizzando Maiusc + Ctrl + Invio.)

La formula confronta tutti i valori nelle prime 100 righe delle colonne A e B. Se sono tutti uguali, la formula restituisce VERO. Se una delle celle non corrisponde, la formula restituisce FALSO. Se il risultato è VERO, puoi eliminare una delle colonne perché sono uguali.

Se vuoi qualcosa che sia un po ‘più automatico, il che significa che la colonna duplicata viene eliminata, dovrai usare una macro. I passaggi seguenti attraverso tutte le colonne del foglio di lavoro e, a partire dalla colonna più a destra, confrontano tutte le colonne. Se sono uguali, indipendentemente dal loro ordine nel foglio di lavoro, la macro chiede se si desidera eliminare la colonna duplicata.

Sub DeleteDuplicateColumns()

Dim rngData As Range     Dim arr1, arr2     Dim i As Integer, j As Integer, n As Integer

On Error Resume Next     Set rngData = ActiveSheet.UsedRange     If rngData Is Nothing Then Exit Sub

n = rngData.Columns.Count

For i = n To 2 Step -1         For j = i - 1 To 1 Step -1             If WorksheetFunction.CountA(rngData.Columns(i)) <> 0 And _               WorksheetFunction.CountA(rngData.Columns(j)) <> 0 Then                 arr1 = rngData.Columns(i)

arr2 = rngData.Columns(j)

If AreEqualArr(arr1, arr2) Then                     With rngData.Columns(j)

'mark column to be deleted                         .Copy                         If MsgBox("Delete marked column?", vbYesNo) _                           = vbYes Then                             rngData.Columns(j).Delete                         Else                             'remove mark                             Application.CutCopyMode = False                         End If                     End With                 End If             End If         Next j     Next i

End Sub
Function AreEqualArr(arr1, arr2) As Boolean     Dim i As Long, n As Long     AreEqualArr = False     For n = LBound(arr1) To UBound(arr1)

If arr1(n, 1) <> arr2(n, 1) Then             Exit Function         End If     Next n     AreEqualArr = True End Function

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (5674) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: