2017-11-27 5 views
2

列ヘッダーに基づいてセルの右側にオフセットすることはできますか?ある範囲をループするいくつかのコードがあります。特定の値を見つけたら、右に12列分オフセットします。オフセット(、12)と言うのではなく、私が望むヘッダーを持つ列と同じ行の右にオフセットする方法がありますか?例えばVBA:列ヘッダーに基づくオフセット

列Bが「ホスト」という名前の、私の範囲は

rng = ws.range("B1:B20") 

で、列Nが「国」という名前で、私は書きたくないされている場合:

offset(,12).value = ... 

代わりに

offset(to column: country).value =... 

私がこれを求めているのは、コードをもっとresiにするためのオフセット番号ではないからです私の卓越したワークシートに起こる可能性のある変更には、責任を負いません。

説明が分かりやすいと思います。ありがとう!

+0

範囲名を使用してみましたか? –

答えて

1

は、あなたが探している「ヘッダ」にごRngからOffsetに必要な列数を返します、以下の機能を試してみてください。

Option Explicit 

Function OffesttoHeader(CurrentCol As Long, FindRng As Range, HeaderStr As String) As Long 

    Dim HeaderRng As Range 

    Set HeaderRng = FindRng.Find(what:=HeaderStr) 
    If Not HeaderRng Is Nothing Then 
     OffesttoHeader = HeaderRng.Column - CurrentCol + 1 
    Else 
     OffesttoHeader = -10000 ' raise to a large value >> as an error 
    End If 

End Function 

テストサブコード(上記の機能をテストするために):

Sub Test() 

Dim ws As Worksheet 
Dim Rng As Range 
Dim NumberofCols As Long 

Set ws = ThisWorkbook.Sheets("Sheet1") ' modify to your sheet's name 
Set Rng = ws.Range("B1:B20") 

' pass the following parameters: 
' 1. Rng.column - in your case column B = 2 
' 2. ws.Rows(1) - the Range to search for the Header, first row in ws worksheet 
' 3. "Header" - the Header string you are searching for 
NumberofCols = OffesttoHeader(Rng.Column, ws.Rows(1), "Header") 

' raise an error message box 
If NumberofCols = -10000 Then 
    MsgBox "Unable to find Header" 
End If 

End Sub  
+0

うまくいった。私はOffsetToHeaderから "+1"を削除しなければなりませんでした。あなたがこれを追加した理由はありましたか?ありがとう! – wra

+0

@wra私は計算が間違っているかもしれませんが、 'Offset'ではなく、その差を計算していました。 –

+0

ああ大丈夫です。ご助力ありがとうございます! – wra

0

を上記のシーク溶液を得るために、Range.Findメソッドを使用します。

... Offset(RowNum, clmCountry).Value = ... 
:ここから

'Column Number 
Dim clmCountry as Integer 

、我々はあなたが目的の列を見つけたらRange.Find方法

'to find the header 
With ThisWorkbook.Sheets("SheetName") 

    'update the range if necessary 
    clmCountry = .Range("A1:Z1").Find("HeaderName").Column 

End With 

を使用してヘッダーを検索するには、次の方法を相殺する可能性

関連する問題