Cómo eliminar columnas por lotes en varios libros de Excel

Comparte ahora:

Es muy común ver personas guardando datos confidenciales en libros de Excel. Cuando estos libros de trabajo deben compartirse con otros colegas o amigos, la eliminación manual es la única opción disponible. Sin embargo, con este artículo, aprenderá a eliminar rápidamente columnas confidenciales o columnas no deseadas de varios libros de trabajo.

Descargar Ahora

Si quieres starPara utilizar el software lo antes posible, puede:

Descargue el software ahora

De lo contrario, si desea hacer bricolaje, puede leer el contenido a continuación.

Preparemos la GUI

Como se muestra en la imagen, cambie el nombre de la Hoja 1 como “Panel de control”. Usando formas, agregaríamos botones en esta hoja para que aparezca como GUI (interfaz gráfica de usuario) para esta herramienta. Necesitamos tres campos en esta GUI. Field1 es mostrar el libro de trabajo seleccionado por el usuario. El campo 2 es mostrar columnas del libro de trabajo seleccionado como menú desplegable. El campo 3 es una lista de columnas que deben eliminarse del libro de trabajo.Preparar la GUI

¿Cómo funciona?

Código VBAEl procedimiento p_fpick permitiría al usuario navegar y seleccionar archivos de Excel. Tan pronto como se seleccione un archivo de Excel, la secuencia de comandos leerá los nombres de las columnas de la Hoja1 y estos nombres se mostrarán como un menú desplegable. El procedimiento "Agregar_columna" permitirá al usuario agregar el nombre de la columna seleccionada del menú desplegable para agregarlo a la lista de columnas que deben eliminarse. El procedimiento final "Delete_Columns" abriría el libro de trabajo que se enumeraba en el campo "Seleccionar el libro de trabajo" y eliminaría todas las columnas seleccionadas. Después de la eliminación, el libro de trabajo se guardará y cerrará.

Sub P_fpick()
    Dim v_fd As Office.FileDialog
    Set v_fd = Application.FileDialog(msoFileDialogFilePicker)
    With v_fd
        .AllowMultiSelect = False
        .Title = "Please select the Excel workbook"
        .Filters.Clear
        .Filters.Add "Excel", "*.xls*"
        If .Show = True Then
            cp.Range("B4").Value = .SelectedItems(1)
        End If
    End With
    
    Dim wb As Workbook
    Dim ab As Workbook
    
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(cp.Range("B4").Value)
    
    Dim v_sheets As String
    v_sheets = ""
    
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    For c = 1 To lc
        If v_sheets = "" Then
            v_sheets = wb.Sheets(1).Cells(1, c).Value
        Else
            v_sheets = v_sheets & "," & wb.Sheets(1).Cells(1, c).Value
        End If
    Next
    
    wb.Close False
    ab.Activate
    
    With ab.Sheets(1).Range("N4:O5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=v_sheets
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With    
    
End Sub

Sub Add_Column()
    If Range("Q4").Value = "" Then
        Range("Q4").Value = Range("N4").Value
    Else
        Range("Q4").Value = Range("Q4").Value & "," & Range("N4").Value
    End If
End Sub

Sub Delete_Columns()
    Dim v_sheets() As String
    Dim ab As Workbook
    Dim wb As Workbook
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(Sheets(1).Range("B4").Text)
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    
    v_sheets = Split(ab.Sheets(1).Range("Q4").Text, ",")
    Dim intcount As Long
    For intcount = LBound(v_sheets) To UBound(v_sheets)
        For c = 1 To lc
            If wb.Sheets(1).Cells(1, c).Value = v_sheets(intcount) Then
                wb.Sheets(1).Columns(c).Delete Shift:=xlToLeft
            End If
        Next c
    Next intcount
    wb.Close True
    ab.Activate
End Sub

Retocarlo

A partir de ahora, este script maneja solo un libro de trabajo. Pero utilizando el último método de fila utilizado, puede hacer que la macro maneje varios libros de trabajo en modo por lotes. Sin embargo, el script no puede abrir un Excel corrupto libro de trabajo.

Introducción del autor:

Nick Vipond es un experto en recuperación de datos en DataNumen, Inc., que es el líder mundial en tecnologías de recuperación de datos, incluyendo recuperación de palabras y productos de software de recuperación de Outlook. Para más información visite www.datanumen.com.

Comparte ahora:

Los comentarios están cerrados.