使用excel中的vba宏将文本插入空行

时间:2015-08-28 07:45:28

标签: excel vba excel-vba

我有超过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
你能帮我解决一下吗?

2 个答案:

答案 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列,如下图所示,并向下复制所有行

enter image description here

当然,您可能只想拥有值,而不是群集列中的公式;然后,您可以通过复制然后粘贴为您已输入=VLOOKUP(...)公式后聚类列的值来将公式转换为值。

或者,例如,你已经定义了很多的clusternames并且只想处理clustername为空的行,你可以

  1. 过滤空白群集名称并仅在此处插入=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
    
  3. 就我个人而言,我根本不喜欢这种硬编码,我宁愿从表格中取出群集名称......所以对我来说,不需要编写代码,除非整个任务比描述复杂得多。