2010-06-04 7 views
3

J'ai besoin d'aide avec une fonction VBA Excel.Aide EXCEL VBA - Fonction pour insérer une cellule vide

Je contiennent des données qui ressemble à ce

ColA  ColB 
    a123  a123 
    a124  a124 
    a127  a126 
    a128  a127 
    ....  .... 

Je veux comparer le contenu de ColA et ColB, où le contenu est différent, je veux insérer une cellule vide dans la colonne A. Ainsi, le résultat sera comme:

ColA  ColB 
a123  a123 
a124  a124 
     a126 
a127  a127 
....  .... 

Toutes les suggestions sur la façon dont je pourrais le faire dans Excel.

Merci à l'avance


MIS À JOUR


J'ai essayé la méthode ci-dessous avec le code suivant pour insérer la cellule et il fonctionne très bien, je me rends compte maintenant quand je le lance que je besoin de plus de fonctionnalités cependant.

first_col.Cells(row, 1).Select 
Selection.Insert Shift:=xlDown 

si la valeur ColA avec le « a » enlevé est inférieure à la valeur ColB avec le « a » enlevé, je veux insérer la cellule dans ColA et je dois aussi insérer une cellule dans la même position dans ColC (contient d'autres données). Si ColB a une valeur plus grande, je veux insérer la cellule dans ColB seulement. Je pense que je sais ce qu'il faut faire à l'intérieur de l'instruction If, mais je ne suis pas sûr de savoir comment construire l'IF. Voici ce que je pense

Set other_col = Range("C1:C100") 

//if substring of ColA > substring of ColB 
    first_col.Cells(row, 1).Select 
    Selection.Insert Shift:=xlDown 
    other_col.Cells(row, 1).Select 
    Selection.Insert Shift:=xlDown 
//else 
    second_col.Cells(row, 1).Select 
    Selection.Insert Shift:=xlDown 

Répondre

3

Votre déclaration de comparaison pourrait ressembler à ceci:

Sub Expand() 

    Dim first_col As Range, cell As Range 
    Dim row As Integer 

    Set first_col = Range("A2:A100") 

    For Each cell In first_col 
     If Right(cell.Value, 3) < Right(cell.Offset(0, 1).Value, 3) Then 
      ' Shift in here 
     End If 
    Next cell 

End Sub 

La fonction « droit » regarde la nombre de caractères à droite comme spécifié par le second paramètre.

Une autre note est que les sections de code comme celui-ci qui utilisent la méthode de .select:

first_col.Cells(row, 1).Select 
Selection.Insert Shift:=xlDown 

Peut être tronqué comme ceci:

first_col.cells(row, 1).insert shift:=xlDown 

Le "select" et "sélection" sont les restes à partir de l'enregistreur de macro et ne sont généralement pas utilisés dans le code VBA.

1

Je ne sais pas le code VBA exact d'insérer une ligne, mais vous pouvez constater que par l'enregistrement d'une macro. Voici le reste du code (en boucle à travers les colonnes et faites la comparaison):

Sub Expand() 
    Dim first_col as Range 
    Dim second_col as Range 
    Dim row as Integer 

    Set first_col = Range("A2:A100") 
    Set second_col = Range("B2:B100") 

    For row = 1 To second_col.Rows.Count 
     If first_col.Cells(Row, 1).Value <> second_col.Cells(Row, 1).Value Then 
      '// code to insert the row' 
     End If 
    Next row 
End Sub 
+0

J'ai mis à jour le problème ci-dessus avec un peu plus de détails, merci pour la réponse, il fait certainement partie de ce dont j'ai besoin – Kaskade

0

i enregistrer une macro en sélectionnant certaines cellules et insérer et j'ai essayé en créant mon propre sous et Travaillons

Range("c16:e16").Select 
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 

éditer note cette cause de code unmerg à des cellules fusionnées

Questions connexes