2010-02-26 7 views
1

Bon, alors voici ce que je veux accomplir. Pour cet exemple, j'ai un seul classeur composé de 4 fiches de données plus une feuille de totaux. Chacune des 4 fiches a un nom similaire suivant le même modèle où la seule différence est la date. (Ex. 9854978_1009_US.txt, où 1009 est la date qui change alors que le reste du nom de fichier est le même). Dans chacun de ces documents, la colonne F contient une série de nombres dont j'aimerais trouver la somme, mais je n'aurai aucune idée du nombre de cellules dans F qui contiennent effectivement des nombres. (Cependant, il n'y aura jamais d'informations supplémentaires en dessous des chiffres, donc je pourrais théoriquement ajouter toute la colonne F ensemble). Je vais également ajouter de nouveaux fichiers au classeur au fil du temps et je ne veux pas avoir à réécrire le code dont je rassemble mes données de la colonne F. Essentiellement, ce que je voudrais accomplir, c'est que le document «totaux» prenne chaque colonne à partir de documents dans le classeur avec le nom de '9854978 _ ???? _ US.txt', où les points d'interrogation changent en fonction du nom de fichier. Comment ferais-je cela en pur code Excel?Comment rassembler des données de la même colonne dans plusieurs feuilles de calcul dans un seul classeur?

Répondre

0

Dans des cas comme celui-ci, je recommanderais d'utiliser VBA, mais j'ai trouvé une solution (certes inefficace) avec seulement des formules Excel.

Dans la cellule A1 d'une nouvelle feuille, écrivez 1, puis 2 dans la cellule ci-dessous. Sélectionnez les deux cellules et faites-les glisser vers le bas. La fonction de saisie semi-automatique produira le nombre de 1 jusqu'à la fin de la traînée. Continuez jusqu'à ce que vous atteigniez le nombre 9999

Dans la cellule B1 mettre la formule =TEXT(A1,"000#"); faites glisser la formule vers le bas pour obtenir le texte de à . Dans la cellule Cl, mettre la formule ="9854978_"&B1&"_US.txt"; faites glisser la formule vers le bas pour obtenir le texte de 9854978_0001_US.txt à 9854978_9999_US.txt

Dans la cellule D1, mettez la formule: =if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F"))); faites glisser la formule vers le bas pour obtenir les sommes.

La solution pourrait devenir beaucoup moins inefficace en réduisant l'ensemble des nombres possibles. PS: les formules peuvent être légèrement fausses car je les ai traduites de ma version localisée d'Excel.

0

est ici une fonction qui va faire ce calcul:

Function TotalColF() As Double 

    Dim wks As Worksheet 

    For Each wks In ThisWorkbook.Worksheets 
     If left(wks.name,7) = "9854978" then 
      TotalColF = TotalColF + Application.WorksheetFunction.Sum(wks.Range("F:F")) 
     End If 
    Next wks 

End Function 

Ce n'est pas une fonction volatile, donc si vous ajoutez une autre feuille, ou de modifier une valeur dans la colonne F, le total révisé ne sera pas affiché jusqu'à vous forcez un recalcul en faisant Ctrl + Alt + F9.

Si vous avez besoin d'une fonction volatile qui affichera toujours le total correct, faites le moi savoir. Les fonctions volatiles peuvent ralentir les temps de recalcul, mais ce n'est peut-être pas un problème pour vous.

Si vous ajoutez les nouvelles feuilles via VBA, vous pouvez utiliser une instruction VBA pour forcer le recalcul: Application.CalculateFull