Как я могу использовать макрос для группировки и усреднения значений в столбце Excel?

Вопрос или проблема

Я новичок здесь и у меня возникли трудности с написанием макросов. Я хотел бы узнать, может ли кто-то помочь мне создать/объяснить макрос, который можно было бы использовать в моем наборе данных.

У меня есть файл Excel, который выглядит примерно так:

введите описание изображения здесь

В основном я хочу, чтобы макрос прошел через колонку “фрукты”, распознал это как отдельный фрукт, затем усреднил свежесть этого фрукта на основе их “группы”, а затем указал это среднее и группу рядом с первой ячейкой каждой группы.

Мне кажется, что это простой макрос, но я не могу его понять. Как это можно сделать?

Спасибо! Я буду признателен!

Этот макрос сделает свое дело

Public Sub itemaverages()
    Dim wks As Worksheet
    Set wks = ActiveSheet
    firstrow = 2
    resultcolumn = 6
    titletext = "AVG"
    resultrow = firstrow
    searching = True
    lastitemname = wks.Cells(firstrow, 1)
    lastitemfresh = wks.Cells(firstrow, 2)
    lastitemgroup = wks.Cells(firstrow, 3)
    itemtotal = lastitemfresh
    therow = firstrow + 1
    While searching
        countitem = 1
        sameitem = True
        While sameitem
            itemname = wks.Cells(therow, 1)
            itemfresh = wks.Cells(therow, 2)
            itemgroup = wks.Cells(therow, 3)
            If itemname <> "" Then
                If (itemname = lastitemname) And (itemgroup = lastitemgroup) Then
                    itemtotal = itemtotal + itemfresh
                    countitem = countitem + 1
                    therow = therow + 1
                    lastitemname = itemname
                    lastitemfresh = itemfresh
                    lastitemgroup = itemgroup
                Else
                    averagename = UCase(lastitemname) & " " & titletext
                    averagefresh = itemtotal / countitem
                    wks.Cells(resultrow, resultcolumn).Value = averagename & " " & averagefresh
                    wks.Cells(resultrow, resultcolumn + 1).Value = lastitemgroup
                    sameitem = False
                    lastitemname = itemname
                    lastitemfresh = itemfresh
                    lastitemgroup = itemgroup
                    itemtotal = itemfresh
                    resultrow = therow
                    therow = therow + 1
                End If
            Else
                sameitem = False
                searching = False
            End If
        Wend
    Wend
    a = MsgBox("Готово", vbInformation)
End Sub

Откройте VBA/Макросы с помощью Alt+F11, вставьте новый модуль под ThisWorkbook и вставьте этот код справа.

Переменные firstrow и resultcolumn можно настроить под ваши нужды.

Ответ или решение

Как использовать макрос в Excel для группировки и усреднения значений в столбце

Создание макроса в Excel для группировки и усреднения данных может значительно упростить вашу работу с большими объемами данных. В этой статье мы подробно рассмотрим, как создать макрос, который будет обрабатывать данные в вашем файле Excel, группируя их по фруктам и вычисляя среднее значение свежести для каждой группы. Мы также предложим код для внедрения в VBA.

Шаг 1: Подготовка данных

Прежде всего, убедитесь, что ваши данные организованы в виде таблицы. В столбцах должны находиться следующие данные:

  • Название фрукта
  • Уровень свежести
  • Группа

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

Шаг 2: Открытие редактора VBA

Чтобы начать написание макроса, выполните следующие действия:

  1. Откройте ваш файл Excel.
  2. Нажмите Alt + F11, чтобы открыть редактор Visual Basic for Applications (VBA).
  3. В редакторе перейдите в меню Insert и выберите Module, чтобы создать новый модуль.

Шаг 3: Вставка кода макроса

Скопируйте следующий код и вставьте его в окно нового модуля:

Public Sub itemaverages()
    Dim wks As Worksheet
    Set wks = ActiveSheet
    Dim firstrow As Integer
    Dim resultcolumn As Integer
    Dim titletext As String
    Dim resultrow As Integer
    Dim searching As Boolean
    Dim lastitemname As String
    Dim lastitemfresh As Double
    Dim lastitemgroup As String
    Dim itemtotal As Double
    Dim therow As Integer

    firstrow = 2 ' Номер первой строки с данными
    resultcolumn = 6 ' Столбец для вывода результатов
    titletext = "AVG" ' Текст для результирующего столбца
    resultrow = firstrow
    searching = True
    lastitemname = wks.Cells(firstrow, 1)
    lastitemfresh = wks.Cells(firstrow, 2)
    lastitemgroup = wks.Cells(firstrow, 3)
    itemtotal = lastitemfresh
    therow = firstrow + 1

    While searching
        Dim countitem As Integer
        countitem = 1
        Dim sameitem As Boolean
        sameitem = True

        While sameitem
            Dim itemname As String
            Dim itemfresh As Double
            Dim itemgroup As String

            itemname = wks.Cells(therow, 1)
            itemfresh = wks.Cells(therow, 2)
            itemgroup = wks.Cells(therow, 3)

            If itemname <> "" Then
                If (itemname = lastitemname) And (itemgroup = lastitemgroup) Then
                    itemtotal = itemtotal + itemfresh
                    countitem = countitem + 1
                    therow = therow + 1
                Else
                    Dim averagename As String
                    Dim averagefresh As Double
                    averagename = UCase(lastitemname) & " " & titletext
                    averagefresh = itemtotal / countitem
                    wks.Cells(resultrow, resultcolumn).Value = averagename & " " & averagefresh
                    wks.Cells(resultrow, resultcolumn + 1).Value = lastitemgroup
                    resultrow = therow
                    lastitemname = itemname
                    lastitemfresh = itemfresh
                    lastitemgroup = itemgroup
                    itemtotal = itemfresh
                    sameitem = False
                End If
            Else
                sameitem = False
                searching = False
            End If
        Wend
    Wend

    MsgBox "Завершено", vbInformation
End Sub

Объяснение кода

  1. Переменные:

    • firstrow: номер строки, с которой начинаются данные.
    • resultcolumn: столбец, в который будут записаны результаты.
    • titletext: текст, который будет добавлен к имени фрукта в результирующем столбце.
  2. Циклы:

    • Внешний цикл ищет фрукты и их свежесть, пока не достигнет конца данных.
    • Внутренний цикл подсчитывает общее количество фруктов и их свежесть в одной группе.
  3. Вычисление средней свежести:

    • После подсчета среднее значение свежести вычисляется и добавляется в указанный столбец.

Шаг 4: Запуск макроса

После вставки кода закройте редактор VBA и вернитесь в Excel. Вы можете запустить макрос, перейдя на вкладку "Разработчик" и выбрав "Макросы". Найдите ваш макрос itemaverages, выберите его и нажмите "Выполнить".

Заключение

Создание макроса для группировки и усреднения данных в Excel позволяет автоматизировать процессы, экономя ваше время и усилия. Следуя вышеописанным шагам, вы сможете легко управлять своими данными и получать нужные результаты. Если у вас возникнут вопросы или трудности, не стесняйтесь обращаться за дополнительной помощью!

Оцените материал
Добавить комментарий

Капча загружается...