【问题标题】:Check if cells across is blank then hide a header vba检查跨过的单元格是否为空白,然后隐藏标题 vba
【发布时间】:2018-04-12 18:15:43
【问题描述】:

我在 excel 中有一些数据,其中 B 列中的标题和 C 列中的数据,从第 2 行开始。在第 15 行,它可能有也可能没有数值。我的任务是检查从单元格 C15 到最后一列的末尾,可能是 F15,也可能是 Z15,如果它们是空白,我可以删除 B15,即该行的标题。

现在,我不能只检查第 15 行中的所有值是否为空白,因为我在单元格 B15 中有标题。我得到每周数据,这就是最后一列不同的原因。

我需要的是,如果我在第 15 行有数据,但不一样,我保留我的标题 B15,如果我没有任何数据或者我有相同的数据。我想删除我的标题,B15。

我写了一些 vba 代码,但它没有产生期望的结果。

Sub test()
Dim LR3, z As Long
Dim ws As Worksheet

Set ws = Worksheets("wc")


 LR3 = ws.Cells(2, Columns.Count).End(xlToLeft).Column
 For z = 3 To LR3
    'start position
    If ws.Cells(15, z).Value = ws.Cells(15, z + 1).Value Then
        ws.Cells(15, 2).Value = ""
     End If
  Next z
 End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    我不太了解你的任务,但我试图修复你的循环。因为我认为您想从 c 列开始遍历最后一行,对吗?

    Option Explicit
    
    Sub test()
        Dim LC3, z As Long
        Dim ws As Worksheet
        Dim startColumn As Integer
        Dim checkRow As Integer
        Dim headerColumn As Integer
        Dim allTheSame As Boolean
        Dim allEmpty As Boolean
    
        Set ws = Worksheets("wc")
        LC3 = ws.Cells(ws.UsedRange.Rows.Count, 2).End(xlToRight).Column
        startColumn = 3
        checkRow = 15
        headerColumn = 2
    
    '    'if first column is blank delete the header
    '    If ws.Cells(checkRow, startColumn).Value = "" Then
    '        ws.Cells(checkRow, headerColumn).Value = ""
    '        Exit Sub
    '    End If
    '
        allTheSame = True
        allEmpty = True
    
        For z = startColumn To LC3
            'if any column is blank delete the header
    '        If ws.Cells(checkRow, z).Value = "" Then
    '            ws.Cells(checkRow, headerColumn).Value = ""
    '            'Exit For
    '        End If
            'if one is not the same delete header
    '        If z + 1 <= LC3 Then
    '            If ws.Cells(checkRow, z).Value <> ws.Cells(checkRow, z + 1).Value Then
    '                ws.Cells(checkRow, headerColumn).Value = ""
    '                Exit For
    '            End If
    '        End If
            'if any column is blank delete the header
            If ws.Cells(checkRow, z).Value <> "" Then
                allEmpty = False
                'Exit For
            End If
            'if all are the same, delete header
            If z + 1 <= LC3 Then
                If ws.Cells(checkRow, z).Value <> ws.Cells(checkRow, z + 1).Value Then
                    allTheSame = False
                End If
            End If
        Next z
        If allTheSame Or allEmpty Then
            ws.Cells(checkRow, headerColumn).Value = ""
        End If
    End Sub
    

    【讨论】:

    • 现在的问题是当我运行我的代码或你修改的代码时,无论我是否有数据(相同),我都会删除不正确的标题。
    • 那是因为你删除了带有 ws.Cells(15, 2).Value = "" 的标题...你想在循环中做什么?
    • 我只是想检查一下 c 列中第 15 行的单元格是否具有相同的值,如果是,我想删除标题....如果不是,我想保留它.
    • 所以你想在1.C15=D15=E15=F15=G15...时删除它?和 2. 一切都是空的
    • 现在,通过最后一次尝试,您的愿望应该会得到满足...说明不清楚 ^^
    【解决方案2】:
     If Application.Worksheetfunction.CountA("C" & z & ":Z" & z) = 0 then
    
    'Row z has no entries between C and Z
    

    【讨论】:

    • 谢谢,但它不起作用。当我从 C 列中没有任何内容时,我要删除的标题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多