将单元格的值复制到另一个单元格以记录车辆里程

时间:2013-02-08 02:53:02

标签: excel vba

我正在制作电子表格来记录车辆行驶里程。我想在F6中手动输入起始里程并在G6中结束里程。我想将G6的值自动复制到F7,然后在G7中输入结束里程,依此类推。我遇到的问题是处理周末和假日时可能会出现2或3个空白单元格。我尝试过使用类似=if(D9=""," ", G6)的内容,但这不起作用。

我也在VBA中试过这个功能:=IF(D9=""," ",LastNonBlankCell(G8:G39)) [D9是一个日期字段],结果只有0。

Function LastNonBlankCell(Range As Excel.Range) As Variant

    Application.Volatile

    LastNonBlankCell = Range.End(xlDown).Value

End Function

2 个答案:

答案 0 :(得分:0)

周末或假期真的需要空行吗?如果没有,请将D8设置为公式=workday.intl(D7,1),然后根据需要将其复制下来。如果您需要允许假期,请参阅WORKDAY.INTL的Excel文档。日期列表现在只包含工作日,因此一行的结束里程可以复制到下一行,无需特殊处理。

这让周末和假日一目了然。这可以使用条件格式来解决。设置范围D8:D<whatever>的格式,使用公式=D8>(D7+1),并将格式设置为适合您的格式。

答案 1 :(得分:0)

以下VBA宏将以与您询问的方式略有不同的方式实现您的最终目标。

安装宏后,当您双击G列中的单元格时,宏会将最后输入的结束里程复制到F列左侧的单元格中。

例如,如果最后的结束里程条目在单元格G6中,并且您在单元格G9中双击,则该条目将被复制到单元格F9。然后,您可以在单元格G9中输入新的结束里程。

  Private Sub WorkSheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

     If Not Application.Intersect(Target, Range("G:G")) Is Nothing Then
        Selection.Offset(0, -1).Value = Selection.End(xlUp).Value
     Else
        Exit Sub
     End If

  End Sub

要安装宏,请右键单击工作表的名称选项卡,选择“查看代码”,然后粘贴宏代码。如果将代码放入常规模块,它将无法工作。

相关问题