2013-03-07 6 views
0

Comment puis-je faire cela s'il vous plaît !? J'ai un livre de travail Excel avec 60 feuilles et tous les 60 ont les mêmes en-têtes de colonnes et le même nombre de colonnes.Rapport dans Excel 2010 avec VBA

Chaque feuille est le nom d'un pays et les lignes a des noms dans la colonne A et un statut B et un code D

je dois produire un rapport en utilisant toutes les 60 feuilles qui liste tous les noms par Pays où la valeur B = "XYV" et montre la valeur correspondante dans D.

Espérons que cela a du sens! J'ai essayé d'utiliser un tableau croisé dynamique à travers la feuille mais je reçois soit une référence invalide si je sélectionne seulement les colonnes nécessaires (et cela prend une éternité à faire!) Ou une mémoire insuffisante si je sélectionne la feuille entière. Est-ce que je peux faire ceci dans la macro de VBA

?

Désolé, je suis nouveau sur Excel de cette façon de sorte que toute aide serait appréciée ...

+0

pour récupérer ces données, vous pouvez utiliser VLookup, ou avec des formules INDIRECT MATCH - jetez un oeil à [Excel utilisateur MVP] (http://exceluser.com/blog/465/excels- best-lookup-method-index-match.html) –

+0

Merci Philip Je vais prendre une lecture de ceci – Adrian

Répondre

1

l'utilisation de VBA, cela fonctionne (bien qu'il a besoin de rangement - je l'ai inclus pour vous donner l'idée):

Sub FindItems() 

Const Thing As String = "XYV" 

'remember which workbook you are on 
Dim wb As Workbook 
Set wb = ActiveWorkbook 

'create new book for answer 
Dim AnswerBook As Workbook 
Set AnswerBook = Workbooks.Add 

'loop over sheets in original workbook 
Dim ws As Worksheet 
Dim c As Range 
Dim BCells As Range 

For Each ws In wb.Worksheets 

    'check each cell in column B 
    wb.Activate 
    ws.Select 

    Range("B1").Select 
    Set BCells = Range(ActiveCell, ActiveCell.End(xlDown)) 

    For Each c In BCells 

     If LCase(c.Value) = LCase(Thing) Then 

      'add to list 
      AnswerBook.Activate 
      ActiveCell.Value = ws.Name 
      ActiveCell.Offset(0, 1).Value = c.Value 
      ActiveCell.Offset(0, 2).Value = c.Offset(0, 2).Value 

      ActiveCell.Offset(1, 0).Select 

     End If 
    Next c 

Next ws 

End Sub

+0

Merci après avoir changé certaines des valeurs pour répondre à mes besoins cela a bien fonctionné :) – Adrian