【问题标题】:Excel If statements for UsedRange only?Excel If 语句仅适用于 UsedRange?
【发布时间】:2018-05-18 14:03:24
【问题描述】:

我在 Excel 中设置了一个宏,它获取一些粘贴的数据并将其解析到一个新工作表中。从那里,我希望它读取 K 列中的任何单元格中是否存在值,如果存在,则将我的第一张工作表上的值放在同一行但在 Q 列中。

有点混乱,对不起。我试过了

If Range("K:K") <> "" Then
   Range("Q:Q") = ("Input!R2C2")
End If

但就像它读取的那样,它填充整个 Q 列的数据。我希望它只填充 K 列中存在值的数据。

【问题讨论】:

    标签: vba excel if-statement


    【解决方案1】:

    “我希望它只填充 K 列中存在值的数据。”
    对于这些,您需要遍历行。

    Option Explicit
    
    Public Sub FillDataInQWhereValueInK()
    
        Dim LastRow As Long
        LastRow = Cells(Rows.Count, "K").End(xlUp).Row 'find last used row
    
        Dim iRow As Long
        For iRow = 1 To LastRow 'loop through all rows
            If Cells(iRow, "K") <> vbNullString Then 'check if K has a value
                Cells(iRow, "Q") = "Input!R2C2" 'write in Q if K has a value
                'here you can access any other cell in the row where K has a value
                'Cells(iRow, "A").Font.Color = vbRed
                'or access the complete row by
                'Rows(iRow)
            End If
        Next iRow
    End Sub
    

    【讨论】:

    • 感谢大家的快速回复,这个工作完美!
    • 现在,如果我希望它同时检查 K 并且如果它已填充,则将颜色格式应用于与数据在同一行的 A 列和 B 列中的单元格,我可以重写循环也应用颜色格式,还是对 if 语句的补充?
    • @Fuster 我添加了一个示例,在该示例中为满足If 标准的行放置其他格式等。
    • 啊,我不知道你可以在 if 行中添加额外的语句。你今天让我学到了新东西!非常感谢您的帮助,一切正常。
    【解决方案2】:
    Public Sub TestMe()
        Debug.Print WorksheetFunction.CountA(Range("K:K"))
    End Sub
    

    这将打印0,如果它没有被使用,任何高于0,如果它被使用。所以你可以用它来做这样的事情:

    Public Sub TestMe()
        If WorksheetFunction.CountA(Range("K:K")) Then 'if any value is present
            Range("Q:Q") = 1
        Else
            Range("Q:Q") = 0
        End If
    End Sub
    

    但是,就您提到的“我希望它只填充 K 列中存在值的数据”而言,您可以仅循环遍历其中包含值的单元格并将“某事”6 列写入对:

    Public Sub TestMe()
    
        Dim myCell As Range
    
        For Each myCell In Range("K:K").SpecialCells(xlCellTypeConstants)
            myCell.Offset(0, 6) = "Something"
        Next myCell
    
    End Sub
    

    仅当Range("K:K") 中有非公式值时,上述解决方案才有效。如果你有公式,它对它们不起作用,如果你没有任何东西,它会返回一个错误。因此,从最后一个单元格循环到第一个单元格并检查单元格是否为空可能是一个更好的主意 - https://stackoverflow.com/a/50395958/5448626

    【讨论】:

      【解决方案3】:

      我会使用counta 函数,它只计算一个范围内填充的所有单元格。如果它等于 0,则不填充任何单元格。如果填充一个或多个单元格,它将大于零。

      If Application.WorksheetFunction.CountA(Range("K:K")) > 0 Then
         Range("Q:Q") = ("Input!R2C2")
      End If
      

      【讨论】:

        【解决方案4】:

        这将找到您最后使用的行,然后在 K 上运行一个循环并在 Col Q 上的同一行添加一个值。您应该能够修改它以实现您的目标。请注意,您必须进行更改以引用不同的工作表(更改我拥有的工作表名称)。此外,如果您有标题,则需要将其更改为从

        开始
         i = 2 to Lrow 
        

        选项显式

        Sub Add()
        
        
        Dim LRow As Long
        Dim WB As Workbook
        Set WB = ThisWorkbook
        Dim i As Integer
        
        LRow = WB.Sheets("Sheet1").UsedRange.Rows.Count
        
        For i = 1 To LRow
        If WB.Sheets("Sheet1").Range("K" & i) <> "" Then
            WB.Sheets("Sheet1").Range("Q" & i) = ("Add Input Here")
                End If
        Next i
        
        End Sub
        

        【讨论】:

          猜你喜欢
          • 2018-10-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-26
          • 2023-03-08
          • 2019-07-08
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          相关资源
          最近更新 更多