2010-06-01 8 views
8

Je dois trouver la première cellule et la dernière cellule d'une cellule fusionnée verticalement ..Obtenez commencer gamme et la gamme fin d'une cellule fusionnée verticalement avec Excel à l'aide VBA

Disons que je fusionner des cellules B2 jusqu'à B50 .
Comment puis-je obtenir dans VBA la cellule de démarrage (= B2) et la cellule de fin (= B50)?

+0

Que voulez-vous faire une fois que vous avez trouvé ces valeurs? Comment voulez-vous la sortie de la réponse? Comme une chaîne? En tant qu'objet de gamme? – KevenDenen

Répondre

0

Eh bien, en supposant que vous connaissez l'adresse de l'une des cellules de la plage fusionnée, vous pouvez simplement sélectionner le décalage par rapport à cette plage et obtenir la ligne/colonne:

Sub GetMergedRows() 
    Range("A7").Select 'this assumes you know at least one cell in a merged range. 
    ActiveCell.Offset(-1, 0).Select 
    iStartRow = ActiveCell.Row + 1 
    Range("A7").Select 
    ActiveCell.Offset(1, 0).Select 
    iEndRow = ActiveCell.Row - 1 
    MsgBox iStartRow & ":" & iEndRow 
End Sub 

Le code ci-dessus jeter des erreurs si la ligne de décalage ne peut pas être sélectionnée (si les lignes fusionnées sont A1 par quoi que ce soit), vous voudrez ajouter une gestion des erreurs qui indique au code si elle ne peut pas compenser, les lignes supérieures doivent être 1 et ne peuvent pas descendre, la rangée du bas doit être 65,536. Ce code est également unidimensionnel, vous pouvez donc également ajouter l'axe des x.

0

Si vous souhaitez que les références de cellule soient des chaînes, vous pouvez utiliser quelque chose comme ceci, où Location, StartCell et EndCell sont des variables de chaîne. Si vous souhaitez les définir en tant que plages, vous pouvez ajouter ceci, où StartRange et EndRange sont des objets Range.

set StartRange = Range(StartCell) 
set EndRange = Range (EndCell) 
14
Sub MergedAreaStartAndEnd() 

    Dim rng As Range 
    Dim rngStart As Range 
    Dim rngEnd As Range 

    Set rng = Range("B2") 

    If rng.MergeCells Then 

     Set rng = rng.MergeArea 
     Set rngStart = rng.Cells(1, 1) 
     Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count) 

     MsgBox "First Cell " & rngStart.Address & vbNewLine & "Last Cell " & rngEnd.Address 

    Else 

     MsgBox "Not merged area" 

    End If 

End Sub 
+2

Vous pouvez également faire 'rng.MergeArea.Address' – Makah

5

Ci-dessous macro passe par toutes les feuilles dans un classeur et trouve des cellules fusionnées, et de mettre les annuler la fusion valeur initiale à toutes les cellules fusionnées.

Ceci est souvent nécessaire pour les applications DB, donc je voulais partager avec vous.

Sub BirlesenHucreleriAyirDegerleriGeriYaz() 
    Dim Hucre As Range 
    Dim Aralik 
    Dim icerik 
    Dim mySheet As Worksheet 

    For Each mySheet In Worksheets 

    mySheet.Activate 
    MsgBox mySheet.Name & “ yapılacak…” 

    For Each Hucre In mySheet.UsedRange 
     If Hucre.MergeCells Then 
      Hucre.Orientation = xlHorizontal 
      Aralik = Hucre.MergeArea.Address 
      icerik = Hucre 
      Hucre.MergeCells = False 
      Range(Aralik) = icerik 
     End If 
    Next 

MsgBox mySheet.Name & " Bitti!!" 

Next mySheet 
End Sub