【问题标题】:excel - wrap cell in quotes unless value is NULLexcel - 将单元格括在引号中,除非值为 NULL
【发布时间】:2018-09-20 17:29:46
【问题描述】:

我在 excel 中有一个表,我最终要读入一个 sql 数据库。我有 \"@\" 作为自定义代码,用引号将文本换行。但是,我也尝试将所有空白值替换为 NULL,但它们也会被引号括起来。

是否有我可以使用的自定义代码将除 NULL 之外的每个字符串都包装在文本中?

【问题讨论】:

  • \"@\" 一个公式还是什么?我不确定我是否理解它是如何被使用的。另外,当您说要wrap every string ... in text 时,您的意思是用引号括起来吗?
  • 这是一个用于单元格格式的自定义代码。是的,我的意思是用引号括起来
  • 这像自定义数字格式吗?
  • 是的,自定义数字格式
  • 啊,好的,找到您当前使用的here。我正在环顾here,看看如何为您提供仍然使用数字格式的答案。但是,如果我不能,您是否反对 vba 解决方案?

标签: excel vba


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2011-02-03
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多