2017-08-17 2 views
-1

Je cherche une formule ou un code VBA qui peut appliquer une mise en forme conditionnelle, en particulier la couleur de remplissage, aux cellules vides à gauche ou à droite de cellules contenant un texte spécifique commençant par: "P". J'ai joint une capture d'écran de exactement ce que je cherche à réaliser.Formatage conditionnel des cellules à GAUCHE/DROITE des cellules contenant un texte spécifique commençant par

Excel Screenshot

Je veux la couleur de remplissage des cellules dans la colonne A pour passer au bleu si la cellule à côté de la colonne B contient du texte commençant par « P » et rose si le texte est « T »,

La façon dont je l'avais fait auparavant était avec une macro pour copier les données de la colonne F et les coller dans les colonnes A, G, M puis appliquer une mise en forme conditionnelle à ces colonnes avec la règle: P ", puis en changeant la couleur de remplissage et le texte à la même couleur afin d'apparaître solide.

C'est dingue mais cela fonctionne, malheureusement lors de l'impression, le texte de la cellule apparaîtra toujours par rapport à la couleur de fond de remplissage. Ce qui n'est pas la fin du monde, mais je me demande s'il existe un moyen plus correct d'y parvenir. Existe-t-il un moyen de compenser les cellules auxquelles le formatage s'applique? Toute aide est appréciée merci!

Répondre

0

Sélectionner les colonnes A, F et M avec F1 comme la cellule active. Créez un nouveau CFR en utilisant la formule suivante.

=or(iferror(left(e1)="P", false), left(g1)="P") 

enter image description here

Le problème de la création de cette VBA est la formule; il n'y a pas de colonne à gauche de la colonne A et toute union des trois colonnes traitera toujours A1 comme «cellule active», quelle que soit la façon dont l'union est créée. .Range ("G: G, M: M, A: A,") est la même chose que .Range ("A: A, G: G, M: M"); A1 est la "cellule active". Une solution serait de passer temporairement xlR1C1 où RC [-1] peut être utilisé pour faire référence à la colonne inexistante à la gauche de la colonne A.

Option Explicit 

Sub meh() 
    Dim refStyle As Long, xlR1C1formula As String 

    'store original reference style 
    refStyle = Application.ReferenceStyle 
    'make it xlR1C1 reference style 
    Application.ReferenceStyle = xlR1C1 

    With Worksheets("sheet1") 
     With .Range("A:A, G:G, M:M") 
      .FormatConditions.Delete 

      xlR1C1formula = "=or(iferror(left(rc[-1])=char(80), false), left(rc[1])=char(80))" 
      With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlR1C1formula) 
       .Interior.ColorIndex = 5 
       .NumberFormat = ";;;" 
      End With 

      xlR1C1formula = "=or(iferror(left(rc[-1])=char(84), false), left(rc[1])=char(84))" 
      With .FormatConditions.Add(Type:=xlExpression, Formula1:=xlR1C1formula) 
       .Interior.ColorIndex = 22 
       .NumberFormat = ";;;" 
      End With 
     End With 

     'switch back 
     Application.ReferenceStyle = refStyle 
    End With 
End Sub 
+0

BTW, si vous voulez que le texte de la cellule/valeur à ' disparaître », ne pas définir la couleur de la police; définir un format numérique personnalisé de ';;;'. – Jeeped

+0

Merci Jeeped pour ces deux excellentes solutions. Cependant, j'ai un peu de mal à implémenter ceci avec vba. Quand je suis votre solution dans le gif manuellement cela fonctionne parfaitement comme prévu, mais quand j'essaie d'utiliser une macro, la colonne M n'est pas formatée. Voici le [code] (http://imgur.com/a/loQWj) J'utilise et voici le [résultat] (http://imgur.com/a/8CEwo). Toute aide est toujours appréciée merci! – jsweeney

+0

Voir ma solution VBA ci-dessus. J'ai utilisé char (80) et char (84) pour déterminer P et T puisque je déteste doubler des guillemets dans une chaîne entre guillemets. – Jeeped

0

La première chose que je voudrais faire est un nom défini par des formules> définies noms> Définir un nom, appelé ici, avec la formule suivante:

=INDIRECT(ADDRESS(ROW(),COLUMN(),4))

Puis, sous Accueil> Styles> Mise en forme conditionnelle > Nouvelle règle, utilisez cette formule sur les cellules à être affectées:

=IF(AND(Here="",OR(LOWER(LEFT(OFFSET(Here,,1),1))="p",LOWER(LEFT(OFFSET(Here,,-1),1))="p")),TRUE,FALSE)