0

スプレッドシートの列の内容 (できれば指定された値) に列ヘッダーの値を追加する単純なマクロが必要です。

可能であれば、マクロが特定の列にのみ適用されるように、VBA (Col1="Location") で列名を指定したいと思います。

例: マクロが検索する必要がある列ヘッダーとして "Location" を指定し、A1 のヘッダーとして "Location" が指定されている場合、A のすべてに "Location: " を先頭に追加する必要があります。基本的に、ヘッダーは + ": " です。

したがって、この:

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: " が表示されます。これらのセルに数式を適用すると、プレフィックス ( ) が考慮されますがLocation:、値だけを操作したいとします。この方法を使用すると、2 番目のサブルーチンを作成してプレフィックスを削除するのではなく、フォーマットを簡単に削除できます。

コードは 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 に答える