Excel仅用于UsedRange的语句?

时间:2018-05-17 15:54:48

标签: excel vba excel-vba if-statement

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

有点混乱,我很抱歉。我试过了

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

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

4 个答案:

答案 0 :(得分:1)

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 。所以你可以用它来做这样的事情:

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

但是,就你所提到的而言,我只希望它填写K列中存在值的数据。&#34;,你只能通过其中带有值的单元格循环并写入& #34;东西&#34;右侧6列:

Range("K:K")

只有在coef(summary(mod2))[1L + which(colSums(attr(terms(mod2), "factors")[,attr(model.matrix(mod2), "assign")[-1L]]) == 2L),] ## Estimate Std. Error t value Pr(>|t|) ## cyl2Cyl: 4:factor(am)1 -3.733333 3.094784 -1.206331 0.2385526 ## cyl2Cyl: 8:factor(am)1 -4.825000 3.094784 -1.559075 0.1310693 中有非公式值时,上述解决方案才有效。如果您有公式,它将不适用于它们,如果您没有任何东西,它将返回错误。因此,从最后一个单元循环到第一个单元格可能是一个更好的主意,并检查单元格是否为空或者不是这样 - https://stackoverflow.com/a/50395958/5448626

答案 1 :(得分:1)

&#34;我希望它只填写K列中存在值的数据。&#34;
对于你需要循环遍历行。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这将找到您上次使用的行,然后运行循环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