我在Excel中设置了一个宏,它会获取一些粘贴的数据并将其解析为新的工作表。从那里开始,如果值存在,我希望在K列中的任何单元格中读取,如果是,则将第一张工作表上的值放入同一行但在Q列中。
有点混乱,我很抱歉。我试过了
If Range("K:K") <> "" Then
Range("Q:Q") = ("Input!R2C2")
End If
但是就像它读取的那样,它填充整个列Q的数据。我希望它只填写K列中存在值的数据。
答案 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