Додавання значень із кількох електронних таблиць (VBA)


0

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

= "Пасажир"! B3 + "Важка вантажівка"! B3 + "Легка вантажівка"! B3

Є багато комірок, які потрібно додати разом, і цей код буде застосовано до великої кількості робочих зошитів із точно таким же форматом. Чи є спосіб автоматизувати цей процес за допомогою деякого коду Python?


Існує безліч існуючих модулів Python, які можуть працювати безпосередньо з файлами XLS та XLSX, а також новішим модулем під назвоюOpenPyXL .
Прорив

Відповіді:


0

Чи є якась конкретна причина, чому ви хочете зробити це з 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. Або ви можете отримати ім'я файлу іншим способом.


Дякую за цей код - я спробую його і повернуся до вас. Моє завдання - написати код, який можна застосувати до великої кількості файлів excel, що містять подібні дані (зокрема, дані про кількість транспортних засобів для всіх перехресть у моєму регіоні). Я ніколи раніше не працював з Excel VBA і мені цікаво, чи цей код можна застосовувати лише до однієї робочої книги одночасно. У мене є зразкова група файлів даних, що містить шість робочих зошитів (3 аркуші на робочу книжку), але фактичних даних, мабуть, буде сотні. Пошук автоматичного способу організації цих файлів стане важливим кроком у майбутньому аналізі ...
user30958

Крім того, я спробував код, і вихідний аркуш був лише копією Sheet1 (Пасажирський). Листи не були складені належним чином. Як я можу це виправити?
користувач30958

Код помилки: 400
користувач30958

0

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

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

Power Query також має групу за функцією, яка може узагальнювати дані та агрегувати їх, наприклад, підрахунок, підрахунок числа, сума, середня кількість тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.