我需要创建一个公式,将三个不同的单元格连接成一个日期。该公式将成为循环函数的一部分,因此我需要在循环函数运行时更改单元格引用。
我在区分“部分”和“单元格引用”所必需的语法时遇到麻烦,例如“&”和“””。
现在,我只是试图将公式粘贴到没有循环的单个单元格中。我要合并的3个单元格在N,O和P列中。我正在尝试将公式粘贴到M列中。
我尝试在单独的“数据”选项卡上创建公式,然后使用VBA将其复制并粘贴到每个单元格中,但是行号不会根据粘贴公式的行而更新。
我尝试将&和“”重新排列了一段时间,但无法确定获胜组合。
FormulaRow = Cells(Rows.Count, "M").End(xlUp).Offset(1).Row
M_Formula = "=N" & FormulaRow & "" / "" & "O" & FormulaRow & "" / "" & "P" & FormulaRow
Range("M" & FormulaRow).Value = M_Formula
我希望得到以下结果:= N5&“ /”&O5&“ /”&P5,其行号与粘贴公式的行相对应。
当我尝试复制和粘贴方法时,出现以下消息:“对象不支持此属性或方法”
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
当您一次执行范围操作时,Excel足够聪明,可以增加行引用:
Range("M5:M" & Range("N" & rows.count).end(xlup).row).formula = "=N5 & ""/"" & O5 & ""/"" & P5"
那将在1行中完成您想要的操作。
然后,您可以复制结果,将其粘贴为值,然后使用以下格式格式化为日期:
Sub EnterDate()
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = "=N5 & ""/"" & O5 & ""/"" & P5"
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Copy
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteValues
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).NumberFormat = "DD/MM/YYYY"
'Force a reevaluate to make it see actual dates
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Value
End Sub
使用这种方法,我刚刚对12,000多行进行了测试,并且花费了不到一秒钟的时间。
关于使用date函数的注释,使用date函数是一种更好的方法,我想向您展示如何使用自己的方法来做,但是如果您使用Date,则可以摆脱格式代码像这样:
Sub EnterDate()
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Formula = "=DATE(P5,O5,N5)"
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).Copy
Range("M5:M" & Range("N" & Rows.Count).End(xlUp).Row).PasteSpecial xlPasteValues
End Sub
如果要保留公式,则只需删除其中的最后两行。
答案 1 :(得分:0)
也许:
Sub sub1()
' If you have 12 in N2 and 34 in O2 and 5678 in P2:
Dim FormulaRow&, M_Formula$
FormulaRow = 2
M_Formula = "=N" & FormulaRow & "&" & """" & "/" & """" & "&" & _
"O" & FormulaRow & "&" & """" & "/" & """" & "&" & _
"P" & FormulaRow
Cells(FormulaRow, ColNum("M")) = M_Formula ' gives the formula you want 12/34/5678
Cells(FormulaRow, 13) = M_Formula ' also gives the formula you want 12/34/5678
End Sub
Function ColNum&(col$)
ColNum = Range(col & 1).Column
End Function