允许我输入公式但将值存储为文本的数字格式?
Numberformat that allows me to enter formulas but stores values as text?
是否可以使用 Excel 或 VBA 在 cell/column 中设置数字格式,以便:
- 如果我输入公式(任何以 = 开头的内容)Excel 将计算公式(而不是将其解释为纯文本)
- 如果我输入一个值,例如 5.80,Excel 会将其存储为文本吗?
我遇到了一个问题,我希望将所有用户输入存储为文本,但用户也应该能够输入公式。如果我将数字格式设置为文本,则不会解释公式。如果我将数字格式设置为常规,值将存储为数字。
即使单元格格式设置为常规,您也可以通过在数字开头附加单引号来强制 Excel 将数字解释为字符串:
ActiveSheet.Cells(1, 1).Value = "'5.80"
'...or...
ActiveSheet.Cells(2, 1).Value = "'" & Format$(58 / 10, "#.00")
Easy........将单元格预格式化为 Text,然后有一个 Event 宏监视单元格并将格式更改为 General(如果输入了公式);然后强制执行公式。例如单元格 B9:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim B9 As Range
Set B9 = Range("B9")
If Intersect(Target, B9) Is Nothing Then Exit Sub
Application.EnableEvents = False
With B9
If Left(.Value, 1) = "=" Then
.NumberFormat = "General"
.Value = .Value
Else
.NumberFormat = "@"
End If
End With
Application.EnableEvents = True
End Sub
条件格式
突出显示您想要影响的范围并单击条件格式。应用如下图。您想要将不包含文本“=”的单元格格式化为 "text".
这是我的版本。
将 sheet 中的所有单元格格式化为 Text
。此代码使用 Application.Evaluate()
计算所有公式并将结果存储为文本。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aCell As Range
On Error GoTo Whoa
Application.EnableEvents = False
'~~> You need this in case user copies formula
'~~> from another sheet
Target.Cells.NumberFormat = "@"
'~~> Looping though all the cells in case user
'~~> copies formula from another sheet
For Each aCell In Target.Cells
If Left(aCell.Formula, 1) = "=" Then _
aCell.Value = Application.Evaluate(aCell.Formula)
Next
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
是否可以使用 Excel 或 VBA 在 cell/column 中设置数字格式,以便:
- 如果我输入公式(任何以 = 开头的内容)Excel 将计算公式(而不是将其解释为纯文本)
- 如果我输入一个值,例如 5.80,Excel 会将其存储为文本吗?
我遇到了一个问题,我希望将所有用户输入存储为文本,但用户也应该能够输入公式。如果我将数字格式设置为文本,则不会解释公式。如果我将数字格式设置为常规,值将存储为数字。
即使单元格格式设置为常规,您也可以通过在数字开头附加单引号来强制 Excel 将数字解释为字符串:
ActiveSheet.Cells(1, 1).Value = "'5.80"
'...or...
ActiveSheet.Cells(2, 1).Value = "'" & Format$(58 / 10, "#.00")
Easy........将单元格预格式化为 Text,然后有一个 Event 宏监视单元格并将格式更改为 General(如果输入了公式);然后强制执行公式。例如单元格 B9:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim B9 As Range
Set B9 = Range("B9")
If Intersect(Target, B9) Is Nothing Then Exit Sub
Application.EnableEvents = False
With B9
If Left(.Value, 1) = "=" Then
.NumberFormat = "General"
.Value = .Value
Else
.NumberFormat = "@"
End If
End With
Application.EnableEvents = True
End Sub
条件格式
突出显示您想要影响的范围并单击条件格式。应用如下图。您想要将不包含文本“=”的单元格格式化为 "text".
这是我的版本。
将 sheet 中的所有单元格格式化为 Text
。此代码使用 Application.Evaluate()
计算所有公式并将结果存储为文本。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aCell As Range
On Error GoTo Whoa
Application.EnableEvents = False
'~~> You need this in case user copies formula
'~~> from another sheet
Target.Cells.NumberFormat = "@"
'~~> Looping though all the cells in case user
'~~> copies formula from another sheet
For Each aCell In Target.Cells
If Left(aCell.Formula, 1) = "=" Then _
aCell.Value = Application.Evaluate(aCell.Formula)
Next
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub