Excel / VBA / SQL Захватите значение из одной строки и обновите в другой - PullRequest
0 голосов
/ 20 ноября 2018

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

Я могу загрузить в SQL, если с ним проще работать или получить доступ.

enter image description here

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

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

1 Ответ

0 голосов
/ 20 ноября 2018

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

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

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

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
...