Как собрать данные из одного столбца на нескольких листах в одной книге? - PullRequest
1 голос
/ 26 февраля 2010

Хорошо, вот что я хочу сделать. Для этого примера у меня есть одна рабочая книга, состоящая из 4 листов данных и итоговой таблицы. Каждый из 4 листов данных имеет одинаковое имя, следуя одному и тому же шаблону, где единственная разница - это дата. (Например, 9854978_1009_US.txt, где 1009 - это дата, которая изменяется, в то время как остальная часть имени файла совпадает). В каждом из этих документов столбец F содержит последовательность чисел, в которой я хотел бы найти сумму, но я не знаю, сколько ячеек в F на самом деле содержат числа. (Однако под этими цифрами никогда не будет дополнительной информации, поэтому в теории я мог бы просто сложить весь столбец F вместе). Со временем я также добавлю новые файлы в рабочую книгу, и мне не нужно будет переписывать код, из которого я собираю свои данные, из столбца F. По сути, я бы хотел, чтобы документ «итоги» занимал каждый столбец F из документов в рабочей книге с именем «9854978 _ ???? _ US.txt», где вопросительные знаки меняются в зависимости от имени файла. Как мне сделать это в чистом коде Excel?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2010

Вот функция, которая сделает этот расчет:

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

Это не энергозависимая функция, поэтому, если вы добавите другой лист или измените значение в столбце F, пересмотренный итог не будет отображаться, пока вы не выполните принудительный пересчет, нажав Ctrl + Alt + F9.

Если вам нужна энергозависимая функция, которая всегда отображает правильную сумму, дайте мне знать. Энергозависимые функции могут замедлить время пересчета, но это не может быть проблемой для вас.

Если вы добавляете новые листы через VBA, для принудительного пересчета можно использовать инструкцию VBA: Application.CalculateFull

0 голосов
/ 12 марта 2010

В таких случаях я бы порекомендовал использовать VBA, но я нашел (по общему признанию, неэффективное) решение только с формулами Excel.

В ячейке A1 нового листа напишите 1, затем 2 в ячейке ниже. Выберите две ячейки и перетащите вниз. Функция автозаполнения будет производить число от 1 до конца перетаскивания. Продолжайте, пока не наберете номер 9999

В ячейку B1 положить формулу =TEXT(A1,"000#"); перетащите формулу вниз, чтобы получить текст от 0001 до 9999 .

В ячейку С1 положить формулу ="9854978_"&B1&"_US.txt"; перетащите формулу вниз, чтобы получить текст от 9854978_0001_US.txt до 9854978_9999_US.txt

В ячейку D1 поместите формулу: =if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F"))); перетащите формулу вниз, чтобы получить суммы.

Решение может стать гораздо менее неэффективным, сократив набор возможных чисел. Пропущенный год возможны только 365.

PS: формулы могут быть немного неправильными, потому что я перевел их из моей локализованной версии Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...