web-dev-qa-db-fra.com

Comment supprimer des colonnes spécifiques dans vba pour Excel

J'essaie de supprimer plusieurs colonnes dans vba pour Excel. Je télécharge des données du centre d’analyses statistiques de l’Illinois sur l’arrestation de drogue. http://www.icjia.org/public/sac/index.cfm?metasection=forms&metapage=rawMetadata&k=170

Chacune des colonnes que je veux supprimer est composée de 3 colonnes les unes des autres.

Par exemple:

Adams County Illinois Comté de Champaign Illinois Estimation | pourcent | Pourcentage de marge d'erreur | Estimer la marge | Estimation | Pourcentage | Marge d'erreur

D | E | F | G | H | I | J

Je veux juste supprimer toutes les colonnes, dites le pourcentage de marge d'erreur 

Voici mon micro:

Sub deleteCol()
Columns("H,J").Delete

 End Sub

Je continue à avoir un Run-time '13: erreur d'incompatibilité de type

Aucune suggestion?

7
Zaynaib Giwa

Vous dites vouloir supprimer toute colonne portant le titre "Marge d'erreur en pourcentage". Nous allons donc essayer de rendre cette dynamique dynamique au lieu de nommer directement les colonnes.

Sub deleteCol()

On Error Resume Next

Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Dim nLastCol, i As Integer

Set wbCurrent = ActiveWorkbook
Set wsCurrent = wbCurrent.ActiveSheet
'This next variable will get the column number of the very last column that has data in it, so we can use it in a loop later
nLastCol = wsCurrent.Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'This loop will go through each column header and delete the column if the header contains "Percent Margin of Error"
For i = nLastCol To 1 Step -1
    If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare) > 0 Then
        wsCurrent.Columns(i).Delete Shift:=xlShiftToLeft
    End If
Next i

End Sub

Avec cela, vous n'aurez plus à vous soucier de l'endroit où vos données sont collées/importées, tant que les en-têtes de colonne sont dans la première ligne.

EDIT: Et si vos en-têtes ne sont pas dans la première rangée, ce serait un changement très simple. Dans cette partie du code: If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare), remplacez le "1" dans Cells(1, i) par la rangée dans laquelle se trouvent vos en-têtes.

EDIT 2: modification de la section For du code afin de prendre en compte les colonnes complètement vides.

4
BobbitWormJoe

Il vous manquait simplement la deuxième moitié de l'instruction de colonne lui demandant de supprimer toute la colonne, car la plupart des plages normales commencent par une lettre de colonne, elle cherchait un nombre et n'en a pas obtenu. Le ":" obtient la colonne entière, ou la ligne.

Je pense que ce que vous cherchiez dans votre gamme était la suivante:

Range("C:C,F:F,I:I,L:L,O:O,R:R").Delete

Il suffit de changer les lettres des colonnes pour répondre à vos besoins.

13
peege

Pour répondre à la questionComment supprimer des colonnes spécifiques dans vba pour Excel .J'utilise Array comme ci-dessous.

sub del_col()

dim myarray as variant
dim i as integer

myarray = Array(10, 9, 8)'Descending to Ascending
For i = LBound(myarray) To UBound(myarray)
    ActiveSheet.Columns(myarray(i)).EntireColumn.Delete
Next i

end sub
0
Arun