2013-06-21 87 views
1

我是編程的新手,我想在一個函數中修復excel文件中的稱呼。如何將列中的文本連接到新列? 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。我不知道我不一定需要以編程方式進行此操作,因爲它不需要很長時間就可以使用已有的功能,但我最終希望擴展此功能以更復雜地修復其他數據 - 只是認爲我可以從某些東西開始簡單。

非常感謝提前!

回答

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)你指定,它在ws,已設置爲ActiveSheet

+0

+1爲您的建議的代碼改進 – brettdj

+0

大謝謝您的有用答案和提示! – JackReacher

3

的另一種方式是

  1. 所述VBA替代使用在列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 
+1

感謝您的編輯和額外建議! – JackReacher