2010-12-08 17 views
2

J'ai enregistré une macro simple que j'ai besoin de faire quelque chose de générique, donc il peut être utilisé pour n'importe quelle ligne et quatre dernières cellules. Voici ma version recroded:Excel Macro: faire un enregistré moins de cellules spécifiées?

Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToRight).Select 
Selection.End(xlToLeft).Select 
Range("Q12:T12").Select 
Range("T12").Activate 
Selection.Copy 

End Sub

Comment puis-je

  • la faire à la dernière cellule de la ligne je place le curseur sur?
  • changer les plages spécifiques de la cellule dans une gamme qui signifie simplement: sélectionnez cette cellule et 3 plus à gauche?

... le selection.copy je pense que je peux gérer presque :)

Un grand merci Mike

+1

PRO TIP: Si vous utilisez Excel pour Windows, vous pouvez enregistrer vos macros en mode PARENT au lieu du mode ABSOLUTE et obtenir un enregistrement dans lequel toutes les références cellulaires sont pertinentes à la sélection à partir au lieu d'absolu. –

+0

Bon conseil, je m'assure que je l'utilise la prochaine fois. Merci – RocketGoal

Répondre

5

Cela copiera les quatre dernières cellules dans une ligne que vous cliquez sur:

Sub CopyLastFourCellsOfRow() 
Dim lastCell As Range 
Dim rngToCopy As Range 

Set lastCell = Selection.End(xlToRight) 
Set rngToCopy = Range(lastCell, lastCell.Offset(0, -3)) 

rngToCopy.Copy 

End Sub 

Mise à jour - Si votre ligne a brisé des données, la meilleure approche est de commencer dans la dernière colonne de la feuille de calcul (colonne IV), puis de revenir en arrière. Pour ce faire remplacer la déclaration lastCell ce qui suit:

Set lastCell = Cells(Selection.Row, 256).End(xlToLeft) 
+0

Beaucoup apprécié. – RocketGoal

+0

Léger problème. Certaines lignes ont des données brisées, alors y a-t-il un moyen de les faire aller jusqu'à la fin de l'emprise et de revenir ensuite? – RocketGoal

+0

@Mike - voir le code mis à jour pour accueillir les données brisées –

4

Vous pouvez réellement faire les différentes étapes que vous demandez à peu près tout dans un mouvement rapide. Pour le faire passer à la dernière cellule de la ligne en cours, il suffit d'utiliser ActiveCell.End (xlToRight). (Utilisation ActiveCell »parce qu'il est équivalent à « Sélection » quand une seule cellule est sélectionnée, mais fonctionne même si plusieurs cellules sont sélectionnées.)

Range(ActiveCell, ActiveCell.Offset(0, -3)).Select 

sélectionnera la cellule en cours et 3 plus à gauche. Notez que vous n'avez pas besoin de faire "Selection.Copy" dans une étape séparée. Vous pouvez simplement aller:

Range(ActiveCell, ActiveCell.Offset(0, -3)).Copy 
+0

Exactement le type de réponse que j'espérais - une réponse avec éducation inclus. Merci beaucoup. – RocketGoal