J'essaie de formater des données exportées et de supprimer plusieurs colonnes. Je veux garder des colonnes avec certains rubriques. Pour une commodité si j'ai 15 colonnes et que je veux garder des colonnes avec les en-têtes suivantes; P>
état Ville Nom Client Produit p>
Mon inquiétude est que les données que j'exprime peuvent changer et que des colonnes pourraient être ajoutées à l'avenir. Je veux pouvoir filtrer des colonnes indésirables et conserver les colonnes susmentionnées. p>
Edit: J'utilise Excel et je n'ai jamais écrit une ligne de code avant de ma vie. Jamais. P>
3 Réponses :
Je suppose que nous parlons d'excellence ici. Si tel est ainsi itérant à travers vos colonnes avec une boucle tandis que la boucle et que vous décidez de garder ou de ne pas conserver devrait faire le tour.
Sub deleteIrrelevantColumns()
Dim keepColumn As Boolean
Dim currentColumn As Integer
Dim columnHeading As String
currentColumn = 1
While currentColumn <= ActiveSheet.UsedRange.Columns.Count
columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value
'CHECK WHETHER TO KEEP THE COLUMN
keepColumn = False
If columnHeading = "State" Then keepColumn = True
If columnHeading = "City" Then keepColumn = True
If columnHeading = "Name" Then keepColumn = True
If columnHeading = "Client" Then keepColumn = True
If columnHeading = "Product" Then keepColumn = True
If keepColumn Then
'IF YES THEN SKIP TO THE NEXT COLUMN,
currentColumn = currentColumn + 1
Else
'IF NO DELETE THE COLUMN
ActiveSheet.Columns(currentColumn).Delete
End If
'LASTLY AN ESCAPE IN CASE THE SHEET HAS NO COLUMNS LEFT
If (ActiveSheet.UsedRange.Address = "$A$1") And (ActiveSheet.Range("$A$1").Text = "") Then Exit Sub
Wend
End Sub
Merci. Je vais le tester demain. Je l'ai marqué "VBA". N'était-ce pas assez clair?
Cela ne fonctionne pas. Il supprime la première colonne qu'elle rencontre qui ne respecte pas les critères «Colonne de colonne», puis s'arrête. L'exécution à nouveau supprimera la prochaine rubrique de colonne qui ne répond pas aux critères. Lorsqu'il rencontre un titre de colonne spécifié, il s'arrête et ne fait rien. Quelqu'un d'autre a des suggestions?
Étrange, ça marche pour moi. Je dois admettre que la solution de David est un Néache beaucoup.
Essayez celui-ci.
Itéréter sur les colonnes dans l'ordre inverse, vérifiez les en-têtes dans un boîtier de sélection et supprimez au besoin. P>
Sub deleteIrrelevantColumns()
Dim currentColumn As Integer
Dim columnHeading As String
ActiveSheet.Columns("L").Delete
For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1
columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value
'CHECK WHETHER TO KEEP THE COLUMN
Select Case columnHeading
Case "State", "City", "Name", "Client", "Product"
'Do nothing
Case Else
'Delete if the cell doesn't contain "Homer"
If Instr(1, _
ActiveSheet.UsedRange.Cells(1, currentColumn).Value, _
"Homer",vbBinaryCompare) = 0 Then
ActiveSheet.Columns(currentColumn).Delete
End If
End Select
Next
End Sub
Merci! Jusqu'à présent, cela fonctionne vraiment bien. Existe-t-il un moyen d'intégrer quelque chose dans la section "Vérifier s'il faut garder la section" de la colonne "pouvant détecter si un mot particulier est dans la rubrique colonne? J'ai réalisé que j'ai une en-tête de colonne qui lit "type de produit / catégorie de produits", mais elle est séparée en deux lignes. Au début, j'ai essayé d'ajouter; Cellules.Sélectionnez avec la sélection .wraptext = Faux extrémité avec puis utilisez votre code. Mais il ne détecte pas la rubrique "Type de produit / Catégorie de produit" et continue de la supprimer.
Vous pouvez utiliser la fonction Instr code> pour vérifier la présence d'un mot / chaîne dans une chaîne.
Merci! J'apprécie l'aide.
Aucun problème. Voici un exemple de cette fonction utilisée: INSTR (1, "Marge et Homer Simpson", "Homer", VBBRYCOMPARE) CODE> Une valeur de 0 code> signifie que la recherche n'a pas été trouvée , toute valeur autre que 0 signifie que la recherche a été trouvée.
Comment puis-je incorporer cela dans votre code de coas de sélection? Donc, disons Homer / Simpson était l'en-tête de colonne et je voulais garder cette colonne?
@ Subvention Désolé je ne sais pas. Il est probablement pas nécessaire de rester inutile de tout ce que je faisais pour déboguer cela à l'époque, mais c'était il y a près de six ans lol.
J'ai eu un problème similaire et c'est le code qui a fonctionné pour moi. Je pense que c'est beaucoup plus simple.
Range("A1").Select
Do Until ActiveCell.Value = ""
If ActiveCell.Value = "Forecast Status" _
Or ActiveCell.Value = "Amount " _
Or ActiveCell.Value = "Service Booking Value " _
Or ActiveCell.Value = "Transaction Number" _
Or ActiveCell.Value = "Last Modified by" _
Or ActiveCell.Value = "Last Modified Date" _
Or ActiveCell.Value = "T# Comparison" _
Or ActiveCell.Value = "Amount Comparison" _
Or ActiveCell.Value = "Forecast Status Comparison" _
Or ActiveCell.Value = "First Ship Date Comparison" Then
ActiveCell.Offset(0, 1).Select
Else
ActiveCell.EntireColumn.Select
Selection.Delete Shift:=xlToLeft
Selection.End(xlUp).Select
End If
Loop
Ouais, ça va être une "erreur" sur la déclaration "beaucoup plus simple".
Exceller? Accès? Quel programme utilisez-vous?