1

if関数を使用するマクロがあります。結果(1または0)を指定された列に配置します。ただし、列名の名前を指定したいと思います。if関数を実行し、ヘッダーが「値」と呼ばれる列に値を持ってくるとしましょう。以下に元のコードを示します。

Sub bbb()
Dim FormulaCol As Long
Dim LookupCol As Long
Dim TotalRows As Long
Dim TotalCols As Long
Dim i As Long

Sheets("Sheet1").Select
TotalRows = ActiveSheet.UsedRange.Rows.Count
TotalCols = ActiveSheet.UsedRange.Columns.Count

For i = 1 To TotalCols
    If Cells(1, i).Value = "Values" Then FormulaCol = i
    If Cells(1, i).Value = "Test" Then LookupCol = i
Next

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""United States"",1,0)"
Cells(2, FormulaCol).AutoFill Destination:=Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
With Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
    .Value = .Value
End With
End Sub

コードのこの部分が静的に指定された列を担当していることを私は知っています:

ActiveCell.FormulaR1C1 = "=IF(RC[-1]=""United States"",1,0)"

しかし、上記のように機能させるためにどのように変更するのかわかりません。誰かがこれを手伝ってくれませんか?

編集

これが私が達成したいことを示す画像です ここに画像の説明を入力してください

現在、VALUE列がTEST列の右側にある場合、このマクロは正常に機能します。VALUE列がテスト列から離れた場所にある場合、適切な値が表示されません。正確に値の列がどこにあるかを識別するためにヘッダー「値」を探すマクロを作成したいと思います(一部のファイルでは、同じ列ではありません)

編集2:これが私があなたの現在のコードを使って得た結果です。VALUE列をTEST列の横に移動しても、同じように動作します。私のコードを使用すると、値はC2からC9に入力されました。あなたがあなたのコードを使って見ることができるように、それはD1に価値をもたらします

ここに画像の説明を入力してください

4

1 に答える 1

3

質問を理解したかどうかはよくわかりませんが、テスト列に基づいて1つの列の値を変更するサブルーチンは次のようになります。

Sub bbb()
Dim FormulaCol As Long
Dim LookupCol As Long
Dim TotalRows As Long
Dim TotalCols As Long
Dim i As Long

Sheets("Sheet1").Select
TotalRows = ActiveSheet.UsedRange.Rows.Count
TotalCols = ActiveSheet.UsedRange.Columns.Count


For i = 1 To TotalCols
    If Cells(1, i).Value = "Test" Then
        LookupCol = i
        Exit For
    End If
Next

For i = 1 To TotalCols
    If Cells(1, i).Value = "Values" Then
        FormulaCol = i
        Range("A2").Activate
        Debug.Print "=IF(RC[" & CStr(FormulaCol - LookupCol - 1) & "]=""United States"",1,0)"
        ActiveCell.Offset(0, FormulaCol - 1).FormulaR1C1 = "=IF(RC[" & CStr(LookupCol - FormulaCol) & "]=""us"",1,0)"
        Cells(2, FormulaCol).AutoFill Destination:=Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
        With Range(Cells(2, FormulaCol), Cells(TotalRows, FormulaCol))
        .Value = .Value
        End With
    End If
Next
End Sub
于 2013-03-08T13:35:07.520 に答える