2017-07-21 1 views
0

Est-il possible pour moi de cellules en forme conditionnelle, si elles correspondent à une formule et leurs lignes adjacentes sont vides?Format de cellule dans la colonne, si la formule de correspondance, et la cellule adjacente est vide

MY feuille est la suivante; La colonne B contient des cellules dans des formats de date, et la colonne P contient également des formats de date.

Je suis en train de formater conditionnellement des cellules dans la colonne B, à condition qu'elles correspondent à la formule suivante;

=NOW()-30 (Remplissez les cellules si elles sont de 30 jours ou plus)

Cela fonctionne bien, cependant, je voudrais saisir un autre état à côté de lui, de sorte que le formatage applique uniquement lorsque la cellule dans la colonne P, sur la même rangée, est vide.

Donc j'espérais que ça ressemblerait à ça, mais ça ne semble pas marcher;

=AND((ISBLANK($P)),((NOW()-30))) 

Merci de votre aide à l'avance.

+0

Ajoutez-vous ces formules en utilisant VBA ou en tapant directement dans la cellule? – Chawin

+0

'= AND (NOT (ISBLANK ($ P)), ((NOW() - 30)))' - l'utilisation de '$ P' n'est pas valide. Vous pouvez regarder la fonction 'OFFSET' ou considérer les références de style R1C1. –

+0

Je le fais via le bouton de mise en forme conditionnelle dans le ruban, merci. – Uhujkill

Répondre

0

Je vous conseille faire une macro VBA (beaucoup plus simple et plus claire à mon avis). Faites simplement une boucle for et faites une boucle dans toute la colonne en utilisant cell.value pour comparer les valeurs ou cell.formula pour obtenir la formule. De cette façon, vous pouvez aussi accélérer les choses en copiant vos valeurs dans une table variant pour que vous puissiez effectuer toutes les opérations avec une perte minimum de temps (idéal pour la manipulation de grandes bases de données). En ce qui concerne la mise en forme conditionnelle avec double conditions qu'il donnerait quelque chose comme ceci:

if(range(cells(2,1), cells(2,bottomrow)).formula = "formulahere" AND range(cells(16,1), cells(16,bottomrow)).value = "") Then 
'--your actions-- 
end if 
+0

Hi Diveye, ce code sera-t-il exécuté chaque fois que le fichier est ouvert? Comme je tente d'éliminer également un utilisateur exécutant une macro. Désolé pour le dérangement. – Uhujkill

+1

Bonjour Uhujkill, oui bien sûr que ça peut se lancer à chaque fois. Tout ce que vous avez à faire est d'aller dans vos objets Microsoft Excel dans votre fichier de projet VBA, recherchez le composant "ThisWorkbook" et créez un sous-répertoire "Private Sub Workbook_Open()". Ce Sub s'exécutera chaque fois que le classeur est ouvert (donc n'importe quand quelqu'un ouvre votre fichier Excel) et exécutera les commandes que vous avez insérées dans le sub. De cette façon, vous pouvez facilement configurer toutes les actions que vous souhaitez et les faire fonctionner au lancement. Consultez ce tutoriel pour plus d'informations sur l'utilisation de VBA pour Excel: http://www.excel-easy.com/vba.html – Diveye

0

Tout ce qui manque à partir de votre code est le numéro de ligne!

En supposant que votre mise en forme conditionnelle commence à la première ligne:

=AND(NOT(ISBLANK($P1)),($B1 <= (NOW()-30))) 

Le caractère $ veillera à ce que la colonne (ou ligne) reste le même quelle que soit la cellule de la mise en forme conditionnelle est effectuée sur.

En n'incluant pas le $ avant votre numéro de ligne, la mise en forme conditionnelle changera dynamiquement pour chaque ligne.

+0

Ce n'est pas le problème. Le problème est que '(NOW() - 30)' est ** toujours ** 'true' car il renvoie quelque chose comme' 2017-06-21 13: 42' qui est 'true' si on le transpose en booléen. Voir [ma réponse] (https://stackoverflow.com/a/45236764/3219613) pour plus d'informations. –

+0

@Peh ah oui, apprécié, complètement oublié que l'autre moitié de l'équation devrait être traitée lors du changement de la mise en forme conditionnelle à base de formule – Chawin

1

Si vous utilisez une formule pour le formatage conditionnel, la cellule est formatée si la formule résulte true.

Le problème ici est que =NOW()-30 résultats dans quelque chose comme ce qui est 2017-06-21 13:31 toujourstrue si casted en booléen. Par conséquent, si vous souhaitez formater une cellule uniquement si sa date est antérieure à 30 jours, vous devez vérifier cette cellule. Par exemple. pour la cellule B1, utiliser: =(B1<=NOW()-30).

Ou en conséquence quelque chose comme =AND(ISBLANK($P1), ($B1<=NOW()-30)) pour la cellule B1, puis copiez le format dans les autres cellules.

0

J'ai réussi à le faire fonctionner, en appliquant la formule suivante, à la colonne B, dans la fenêtre de mise en forme conditionnelle;

=($B1<=NOW()-365)*($P1="") 

Cette formule formate seulement les cellules après avoir confirmé la date, dans les cellules B1 ... sont supérieures à 365 jours, et les cellules adjacentes dans la colonne P sont vides. Ainsi répondant à mes paramètres requis.