首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过多个范围返回偏移值的VBA Excel 2016循环

通过多个范围返回偏移值的VBA Excel 2016循环
EN

Stack Overflow用户
提问于 2018-10-08 06:47:43
回答 1查看 1.3K关注 0票数 1

问题:

列K& L中有值,取决于单元格/s是否有一个值(数字),我想返回一个偏移值=RC[-4]

下面的工作很好:

K4有一个值,L4有一个值,什么都不做。

K5有一个值,L5没有一个值,value = =RC[-4]

当L被一个数字覆盖(这是允许的)时,我遇到了问题,但是当宏运行时,VBA仍然重写这个数字。例:

假设=RC[-4]等于20,如果K4有一个值,而L4是10,跳过这个单元格。当前,VBA将将L4中的值重写为20

从另一个角度看它:

如果K4 <>“和L4 =”,则"=RC-4“跳过/下一个单元格(K5/L5,K6/L6等)

这是我想要的成果,但我的研究和知识缺乏.

代码语言:javascript
复制
Sub AccrualValue3()   
    Dim rng As Range
    Dim Exrng As Range

    Last_Row = Range("H" & Rows.Count).End(xlUp).Row - 1

    Set rng = Range("K4:K" & Last_Row)
    Set Exrng = Range("L4:L" & Last_Row)

    For Each cell In rng
        If cell.Value <> "" Then
            For Each cell2 In Exrng
                If cell2.Value = "" Then
                    cell.Offset(0, 1).Value = "=RC[-4]"
                Else
                    cell.Offset(0, 1).Value = ""
                End If
            Next
        End If
    Next
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-08 07:13:11

只需计算行号就可以更容易地使用For … To循环。另外,您也不需要第二个循环。

代码语言:javascript
复制
Option Explicit

Sub AccrualValue3()
    Dim LastRow As Long
    LastRow = Range("H" & Rows.Count).End(xlUp).Row - 1

    Dim iRow As Long
    For iRow = 4 To LastRow
        If Cells(iRow, "K").Value <> "" And Cells(iRow, "L").Value = "" Then
            Cells(iRow, "L").Value = Cells(iRow, "L").Offset(ColumnOffset:=-4).Value
        End If
    Next iRow
End Sub

或者,您可以使用.SpecialCells(xlCellTypeBlanks)选择L列中的所有空单元格,并只检查这些单元格的列K。如果有许多行,这应该会更快,因为它只检查列L为空的行,而不是的每个行。

代码语言:javascript
复制
Sub AccrualValue3ALTERNATIVE()
    Dim LastRow As Long
    LastRow = Range("H" & Rows.Count).End(xlUp).Row - 1

    Dim EmptyCellsInColumnL As Range
    Set EmptyCellsInColumnL = Range("L4:L" & LastRow).SpecialCells(xlCellTypeBlanks)

    Dim Cell As Range
    For Each Cell In EmptyCellsInColumnL
        If Cell.Offset(ColumnOffset:=-1).Value <> "" Then
            Cell.Value = Cell.Offset(ColumnOffset:=-4).Value
        End If
    Next Cell
End Sub

注意,从最后使用的行中减去1

代码语言:javascript
复制
LastRow = Range("H" & Rows.Count).End(xlUp).Row - 1

未处理最后使用的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52696789

复制
相关文章

相似问题

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