【发布时间】:2021-11-21 17:16:24
【问题描述】:
我有一个很简单的问题。
我有一些可以在 Excel 中轻松转换的单元格,但我找不到在 VBA 中转换的简单方法。
单元格包含格式为 35,00 的数字,并且表现得像数字(我可以添加它们)。但不认为与数字格式 35 相同。
如果我单击单元格,它们将转换为 35 格式,因此被视为这样。
为什么重要?
因为我正在使用代码Cells(WorksheetFunction.Match(r.Offset(, -4), Sheets(4).Range("I3:I50"), 0) + 2, 9)。如果格式为 35,则代码运行良好,但如果格式为 35,00,则代码不起作用。
这是我尝试将 35,00 转换为 35 的内容。
什么在 Excel 中不起作用:
- 更改格式(标准或数字)
- 复制/粘贴
Excel 中的工作原理:
- 双击单元格并离开
- 不复制任何内容并将其添加到单元格中
- 将“,”替换为“,”
什么在 VBA 中不起作用:
1)
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
Range("A3").Calculate
With Selection
.NumberFormat = "General"
.Value = .Value
End With
-
有选择 .NumberFormat = "0" .Value = .Value 结束于
Range("I1:I40") = Range("I1:I40").Value
Range("I2").Select
Application.CutCopyMode = False
Selection.Copy
Range("G:I").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _
False, Transpose:=False
Columns("D:F").Select
Selection.Replace What:=",", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
什么在 VBA 中起作用:
1.
Selection = CLng(Selection) '-- work only for 1 cell
为了让它发挥作用,我会做一个 For Each ,它对我需要的东西来说有点太多了。有没有办法一次转换范围?
奇怪的是,当我在 Excel 中修复问题时录制宏(例如将“,”替换为“,”),生成的 VBA 代码不起作用。
这是一个不屈不挠的示例文件:
【问题讨论】: