Сложение значений из нескольких электронных таблиц (VBA)

Сложение значений из нескольких электронных таблиц (VBA)

В моей книге Excel есть три отдельные таблицы. Таблицы идентичны по формату и представляют собой значения количества для разных категорий (легковые автомобили, грузовики и т. д.). Мне нужно объединить таблицы следующим образом и создать новую книгу с объединенными данными (CombinedCount.xlsx):

='Пассажирский'!B3+'Тяжелый грузовик'!B3+'Легкий грузовик'!B3

Нужно сложить много ячеек, и этот код будет применен к большому количеству рабочих книг с точно таким же форматом. Есть ли способ автоматизировать этот процесс с помощью кода Python?

решение1

Есть ли какая-то особая причина, по которой вы хотите сделать это с помощью Python? Excel может сделать большую часть этого сам, с помощью этого макроса VBA:

Sub CombineSheets()
'
' Add three identically-formatted sheets,
' putting the result into a fourth one, and then moving it to a new workbook.
'

    Sheets(1).Copy After:=Sheets(3)
    Sheets(4).Name = "Combined Counts"
    Sheets(2).Select
    Cells.Copy
    Sheets(4).Select
    Range("A1").Select
    Selection.PasteSpecial Operation:=xlAdd
    Sheets(3).Select
    Cells.Copy
    Sheets(4).Select
    Selection.PasteSpecial Operation:=xlAdd
    Sheets(4).Move
End Sub

Этот

  • Создает полную копию первого листа, помещая его после третьего листа. На новый лист впоследствии можно ссылаться как Sheets(4). Если первый лист называется Passenger, то новый лист изначально будет называться Passenger (2).
  • Переименуйте новый лист Combined Counts.
  • Скопируйте весь второй лист и вставьте его на новый лист с помощью сложения. (Это функция, к которой вы можете получить интерактивный доступ с помощью «Вставить» → «Специальная вставка…», а затем выбрав «Добавить» в разделе «Операция».) Затем повторите с третьим листом. Нечисловые данные (т. е. текст) на втором и третьем листах игнорируются. Если на первом листе есть текст в заданной ячейке, этот текст сохранится в результате, даже если на одном из других листов там есть число. (Но это не должно быть проблемой, поскольку вы говорите, что листы идентичны по формату.)
  • Отделите новый рабочий лист от книги, создав новую рабочую книгу.

Затем вы можете сохранить новую книгу и закрыть ее окно, введя что-то вроде

    Do
        fName = Application.GetSaveAsFilename( _
                            FileFilter:="Excel Workbook (*.xlsx), *.xlsx")
    Loop Until fName <> False
    ActiveWorkbook.SaveAs Filename:=fName
    ActiveWindow.Close

перед End Sub. Или вы можете получить имя файла другим способом.

решение2

Я бы использовал надстройку Power Query для этой задачи. Она может импортировать все или выбранные файлы из папки и построить таблицу, объединяющую данные из каждого файла (предполагая, что они имеют стандартную структуру, как вы указали). Например:

http://www.excelguru.ca/blog/2013/11/26/from-txt-files-to-bi-solution/

Power Query также имеет функцию Group By, которая может суммировать данные и агрегировать их, например, количество, количество различных значений, сумма, среднее значение и т. д.

Связанный контент