我需要一个简单的宏,它将列标题值添加到电子表格列中的内容中(最好是指定的值)。
因此,如果可能,我想在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 :(得分: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
答案 1 :(得分: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