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