在excel中使用vbamacros插入文本到空白行

我有超过5000行和10列的数据。 我想根据列条件向行添加文本。

ABCD 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 

你能帮我一下吗?

为什么不是简单的公式

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 

您可以在独立的工作表中创build一个由唯一状态和clustername组成的参考表,然后使用=VLOOKUP()函数将集群名称拉入您的原始表单中…只要状态和集群之间存在1:1的关系…即使是一个群集多个国家将工作。 这样你可以避免硬编码,如果集群名称改变,你可以迅速做出反应。

例:

在Sheet2中列出所有国家及其在Sheet1中相关的clusternamesinput= VLOOKUP(…)到clustername列的第一行,如下图所示,并复制所有行

在这里输入图像说明

当然,你可能想要只有值,而不是你的群集列中的公式; 那么你可以通过复制,然后粘贴为input=VLOOKUP(...)公式后列集群值将公式转换为值。

另外,如果你有很多clusternames已经定义了,只想在clustername为空的行上工作,你可以

  1. 过滤空白clusternames并仅在那里插入=VLOOKUP(...)
  2. 使用一小段代码

     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 

就我个人而言,我根本不喜欢这种硬编码,我宁愿从桌子上取集群名字…所以对我来说,除非整个任务比描述的复杂得多,否则不需要编写代码。