【问题标题】:VBA: Issue with checking if next cell is emptyVBA:检查下一个单元格是否为空的问题
【发布时间】:2019-07-09 18:52:37
【问题描述】:

我正在阅读一些这样组织的数据: (解释 | 细胞分裂) 属性 |价值 |单位 | [空] |属性 |价值 |单位 | [空的]... 我将这些数据放入一个集合中,然后在 Sub 的末尾打印该集合。

一些背景: 并不总是有单位,但如果它们存在,我希望它们连接到值。 也不总是有值,发生这种情况时我想跳到下一个属性,而不是记录没有值的属性。

Dim coll As New Collection
While j <= FinalColumn
    'Check if the attribute actually has a value
    If Len(Cells(row, (j + 1)).Value) <> 0 Then
        coll.Add Cells(row, j).Value 'add attribute

        Dim val As Variant
        If Len(Cells(row, (j + 2)).Value) <> 0 Then
            val = Cells(row, (j + 1)).Value & " " & Cells(row, j + 2).Value 'add value with units
        Else
            val = Cells(row, (j + 1)).Value 'add just the value if there are no units
        End If

        coll.Add val 'add value to collection
    End If
    j = j + 4 'move on to next attribute
Wend

我希望打印出来的线条是这样的:

[属性]

[价值]

[属性]

[价值]

...

但相反,我得到的是这样的:

[属性]

[价值]

[属性]

(空格)

[属性]

[价值]

(空格)

[属性]

...

注意到空格了吗?当值不存在时,它看起来与向集合中添加一些东西有关,但我无法弄清楚我哪里出错了。

【问题讨论】:

  • j = j + 4 不应该是j = j + 2,因为你的属性是 2 分开的?
  • @Cyril 电子表格中的属性相隔 4 个单元格(请参阅帖子顶部的 | |)

标签: excel vba


【解决方案1】:

在检查条目时包含Trim() 总是一个好主意:

Dim coll As New Collection, v , u, ws As Worksheet

Set ws = ActiveSheet

While j <= FinalColumn
    v = Trim(ws.Cells(row, j + 1).Value)
    u = Trim(ws.Cells(row, j + 2).Value)
    'Check if the attribute actually has a value/unit
    If Len(v) > 0 Then
        coll.Add ws.Cells(row, j).Value 'add attribute
        If Len(u) > 0 Then v = v & " " & u
        coll.Add v 'add value to collection
    End If

    j = j + 4 'move on to next attribute
Wend

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多