一行中的Excel / VBA / SQL Grab值,另一行中的更新

时间:2018-11-20 15:02:32

标签: excel line itemgroup

我想做的是在Excel中将一行中的金额更新为另一行。他们没有任何组合的钥匙,但是它们是有规律的。始终从项目组开始,大约在项目组结束后3至7行。我想从“项目组结束”中获取金额并更新“项目组”中的行,但始终“项目组”将是第一个,然后是“项目组结束”。

如果更易于使用或访问,我可以上载到SQL。

enter image description here

这是问题所在。

这是我要完成的工作: enter image description here 更新之后,我想删除项目组之后的每一行,但只删除项目组末尾的所有行。

1 个答案:

答案 0 :(得分:0)

因此,基本上,如果您还没有开发人员标签,则需要转到选项>自定义功能区>单击“开发人员”

然后在“开发人员”选项卡上单击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