文字列配列があり、配列の各スロットには、「B:J」「k:W」「AC:AG」などの文字列形式の「列の範囲」があります
メソッドには、「C」などの列名である文字列が渡されます
「C」が「B:J」の中にあるかどうかを検索する必要があります。
したがって、基本的には、「C」が「BCDEFGHIJ」にあるかどうか、およびループから抜けているかどうかを確認する必要があります
しかし、「A」と入力すると、配列内の次のスロットに移動するはずです。
感謝
あなたは見てみるかもしれません
列番号 (例: 127) を Excel の列 (例: AA) に変換する方法
sheet.Application.ActiveCell.Column //for current selected column
int col=sheet.Range("A").Column; // for any choosen column
現在の列番号を返します。範囲 B:J に同じことを適用し、J (10) > C (3) > B ( 2) かどうかを確認します。
その範囲内にあると言えます。
私があなたに与えたリンクを使って、この機能を逆にする必要がある場合。
ConvertToAlphaColumnReferenceFromInteger(sheet.Application.ActiveCell.Column)
C#/.NET で完了
この関数は、単一の列が範囲に含まれる配列内の位置を返します。Intersect プロパティを使用して、2 つの範囲が交差するかどうかを判断します。
Function ArrayPos(sColLetter As String, vaRanges As Variant) As Long
Dim i As Long
Dim sh As Worksheet
Dim lReturn As Long
Set sh = Sheet1
For i = LBound(vaRanges) To UBound(vaRanges)
If Not Intersect(sh.Columns(sColLetter), sh.Columns(vaRanges(i))) Is Nothing Then
lReturn = i
Exit For
End If
Next i
ArrayPos = lReturn
End Function
たとえば、イミディエイト ウィンドウから、このように使用されます。
?arraypos("M",array("B:J","K:W"))
1
引数を範囲に変換できることを確認するために、いくつかのエラー チェックを追加する必要がありますが、それはお任せします。範囲文字列をコロンで分割し、文字の ASCII 値を比較することで、Range オブジェクトなしでこれを行うことができます。