2017-10-19 33 views
1

J'essaie d'insérer une flèche selon qu'un numéro de cellule est plus grand qu'un autre. Les données que j'ai sont les suivantes.Insertion de la flèche en fonction de l'instruction If dans VBA

 C   E 

6 20800  20400 
7 5038  6003 
8 46325  46325 

L'instruction if que j'ai actuellement est la suivante que je souhaite ajouter à cela.

For lngI = 1 To 3 
If Worksheets("Front End").Cells(lngI + 5, 3).Value > Worksheets("Front End").Cells(lngI + 5, 5).Value Then 
    Worksheets("Front End").Cells(lngI + 5, 3).Interior.ColorIndex = 40 
ElseIf Worksheets("Front End").Cells(lngI + 5, 3).Value < Worksheets("Front End").Cells(lngI + 5, 5).Value Then 
    Worksheets("Front End").Cells(lngI + 5, 3).Interior.ColorIndex = 35 
ElseIf Worksheets("Front End").Cells(lngI + 5, 3) = Worksheets("Front End").Cells(lngI + 5, 5) Then 
    Worksheets("Front End").Cells(lngI + 5, 3).Interior.ColorIndex = 2 
End If 
Next lngI 

donc actuellement tout ce que je fais met en avant selon que les valeurs de cellules dans la colonne C sont plus grandes, inférieure ou égale à valeurs correspondantes de cellules dans la colonne E. Par conséquent, je voudrais insérer une flèche verte pointant vers le haut suivant au nombre dans la cellule (C, 6), une flèche vers le bas rouge à côté du nombre dans la cellule (C, 7) et une flèche latérale jaune à côté du nombre dans la cellule (C, 8).

Merci d'avance pour toute aide.

+0

Qu'est-ce qu'une flèche vers le haut? Tu veux dire quelque chose comme '->' et '<-'? Ou juste un signe plus grand/plus petit: '>' ou '<'? –

+0

Est-ce que "* à côté de *" peut être dans une colonne auxiliaire? – FunThomas

Répondre

2

Vous pouvez le faire sans aucun VBA si vous êtes d'accord avec la flèche apparaissant dans une cellule adjacente plutôt que dans la cellule elle-même.

La formule =IF(C1>D1,"é",IF(C1<D1,"ê","è")) vous donnera les flèches correctes avec la police définie sur Wingdings.
Vous pouvez ensuite utiliser la mise en forme conditionnelle pour définir la couleur.

Modifier après la réponse acceptée:
Cela ajoutera la flèche à la fin du numéro dans la cellule.
Le contenu de la cellule sera traité comme du texte après la mise à jour - l'exécution de toute fonction mathématique (telle que SUM) sur les cellules renverra une erreur #VALUE.

Sub Test() 

    Dim lngI As Long 
    Dim CharToAdd As String 
    Dim ColourToUse As Long 

    For lngI = 1 To 3 

     With Worksheets("Front End") 
      If .Cells(lngI, 3) > .Cells(lngI, 4) Then 
       CharToAdd = " é"  'Up arrow. 
       ColourToUse = -11489280 'Green. 
      ElseIf .Cells(lngI, 3) < .Cells(lngI, 4) Then 
       CharToAdd = " ê"  'Down arrow. 
       ColourToUse = -16776961 'Red. 
      Else 
       CharToAdd = " è"  'Right arrow. 
       ColourToUse = -16711681 'Yellow. 
      End If 

      'Add the character to the end of the number. 
      'Note - cell is now a text string. 
      .Cells(lngI, 3) = .Cells(lngI, 3) & CharToAdd 

      'Format last character in cell. 
      With .Cells(lngI, 3).Characters(Start:=Len(.Cells(lngI, 3)), Length:=1).Font 
       .Name = "Wingdings" 
       .Color = ColourToUse 
      End With 
     End With 

    Next lngI 

End Sub 

Si vous voulez que les flèches apparaissent au début de la cellule:

Sub Test() 

    Dim lngI As Long 
    Dim CharToAdd As String 
    Dim ColourToUse As Long 

    For lngI = 1 To 3 

     With Worksheets("Front End") 
      If .Cells(lngI, 3) > .Cells(lngI, 4) Then 
       CharToAdd = "é "  'Up arrow. 
       ColourToUse = -11489280 'Green. 
      ElseIf .Cells(lngI, 3) < .Cells(lngI, 4) Then 
       CharToAdd = "ê "  'Down arrow. 
       ColourToUse = -16776961 'Red. 
      Else 
       CharToAdd = "è "  'Right arrow. 
       ColourToUse = -16711681 'Yellow. 
      End If 

      'Add the character to the start of the number. 
      'Note - cell is now a text string. 
      .Cells(lngI, 3) = CharToAdd & .Cells(lngI, 3) 

      'Format first character in cell. 
      With .Cells(lngI, 3).Characters(Start:=1, Length:=1).Font 
       .Name = "Wingdings" 
       .Color = ColourToUse 
      End With 
     End With 

    Next lngI 

End Sub 

Je vais regarder dans les règles de mise en forme conditionnelle .....

+0

Ceci est une bonne solution au problème, mais je pense que OP cherchait des icônes de formatage conditionnel (flèches). – EliasWick

+1

@EliasWick Bon point. Je n'ai jamais eu besoin de les utiliser avant. Je vais devoir regarder cela - je ne sais pas comment fonctionne la deuxième icône (_when <= Formula et> _). En attendant, je vais ajouter une solution VBA. –

+0

Merci! Ce n'est pas un projet académique donc j'ai pensé que ce serait plus facile pour VBA mais cela résout mon problème. Cependant s'il y a un moyen pour que cela soit fait en VBA il serait vraiment utile de le savoir, pour référence future :) – Fiona

1

même méthode, vous pouvez essayer les caractères suivants également

Sub Up_arrow() 
ActiveCell.FormulaR1C1 = "á" 
With ActiveCell.Font 
    .Name = "Wingdings" 
    .ColorIndex = 10 
    .TintAndShade = 0 
End With 
End Sub 

Sub Down_arrow() 
ActiveCell.FormulaR1C1 = "â" 
With ActiveCell.Font 
    .Name = "Wingdings" 
    .ColorIndex = 46 
    .TintAndShade = 0 
End With 
End Sub 


Sub Right_arrow() 
ActiveCell.FormulaR1C1 = "à" 
With ActiveCell.Font 
     .Name = "Wingdings" 
     .ColorIndex = 40 ' or 22 
     .TintAndShade = 0 
End With 
End Sub