【问题标题】:Format a dynamic range of data to text将动态范围的数据格式化为文本
【发布时间】:2019-10-02 04:08:30
【问题描述】:

我正在尝试将一串数字转换为 9 位文本。每次运行时,列的长度都会有所不同。

尝试使用与查找 LastRow 类似的方法。

Sub Macro3()
'
Dim LastRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Data Validation")

Sheets("Data Validation").Select

Cells.Replace What:="-", Replacement:="", LookAt:=xlPart, SearchOrder:= _
    xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

LastRow = ws.Cells.find(What:="*", After:=ws.Cells(1, 1), 
LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, 
MatchCase:=False).Row

Set rng = Cells(LastRow, 15)

Range("O2").Select
ActiveCell.FormulaR1C1 = "=TEXT(RC[-4],""000000000"")"
Range("O2").Select
Selection.AutoFill Destination:=Range("O2:rng")


End Sub

我希望我的文本格式可以延伸到现有数字的整个列。目前我收到了 Object _Global 的 Method Range failed 错误消息。

【问题讨论】:

  • Range("O2:O" & LastRow).FormulaR1C1 = "=TEXT(RC[-4],""000000000"")" 不需要SelectAutoFill

标签: excel vba


【解决方案1】:

无需SelectAutoFill

更改以下内容:

Set rng = Cells(LastRow, 15)

Range("O2").Select
ActiveCell.FormulaR1C1 = "=TEXT(RC[-4],""000000000"")"
Range("O2").Select
Selection.AutoFill Destination:=Range("O2:rng")

ws.Range("O2:O" & LastRow).FormulaR1C1 = "=TEXT(RC[-4],""000000000"")"

避免FormulaR1C1是我自己的偏好:

ws.Range("O2:O" & LastRow).Formula = "=TEXT(K2,""000000000"")"

【讨论】:

  • 好答案。评估是否是一个很好的选择,可以包含在您的答案中并完全避免使用公式?
  • @JvdV 可能,只要 OP 实际上不需要公式。感觉有点懒......所以如果你添加我会投票:)
  • 哈哈,我连电脑都没有,评论就得做lol =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多