0

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

我也在 VBA 中尝试过这个功能: =IF(D9=""," ",LastNonBlankCell(G8:G39))[D9 is a datefield] 并且只以 0 结尾。

Function LastNonBlankCell(Range As Excel.Range) As Variant

    Application.Volatile

    LastNonBlankCell = Range.End(xlDown).Value

End Function
4

2 回答 2

0

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

这使得周末和节假日更难一目了然。这可以使用条件格式来解决。为范围设置格式D8:D<whatever>,使用公式=D8>(D7+1),并将格式设置为对您来说最突出的格式。

于 2013-02-08T03:35:16.100 回答
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

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

于 2013-02-08T19:05:09.333 回答