Excel/VBA/SQL Захватите значение из одной строки и обновите в другой

То, что я пытаюсь сделать, это обновить количество из одной строки в другую в Excel. У них нет ни одной клавиши, которая объединяет, но они в шаблоне. Всегда начинайте с группы товаров и примерно через 3-7 строк после окончания группы товаров. Я хочу получить сумму из группы элементов и обновить строку в группе элементов, но всегда группа элементов будет первой, а затем группа элементов.

Я мог бы загрузить в SQL, если это проще работать или Access.

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

Это проблема.

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

1 ответ

Поэтому, если у вас еще нет вкладки "Разработчик", вам нужно перейти в "Настройки"> "Настройка ленты"> "Разработчик".

Затем нажмите VB Editor на вкладке "Разработчик", щелкните правой кнопкой мыши в области проекта и выберите "вставить новый модуль". В новый модуль вставьте этот код и сохраните.

Чтобы упростить запуск, перейдите на вкладку "Разработчик"> "Вставить"> "Кнопка". Затем щелкните правой кнопкой мыши на кнопке и назначьте ее только что созданному макросу, чтобы при каждом обновлении значений группы элементов можно было нажимать кнопку. Если кнопка не позволяет вам "назначить макрос", возможно, вы вставили кнопку неправильного типа.

Option Explicit

Sub UpdateValues()

    Dim itemCol As Long
    Dim lastRow As Long
    Dim row As Long
    Dim lastEnd As Double: lastEnd = 0.0

    ' set reference to your worksheet
    With ThisWorkbook.Worksheets("your sheet name")

        ' set column with title 'Item_Type' in Row 1
        For row = 1 To 20
            If Trim(CStr(.Cells(1, i).Value)) = "Item_Type" Then itemCol = i
        Next

        ' find last row of Item_Type column
        lastRow = .Cells(.Rows.Count, itemCol).End(xlUp).Row

        ' loop backwards thru rows
        For row = lastRow To 1 Step -1

            ' if cell contains word 'end'
            If InStr(LCase(CStr(.Cells(row, itemCol).Value)), "end") Then
                ' set our group value
                lastEnd = .Cells(row, itemCol+1).Value
            ' if lowercase(cell) = 'item group'
            ElseIf LCase(CStr(.Cells(row, itemCol).Value)) = "item group" Then
                ' put end value in the cell
                .Cells(row, itemCol+1).Value = lastEnd
            End If

        Next row

    End With

End Sub
Другие вопросы по тегам