我有超过5000行和10列的数据。我想根据列条件向行添加文本。
A B C D
fname lname state clustername
1. ram giri NCE ...
2. philips sohia MAD ...
3. harish Gabari NCE ....
根据列状态,对于NCE,群集名称为" nce.net"必须分配到D列(clustername),MAD也是" muc.net"被分配到第2行。
你可以帮帮我吗。这是我的代码:
dim emptyrow as string
row_number = 1
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
state = sheets("sheet1").rows("C" & row_number)
for each cell in selection
if instr(state, "NCE") = true then
Range(Cells(emptyrow, "D").Value = Array("nce.net")
end if
next emptyrow
你能帮我解决一下吗?
答案 0 :(得分:1)
为什么不是一个简单的公式
在D1
并向下复制
=IF(C1="NCE","nce.net",IF(C1="MAD","muc.net","No match"))
使用代码
执行相同的操作Sub Simple()
Dim rng1 As Range
Set rng1 = Range([c1], Cells(Rows.Count, "C").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IF(RC[-1]=""NCE"",""nce.net"",IF(RC[-1]=""MAD"",""muc.net"",""No match""))"
.Value = .Value
End With
End Sub
答案 1 :(得分:1)
您可以在单独的工作表中创建由唯一状态和clustername组成的引用表,然后使用=VLOOKUP()
函数将clustername拉入原始工作表...前提是状态和状态之间存在1:1关系集群...甚至多个状态的1个集群也可以工作。这样就可以避免硬编码,如果群集名称发生变化,您可以快速做出反应。
示例:强>
Sheet2中的列出了所有国家/地区及其关联的群集名称 在Sheet1中输入= VLOOKUP(...)进入第一行的clustername列,如下图所示,并向下复制所有行
当然,您可能只想拥有值,而不是群集列中的公式;然后,您可以通过复制然后粘贴为您已输入=VLOOKUP(...)
公式后聚类列的值来将公式转换为值。
或者,例如,你已经定义了很多的clusternames并且只想处理clustername为空的行,你可以
=VLOOKUP(...)
使用一小段代码
Sub DoCluster()
Dim R As Range, S As Integer, C As Integer, Idx As Integer
Set R = ActiveSheet.[A2] ' top left cell of table
S = 3 ' column index of State column
C = 4 ' column index of Clustername column
Idx = 1 ' start at 1st row within range
' run a loop across all rows, stop if 1st column gets blank
Do While R(Idx, 1) <> ""
' work only on rows wher cluster not yet set
If R(Idx, C) = "" Then
' now this isn't really good ... try to avoid hardcoding BY ANY MEANS
Select Case R(Idx, 3)
Case "NCE"
R(Idx, 4) = "nce.net"
Case "MAD"
R(Idx, 4) = "muc.net"
' insert other cases here as per need
' ...
' trap undefined cases
Case Else
R(Idx, 4) = "undefined"
End Select
End If
Idx = Idx + 1
Loop
End Sub
就我个人而言,我根本不喜欢这种硬编码,我宁愿从表格中取出群集名称......所以对我来说,不需要编写代码,除非整个任务比描述复杂得多。