Отчетность в Excel 2010 с помощью VBA

Как я могу это сделать !? У меня есть рабочая тетрадь Excel с 60 листами, и все 60 имеют одинаковые заголовки столбцов и количество столбцов.

На каждом листе указано название страны, а строки имеют названия в столбце A, статус в B и код D.

Мне нужно создать отчет, используя все 60 листов, в которых перечислены все имена по странам, где значение B = «XYV», и показано соответствующее значение в D.

Надеюсь, это имеет смысл!

Я пытался использовать сводную таблицу на всем листе, но либо получаю недопустимую ссылку, если выбираю только нужные столбцы (а это занимает целую вечность!), Либо недостаточно памяти, если я выбираю весь лист.

Могу ли я сделать это в макросе VBA?

Извините, я новичок в Excel, поэтому любая помощь будет принята с благодарностью ...


person Adrian    schedule 07.03.2013    source источник
comment
чтобы получить эти данные, вы можете использовать VLookup или INDIRECT с формулами MATCH - взгляните на Пользовательский MVP Excel   -  person Our Man in Bananas    schedule 07.03.2013
comment
Спасибо, Филип, я прочитаю это   -  person Adrian    schedule 07.03.2013


Ответы (1)


Используя VBA, это работает (хотя его нужно привести в порядок - я включил его, чтобы дать вам представление):

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

Конец подписки

person Andy Brown    schedule 07.03.2013
comment
Спасибо, после изменения некоторых значений для удовлетворения моих потребностей, это отлично сработало :) - person Adrian; 07.03.2013