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
并处理返回“零”值的情况
此外请注意,上面的代码隐含地假设了当前活动的workbook
和worksheet
引用,如果您(或您的代码)使任何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()
函数