2011-11-17 3 views
0

Techniquement, la solution que je cherche est de minimiser la programmation réelle. J'ai besoin de savoir s'il existe des fonctionnalités Excel que je peux invoquer à partir de VBA, au lieu d'avoir à coder toute la logique moi-même.Excel - Enveloppe la plage de lignes dans une colonne donnée, avec la première colonne répétée pour la plage de lignes

Imaginez la feuille suivante:

Position Competency1 Competency2 Competency3 Competency4 
Employee1  x         x 
Employee2  x      x 

Ce que je besoin est le résultat suivant:

Position Competency1 Competency2 
Employee1  x     
Employee2  x     

Position Competency3 Competency4 
Employee1     x     
Employee2  x     

En d'autres termes, je veux Excel pour déplacer les colonnes vers le bas, mais maintenir la première colonne. Maintenant pour le bit compliqué; il y aura plusieurs postes, avec différents employés. Ainsi, un produit final pourrait ressembler à:

Position Competency1 Competency2 
Employee1  x     
Employee2  x     

Position Competency3 Competency4 
Employee1     x     
Employee2  x     

Position2 Competency5 
Employee3  x        
Employee4    

Les données sont extraites d'une base de données et formatée dans la mise en page ci-dessus via VBA. Le nombre de postes et d'employés/compétences par poste sont tous variables.

Je peux bien sûr coder le tout, mais cela me faciliterait la vie si je pouvais simplement ajouter quelques paramètres à Excel et le faire pour moi. Le problème est, quelle fonctionnalité pertinente que j'ai trouvée semble être à l'échelle de la feuille, alors que je dois être en mesure de spécifier plusieurs ensembles de lignes et de colonnes.

Je soupçonne plutôt la réponse: «Suce-le et code-le». Mais je ne connais pas assez Excel pour le dire à coup sûr.

+0

Dans ce cas, je recommande un tableau croisé dynamique, et vous n'avez même pas besoin d'écrire du code pour le créer. – JimmyPena

+0

Je n'ai pas été en mesure de résoudre ce problème en utilisant PivotTable et aucun de mes collègues ne peut voir comment cela pourrait être fait non plus. Si c'est effectivement possible, il est probable que j'utiliserais autant, voire plus de temps, pour comprendre comment et préparer les données que de simplement les coder dans VBA. –

Répondre

0

Je suppose que la première liste sera Positionner avec les employés en bas. Et qu'aucune autre liste n'est là. En supposant que cela: ici est logiquement ce que vous devez coder

  1. numberOfColumns: Compter les cellules en descendant où la cellule n'est pas vide dans la colonne A (la colonne de position) moins 1. Cela donnera le nombre d'employés (excluant la cellule Position).

  2. numberOfRows: compte le nombre de cellules traversant (ligne 1). Ce sera le nombre de cellules de compétence moins 1 (excluant la cellule de position). CompetanceColumns: Définit une variable capturant le nombre de colonnes de compétence dont elle a besoin pour chaque position. Cela peut être à travers une zone de texte ou dans une cellule sur une autre feuille ou quelque chose comme ça. une valeur de 2

  3. Commencer à A1 + competancyColumns. Copiez et coupez les cellules après la fin de la ligne. Commencer à A1 + numberOfRows + 1. Ajouter un autre compteur pour garder la trace de la position (compteur) donc après le point 4, le compteur devrait lire 2 (0 + competancyColumns). cellules de collage (4) à partir du point

de processus de répétition jusqu'à ce que le compteur = numberOfcolumns. Évidemment, ne pas commencer à A1, mais la rangée où vous étiez.

Vous pouvez le stocker dans un tableau si vous ne voulez pas utiliser Couper et Coller, mais c'est à vous de décider.

Cela devrait être la logique de base.

+0

Je n'ai aucun problème technique à coder, c'est l'aspect temps que j'essaie d'éviter. Il y a déjà beaucoup de code VBA (la feuille est renseignée via VBA à partir de données sur plusieurs autres feuilles qui sont à nouveau chargées à partir d'une base de données), et ce n'est pas très facile pour la maintenance. Ce serait plus rapide et plus robuste si Excel avait des fonctionnalités qui le résoudraient pour moi de manière simple. Sur la base des réponses, je vais aller avec mon hypothèse originale de ne pas être un moyen simple d'avoir Excel gérer ce genre de chose pour moi et juste le code. –

+0

Excel n'est pas si avancé. Il ne peut pas proposer des solutions à chaque problème. Ce que vous demandez n'est pas difficile, et est assez facile à mettre en œuvre dans Excel. VBA est la seule option pour vous si vous voulez l'automatiser. – waqasahmed

+0

Ce ne serait pas une fonctionnalité terriblement avancée par rapport à certains qui sont déjà présents, mais il n'existe clairement pas. J'ai fini par modifier le code existant pour diviser les lignes comme nécessaire tout en peuplant. –

Questions connexes