Excel VBA如何设置公式使用最后一行逻辑

案例:我在列D和E中插入了一个新的列名(Date)和(Time)。但由于D和E中没有数据,所以我不能定义列D和E中的最后一个低位。

我想要做的事情:列C 1/8/2016 8:24:08

我想要得到date1/8/2016到D列和时间8:24:08到E列。我find了一些关于如何find最后一行或最后一列的信息。 但是我还是不明白如何去解决这个问题。让vba知道最后一行。 可以请某人能帮助我知道,我怎么需要定义它。 谢谢。

LastColumn = ?? Range("D2:D" & LastColumn).Formula = "=LEFT(C2,(FIND("" "",C2,1)-1))" 

我的excel页面

至于你的具体问题

由于在“C”列中已经有了“完整的” date ,因此只需使用TEXT()函数将其parsing为想要的部分,如下所示:

.FormulaR1C1 = "=TEXT(RC3,""gg/m/aaaa"")"

.FormulaR1C1 = "=TEXT(RC3,""hh:mm:ss"")"

你也可以使用的地方。 FormulaR1C1属性采用R1C1风格的地址表示法,对于当前目的而言更加有用,可以让您编写RC3并在您写公式的同一行中引用列“3”(即列“C”)单元格


至于lastRow问题

要获得给定列中的最后一个非空单元格,您可以这样写:

 lastRow = Cells(Rows.Count, "C").End(xlUp)).Row '<--| get column "C" last non empty cell row 

但请注意,如果给定的列是空的,那么它将返回1 ,就好像第1行中的单元格不是空的。 所以你可能想添加一个像下面这样的检查:

 lastRow = Cells(Rows.Count, "C").End(xlUp)).Row '<--| get column "C" last non empty cell row If .Cells(GetLastRow, "C") = "" Then lastRow = 0 '<--| return 0 if empty column 

并处理返回“零”值的情况

此外请注意,上面的代码隐含地假设了当前活动的workbookworksheet引用,如果您(或您的代码)使任何worksheet / workbook “跳跃”,这通常是不安全的。

所以你最好添加如下的显式worksheet (和workbook )引用:

 lastRow = Workbooks("MyWorkbookname").Worksheets("MyWorksheetName").Cells(Workbooks("MyWorkbookname").Worksheets("MyWorksheetName").Rows.Count, "C").End(xlUp)).Row '<--| get column "C" last non empty cell row If Workbooks("MyWorkbookname").Worksheets("MyWorksheetName").Cells(GetLastRow, "C") = "" Then lastRow = 0 '<--| return 0 if empty column 

您必须在每个范围参考中限定这些workbook / worksheet参考

现在,您可以利用With关键字来减轻键入所有爵士乐的负担,并使代码更具可读性和可维护性,如下所示:

 With Workbooks("MyWorkbookname").Worksheets("MyWorksheetName") lastRow = .Cells(.Rows.Count, colIndex).End(xlUp).row If .Cells(lastRow, colIndex) = "" Then lastRow = 0 End With 

这样你才能最终input你的下面的GetLastRow()函数:

 Function GetLastRow(sht As Worksheet, colIndex As Long) As Long With sht '<--| refer to the passed worksheet GetLastRow = .Cells(.Rows.Count, colIndex).End(xlUp).row '<--| get its passed column last non empty cell If .Cells(GetLastRow, colIndex) = "" Then GetLastRow = 0 '<--| check for empty column End With End Function 

把它们放在一起,你可能会想到下面的代码

 Sub main() With Workbooks("MyWorkbookName").Worksheets("MyData") '<--| refer to your worksheet (change "MyData" to your actual sheet name) With .Range("C1", .Cells(.Rows.Count, "C").End(xlUp)) '<--| refer to its column "C" range from row 1 down to last non empty cell .Offset(, 1).FormulaR1C1 = "=TEXT(RC3,""gg/m/aaaa"")" '<-- write date in column "C" .Offset(, 2).FormulaR1C1 = "=TEXT(RC3,""hh:mm:ss"")" ' <-- write hour in column "C" With .Offset(, 1).Resize(, 2) .value = .value End With End With End With End Sub 

你可能想要改变它并使用GetLastRow()函数