0

我需要一个简单的宏,它将列标题值添加到电子表格列中的内容(最好是指定的值)。

因此,如果可能的话,我想在 VBA (Col1="Location") 中指定列名,以便宏仅应用于特定列。

示例:如果我已将“位置”指定为宏应查找的列标题,并且 A1 将“位置”作为标题,那么 A 中的所有内容都需要,“位置:”添加到它的前面。基本上,无论标题是+“:”。

所以这:

Location
A04B25
A05B89
B58C23

会是这样的:

Location
Location: A04B25
Location: A05B89
Location: B58C23

该宏需要循环遍历每一列并将列标题值添加到列中的值(如果它在列表中)。

这是我尝试使用但不起作用的代码:

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
4

2 回答 2

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
于 2012-05-17T18:59:37.927 回答
0

SO上有一个类似的问题,但我想出了一个不同的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
于 2012-07-25T20:23:59.887 回答