我是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。我确实意识到我不一定需要以编程方式执行此操作,因为它对已经可用的函数花费的时间不长,但我最终希望扩展它以更复杂地修复其他数据 - 并且我认为我可以从简单的事情开始。
非常感谢提前!
答案 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替代方案B1
="Dear " &A1
等)<强>码强>
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