Cacher toutes les rangées de données sélectionnées

Je ne peux pas envoyer de photos,

Les données contiennent 98 en-têtes de colonne, la première colonne étant des identifiants uniques et 1000 lignes d'éléments. Je reçois des commentaires sur des éléments spécifiques tout au long de la journée. La mise à jour de ces articles est difficile car ils sont difficiles à localiser. J'aimerais pouvoir entrer, dans une cellule de saisie spécifiée, une liste délimitée par des virgules des éléments cibles (sur l'ordre de 50 éléments) et avoir toutes les lignes de données cachées, sauf pour les lignes des éléments spécifiés.

Une solution VBA est acceptable. Je tente actuellement de le faire en utilisant des filtres, mais la quantité d'articles rend ce travail difficile et je cherche une meilleure solution.

col1 col2 .....col98 UniqueID header.....header row1 ItemA1 Data2 ....Data98 row2 ItemA2 Data2 ....Data98 row3 ItemA3 Data2......Data98 row4 ItemA4 Data2......Data98 

Cellule d'entrée: A2, A3 masque toutes les lignes sauf les lignes avec A2, A3

  col1 col2 .....col98 UniqueID header.....header row2 ItemA2 Data2 ....Data98 row3 ItemA3 Data2......Data98 

La réponse de fixer1234 est un bon début. Je suppose que vous avez utilisé les techniques dans cette réponse pour prendre les identifiants qui vous intéressent et les diviser en lignes séparées dans la colonne DA . Supposons que vos identifiants soient les états des États-Unis:

Feuille de calcul avec tous les états de la colonne A, sélectionnée dans col DA

Entrez un titre arbitraire dans la rangée 1 d'une autre colonne non utilisée; Par exemple, CZ . Entrer

 =(COUNTIF(DA$2:DA$51,A2)>0) 

Dans CZ2 et faites glisser vers le bas pour couvrir toutes les lignes où vous avez des données (c.-à-d. Par la ligne 1001). Notez que mon utilisation de DA$51 suppose que vous avez jusqu'à 50 cibles que vous recherchez (comme vous l'avez dit). Ceci évaluera à TRUE sur chaque ligne où la valeur dans la colonne A apparaît (au moins une fois) dans la colonne DA . Maintenant, filtrez la colonne CZ et affichez uniquement les lignes où elle est TRUE :

Filtré, ne montrant que les états énumérés dans la colonne DA

EDIT: Comme le souligne Scott dans son commentaire, la réponse ci-dessous ne permet pas de naviguer et de modifier les données source, elle ne l'affiche que. Sa réponse fournit une solution à la question. Je laisserai la réponse en place en tant qu'informations générales au cas où quelqu'un aurait besoin d'une méthode pour afficher les données sélectionnées, et parce que la réponse de Scott le réfère.

Il existe un moyen relativement simple de faire ce que vous voulez en créant la sortie que vous voulez dans un autre emplacement plutôt que d'essayer de cacher des lignes (je crois que cela nécessiterait VBA). Il y a deux parties du problème que vous avez décrit: entrer vos sélections dans une liste délimitée par des virgules et l'utiliser, et afficher les lignes sélectionnées. Vous pouvez le simplifier en énumérant vos sélections individuellement dans une colonne, donc je vais couvrir la sortie en premier.

La sortie souhaitée peut être effectuée à l'aide de la fonction VLOOKUP. Vous pouvez créer une formule générique et la répliquer au besoin. Dans cette étape, je suppose que vos sélections sont répertoriées individuellement dans une colonne. Si vous entrez de cette façon, vous avez besoin de cette étape. Si vous souhaitez utiliser la liste délimitée par des virgules, la deuxième étape décodera cela pour créer les sélections individuelles dans la colonne.

Supposons donc que vos noms de référence se trouvent dans la colonne A, les données associées se trouvent dans les 97 colonnes adjacentes et toutes les données se trouvent dans les lignes 2 à 1001. Je décrirai la sortie dans un autre emplacement sur la même feuille. Si vous voulez le faire sur une feuille séparée, il suffit d'inclure la référence de la feuille dans le cadre de toute référence de cellule qui indique vos données.

Supposons que votre sortie commence dans la colonne DA, ligne 2, et inclut les 97 colonnes suivantes. Les sélections sont entrées dans DA2 via DA50, ou pour autant que vous en avez besoin. L'entrée dans DB2 serait:

  =IFERROR(VLOOKUP($DA2,$A$2:$CW$1001,COL(DB2)-COL($DA2)+1,FALSE),"") 

