首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel/VBA/SQL从一行抓取值,在另一行更新

Excel/VBA/SQL从一行抓取值,在另一行更新
EN

Stack Overflow用户
提问于 2018-11-20 23:02:32
回答 1查看 59关注 0票数 0

我要做的是在Excel中将金额从一行更新到另一行。它们没有任何组合的键,但它们是在模式中。始终以Item Group开头,在Item Group结束后约3-7行。我想从物料组的末尾获取金额并更新物料组中的行,但始终物料组将是第一个,然后是物料组的末尾。

我可以上传到SQL,如果它更容易处理或访问。

这就是问题所在。

这就是我想要完成的:

在这次更新之后,我想删除项目组之后的每一行,但只删除到项目组的末尾。

EN

回答 1

Stack Overflow用户

发布于 2018-11-20 23:28:45

所以基本上,如果你还没有开发者标签,你需要去选项>自定义功能区>点击‘开发者’

然后单击开发人员选项卡上的VB编辑器,在项目区域中单击鼠标右键并选择“插入新模块”。在新模块中,插入以下代码并保存。

为了使其易于运行,您可以进入Developer选项卡> Insert > Button。然后右键单击该按钮,并将其分配给刚刚创建的宏,以便每次要更新项目组值时,都可以单击该按钮。如果按钮不允许您“指定宏”,那么您可能插入了错误类型的按钮。

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53395832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档