0

我要做的是在 Excel 中将金额从一行更新到另一行。它们没有任何组合键,但它们处于模式中。始终从项目组开始,大约 3-7 行之后是项目组的结尾。我想从项目组的末尾获取金额并更新项目组中的行,但始终是项目组,然后是项目组的末尾。

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

在此处输入图像描述

这就是问题。

这就是我要完成的工作: 在此处输入图像描述 在此更新之后,我想删除项目组之后的每一行,但只删除到项目组的末尾。

4

1 回答 1

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
于 2018-11-20T15:28:44.570 回答