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

我是新来的VBA编程,我想在一个函数来修复在Excel文件中的称呼。

首先,我只想在第一列中添加一个“ Dear”字样 ,并将这个值放在下一列中,这样我就可以在第一列中input名字,在下一个名字中input“Dear name”柱。

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

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。 我意识到,我不一定需要以编程的方式来做这件事,因为不需要太长的时间来处理已经可用的函数,但是我最终希望扩展这个来修复其他更复杂的数据 – 并且认为我可以从简单的事情开始。

提前谢谢了!

它是空白的原因是单元相当于整个列。 你虽然接近。 如果你做到了…

 For Each Cell In letterSalutationColumn.Cells 

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

然而,它写的方式,会遍历整个列中的每个单元格,这可能会导致Excel崩溃,或者至less会减慢速度。

这是你正在尝试做的一个重做版本。 它仅作用于列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 

它还声明了所有的variables,你想要习惯做的事情。 在Option Explicit进行search,学习如何强制自己。

它还使用With语句来完全限定Object引用,所以不是只引用Column(1)Range(something) ,而是指定它位于已设置为ActiveSheet ws

另一种方法是VBA的替代scheme

  1. 使用列B中的公式对列A的已用部分进行连接(即在B1 ="Dear " &A1等中)
  2. 该公式然后被复制作为一个值来删除公式

 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