如何将列中的文本连接到新列? VBA Excel

时间:2013-06-21 02:11:13

标签: excel excel-vba vba

我是编程的新手,我想开发一个函数来修复excel文件中的问号。

首先,我只想将亲爱的“附加到第一列中的名称,并将此值放在下一列中,这样我最终会得到名称。第一列和下一栏中的“亲爱的名字”。

我到目前为止的功能是将“亲爱的”放在下一列中,但它不会将其附加到第一列中的文本。有人可以帮我纠正我的代码吗?

Sub letterSalutationFixer()

      Dim letterSalutationColumn As Range
      Set letterSalutationColumn = Columns(1)

       For Each Cell In letterSalutationColumn
            Cell.Offset(, 1).Value = "Dear " & Cell.Text    
      Next

    End Sub

PS。我确实意识到我不一定需要以编程方式执行此操作,因为它对已经可用的函数花费的时间不长,但我最终希望扩展它以更复杂地修复其他数据 - 并且我认为我可以从简单的事情开始。

非常感谢提前!

2 个答案:

答案 0 :(得分:3)

空白的原因是Cell等同于整个列。你虽然关闭了。如果你做了......

For Each Cell In letterSalutationColumn.Cells

..它会循环通过每个细胞。

但是,按照它编写的方式,它会遍历整个列中的每个单元格,这可能会导致Excel崩溃,或者至少会减慢速度。

这是您尝试做的重写版本。它仅作用于A列中的单元格,其内容为:

Sub Salutation()
Dim ws As Excel.Worksheet
Dim LastRow As Long
Dim NameRange As Excel.Range
Dim cell As Excel.Range

Set ws = ActiveSheet
With ws
    LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
    Set NameRange = .Range("A2:A" & LastRow)
    For Each cell In NameRange
        cell.Offset(, 1) = "Dear " & cell.Text
    Next cell
End With
End Sub

它还声明了所有变量,这是你想要做的事情。在Option Explicit上搜索以了解如何强迫自己。

它还使用With语句来完全限定Object引用,因此您不必仅仅引用Column(1)Range(something),而是指定它&# 39;在ws中,已设置为ActiveSheet

答案 1 :(得分:3)

另一种方式是

的VBA替代方案
  1. 使用B列中针对A列使用部分运行连接的公式(即B1 ="Dear " &A1等)
  2. 然后将公式复制为一个值以删除公式
  3. <强>码

    Sub QuickCon()
    Dim rng1 As Range
    Set rng1 = Range([a1], Cells(Rows.Count, "A").End(xlUp))
    With rng1.Offset(0, 1)
    .FormulaR1C1 = "=""Dear "" &RC[-1]"
    .Value = .Value
    End With
    End Sub