2012-05-17 64 views
0

我需要一個簡單的宏,它將列標題值添加到電子表格中的內容(最好是指定的值)。使用宏將標題添加到列數據中

所以如果可能的話,我想在VBA中指定列名(Col1 =「Location」),以便宏只應用於特定的列。

例如: 如果我指定了「位置」作爲宏查找的列標題,並且A1的「位置」作爲標題,那麼A中的所有內容都需要「位置:」添加到前面它。 基本上,無論標題是「:」。

所以這樣的:

Location 
A04B25 
A05B89 
B58C23 

會是這樣:

Location 
Location: A04B25 
Location: A05B89 
Location: B58C23 

此宏將需要循環每列和列標題值添加到值列IF這是在名單上。

這是我試圖使用未使用的代碼:

Sub AppendHeader() 
    Dim i, LastCol 

    LastCol = Range("IV1").End(xlToLeft).Column 

    For i = 1 To LastCol 
     If UCase(Cells(1, i).Value) = "Local SKU" Then 
      Cells(1, i).EntireColumn.Append = UCase(Cells(1, i).Value) + ": " 
     End If 

     If UCase(Cells(1, i).Value) = "Supplier's SKU" Then 
      Cells(1, i).EntireColumn.Append = UCase(Cells(1, i).Value) + ": " 
     End If 
    Next 
End Sub 
+0

Robert,如果您不介意,您是否可以編輯上述問題並在其中發佈代碼,因爲評論框不能正確格式化代碼。 –

回答

2

這是你正在嘗試什麼?

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim preString As String 
    Dim lastRow As Long, LastCol As Long, i As Long, j As Long 

    Set ws = Sheets("Sheet1") 

    With ws 
     LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column 

     For i = 1 To LastCol 
      Select Case Trim(UCase(Cells(1, i).Value)) 
      Case "LOCAL SKU", "SUPPLIER'S SKU" 
       lastRow = .Range(Split(Cells(, i).Address, "$")(1) & Rows.Count).End(xlUp).Row 

       preString = .Cells(1, i).Value & ": " 

       For j = 2 To lastRow 
        .Cells(j, i).Value = preString & .Cells(j, i).Value 
       Next j 
      End Select 
     Next i 
    End With 
End Sub 
+0

OP可能早就消失了,但我遇到了類似的問題,並找到了答案,所以+1。我也提出了我自己的方法。謝謝! – Zairja

+0

謝謝Zairja :) –

0

SO上有一個similar problem,但我想出了一個不同的VBA解決方案。它將根據該列的標題更改列的數字格式(標題行除外)。

要手動做到這一點,你可以選擇「自定義」類別設置單元格格式,並輸入

"Location: "General;"Location: "@ 

這將使「的位置:」在數字,文本,日期和這樣的前露面。任何應用於這些單元格的公式都會考慮前綴(Location:),但假設您只想使用這些值。使用這種方法,您可以輕鬆地刪除格式,而不是創建第二個子例程來刪除前綴。

該代碼修改了Siddharth的 - 謝謝,先生 - (我沒有明確聲明所有變量,因爲他有,但這是最佳實踐)。

Sub Sample2() 

Set ws = Sheets("Sheet1") 

    With ws 
     LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column 

     For i = 1 To LastCol 

      lastRow = .Range(Split(Cells(, i).Address, "$")(1) & Rows.Count).End(xlUp).Row 

      preString = .Cells(1, i).Value & ": " 

      Range(Cells(2, i), Cells(lastRow, i)).NumberFormat = _ 
       Chr(34) & preString & Chr(34) & "General;" & _ 
       Chr(34) & preString & Chr(34) & "@" 

     Next i 
    End With 

End Sub 
相關問題