1

我是编程的新手,我想开发一个函数来修复 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。我确实意识到我不一定需要以编程方式执行此操作,因为使用已经可用的功能不需要那么长时间,但我最终想扩展它以修复其他更复杂的数据 - 我只是认为我可以从简单的事情开始。

提前谢谢了!

4

2 回答 2

3

它是空白的原因是 Cell 相当于整个列。你虽然很近。如果你这样做了...

For Each Cell In letterSalutationColumn.Cells

..l 它将循环通过每个单元格。

但是,它的编写方式会循环遍历整个列中的每个单元格,这可能会使 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)您指定它位于ws已设置为ActiveSheet.

于 2013-06-21T03:01:20.293 回答
3

另一种方法是 VBA 替代方案

  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
于 2013-06-21T03:07:42.823 回答