excel-将单元格用引号引起来,除非value为NULL

时间:2018-09-20 17:29:46

标签: excel vba

我在excel中有一张表,最终将要读入sql数据库。我有\“ @ \”作为自定义代码,用引号将文本包装起来。但是,我也尝试将所有空白值都替换为NULL,但这些空白值也将引号引起来。

是否可以使用自定义代码将文本中除NULL以外的所有字符串包装起来?

1 个答案:

答案 0 :(得分:1)

经过大量研究(12345),发现自己对定制的功能印象深刻数字格式实际上具有数字格式,在我看来数字格式无法满足您的需求。

它无法将单元格的实际值与给定值(如"NULL")进行比较;它只能用于区分存储在单元格中的类型类型的值,无论它是以下值之一:POSITIVE; NEGATIVE; ZERO; TEXT

考虑到这一点,您可以使用VBA解决方案轻松完成此操作。由于我在猜测您的情况,因此这里有一些选择。

第一个选项不会自动更改单元格的数字格式,但是如果您不介意“手动”更新数字格式,则可以在下面运行此宏以强制其更新数字格式。

Option Explicit

Sub NumberFormatting()

    Dim rng As Range
    Set rng = Range("A1:B4")    'adjust range as necessary

    Dim cel As Range
    For Each cel In rng.Cells
        If cel.Value2 = "NULL" Then
            cel.NumberFormat = "@"
        Else
            cel.NumberFormat = "\""@\"""
        End If
    Next cel

End Sub

如果您希望数字格式自动更改,则可以将此代码放到工作表的模块中,并且每次在指定范围内更新单元格时,都会检查新值是否为"NULL"并更新数字在这种情况下格式化。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range
    Set rng = Range("A1:B4")    'adjust range as necessary

    If Not Intersect(Target, rng) Is Nothing Then
        If Target.Value2 = "NULL" Then
            Target.NumberFormat = "@"
        Else
            Target.NumberFormat = "\""@\"""
        End If
    End If

End Sub