Excel VBA-trouver la dernière colonne avec les données

j'ai trouvé cette méthode pour trouver les dernières données contenant la rangée dans une feuille:

ws.Range("A65536").End(xlUp).row

Existe-t-il une méthode similaire pour trouver la dernière colonne contenant des données dans une feuille?

Merci.

34
demandé sur Community 2012-08-13 04:33:45

5 réponses

Beaucoup de façons de le faire. Le plus fiable est de trouver.

Dim rLastCell As Range

Set rLastCell = ws.Cells.Find(What:="*", After:=ws.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)

MsgBox ("The last used column is: " & rLastCell.Column)

Si vous voulez trouver la dernière colonne utilisée dans une ligne particulière, vous pouvez utiliser:

Dim lColumn As Long

lColumn = ws.Cells(1, Columns.Count).End(xlToLeft).Column

utilisant la plage utilisée (moins fiable):

Dim lColumn As Long

lColumn = ws.UsedRange.Columns.Count

utilisant la plage utilisée ne fonctionnera pas si vous n'avez pas de données dans la colonne A. voir ici pour un autre problème avec la plage utilisée:

Voir Ici concernant la réinitialisation utilisé gamme.

71
répondu Reafidy 2017-05-23 12:18:15

je sais que c'est vieux, mais j'ai testé cela de bien des façons et ça ne m'a pas encore déçu, à moins que quelqu'un puisse me dire le contraire.

numéro de la ligne

Row = ws.Cells.Find(What:="*", After:=[A1] , SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

Colonne Lettre

ColumnLetter = Split(ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(1, 0), "$")(0)

Numéro De Colonne

ColumnNumber = ws.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
11
répondu xn1 2016-04-19 11:52:00

essayez d'utiliser le code après avoir activé la feuille:

Dim J as integer
J = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

si vous utilisez Cells.SpecialCells(xlCellTypeLastCell).Row seulement, le problème sera que les informations xlCellTypeLastCell ne seront pas mises à jour à moins que l'on ne fasse une action" Enregistrer fichier". Mais utiliser UsedRange mettra toujours à jour les informations en temps réel.

2
répondu Peter 2013-05-22 07:16:04

je pense que nous pouvons modifier le code UsedRange de @Readify's réponse ci-dessus pour obtenir la dernière colonne utilisée même si les colonnes de départ sont vides ou non.

donc ce lColumn = ws.UsedRange.Columns.Count modifié en

ce lColumn = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1 donnera des résultats fiables toujours

enter image description here

?Sheet1.UsedRange.Column + Sheet1.UsedRange.Columns.Count - 1

au-dessus de la ligne donne 9 dans le fenêtre exécution.

1
répondu newguy 2017-05-23 11:54:43

Voici quelque chose qui pourrait être utile. En sélectionnant la colonne entière basée sur une ligne contenant des données, dans ce cas j'utilise la cinquième ligne:

Dim lColumn As Long

lColumn = ActiveSheet.Cells(5, Columns.Count).End(xlToLeft).Column
MsgBox ("The last used column is: " & lColumn)
0
répondu dapaz 2018-06-29 07:48:40