Explication rapide: L'IFERROR au début et les guillemets à la sortie de la force finale forment si la recherche produit une erreur. Cela se produira s'il n'y a pas d'entrée dans DA. Donc, si vous commencez par aucune entrée, la sortie sera vide. S'il y a 10 entrées, toutes les lignes après cela seront vierges.

VLOOKUP recherche la sélection entrée dans DA2, fonctionne avec toutes les données (je l'affiche comme A2: CW1001), compare DA2 aux entrées dans la colonne A (le "faux" spécifie une correspondance exacte) et renvoie le contenu dans le Colonne de données associée pour la ligne correspondante. Étant donné que les colonnes de sortie se situent dans les mêmes positions relatives que les données, les fonctions COL calculent la colonne équivalente dans les données. Copiez cette formule dans toutes les colonnes de sortie et pour autant de lignes que vous avez besoin.

Lorsque les sélections sont entrées dans la colonne DA, les données pour chaque sélection apparaîtront. Si vous souhaitez saisir les sélections sous la forme d'une liste délimitée par des virgules, gardez à l'esprit qu'il existe une limite de caractères pour une cellule. Si vous parlez de 50 sélections et que les références uniques sont longues, elles pourraient dépasser la limite de caractères. Cela dit, voici un moyen de décoder. Je décrirai une méthode qui n'est pas élégante, mais elle est simple et facile à déboguer.

Supposons que vous entrez votre liste dans DA1. Nous utiliserons les trois colonnes à gauche de DA pour décoder la liste, ce qui serait CX, CY et CZ. Dans CX, nous localisons les virgules. La formule dans CX2 est la suivante:

  =FIND(",",DA1) 

Après la première virgule, nous devons indiquer à la fonction FIND où commencer à chercher la prochaine, donc CX3 est:

  =FIND(",",$DA$1,CX2+1) 

Cette formule peut être copiée pour autant de lignes que vous avez besoin. Dans chaque rangée, il commencera à regarder dans la position du personnage après la dernière virgule. Ensuite, nous passerons à la colonne CZ et calculons la longueur de chaque sélection. En CZ2, la formule est:

  =IF(ISERROR(CX2),LEN($DA$1),CX2-1) 

Si aucune virgule n'a été trouvée (une erreur a été renvoyée), il y avait soit zéro ou une entrée dans la liste, auquel cas la longueur est celle de la liste. Sinon, c'est un caractère inférieur à celui de la virgule. Pour CZ3, la formule est:

  =IF(ISERROR(CX2),NA(),IF(ISERROR(CX3),LEN($DA$1)-CX2,CX3-CX2-1)) 

Si aucune virgule n'a été trouvée dans la recherche précédente, cela signifie qu'il n'y a pas de choix à décoder pour cette ligne et il renvoie un code d'erreur. Si aucune virgule n'a été trouvée pour la ligne actuelle, cela signifie qu'il y a une entrée de plus et sa longueur est tout après la dernière virgule. Si une autre virgule a été trouvée, la longueur est les caractères entre les deux dernières virgules. Cette formule peut être copiée pour autant de lignes que vous avez besoin.

Dans la colonne CY, nous calculons la position de départ de chaque entrée dans la liste. CY2 n'a pas besoin d'une valeur car c'est toujours le début. La formule dans CY3 est:

  =CZ2+2 

C'est le caractère après la longueur du premier élément plus la virgule. La formule dans CY4 est:

  =CY3+CZ3+1 

C'est la position de départ de l'élément précédent plus la longueur de l'élément précédent plus la virgule. Copiez-le vers le bas pour autant de lignes que vous avez besoin. Vous avez maintenant identifié où trouver l'entrée dans la liste pour chaque ligne. L'étape suivante consiste à remplir les sélections. La formule pour DA2 est:

  =IF(ISBLANK(DA1),"",LEFT(DA1,CZ2)) 

Si la liste est vide, cela renvoie un blanc. Sinon, il faut les caractères les plus à gauche pour la longueur précédemment calculée. La formule pour DA3 est:

  =IF(OR(ISBLANK($DA$1),ISNA(CZ3)),"",MID($DA$1,CY3,CZ3)) 

Si la liste est vide ou que le calcul de la longueur est retourné #NA, le résultat est vide. Sinon, il utilise la position de début calculée et la longueur pour renvoyer ces caractères dans la liste. Cette formule peut être copiée pour autant de lignes que vous avez besoin. Maintenant, la sortie fonctionne comme dans la première partie, seules les entrées de sélection sont remplies à partir de la liste délimitée par des virgules.