2011-07-19 9 views
3

Interop.Excelを使用してVB.NETで、行番号と列文字に基づいてセルにアクセスする必要があります。私は私の運を試してみました...行単位でExcelセルを取得NUMBERおよび列LETTER

パラメータはタイプオブジェクトを取ったので、これはうまくいくと思いましたが、運がないと思いました。私はまた、各文字を数値に列挙することを考えましたが、スプレッドシートの列は正常ではありません。意味は、彼らが彼らが、これは、列の番号に違いがあれば、私は知らない実際に...

A B C D E T AZ

A B C D E F G

じゃありません。問題は明らかですが、繰り返すだけで、行番号と列文字に基づいてどのようにセルを取得できますか?

+1

あなたの列番号が付けられていると(文字入り)を順次、あなたはおそらく隠された列を持っています。あなたのカラムTがカラム20でない場合、私は非常に驚くでしょう。Excelでは、テストするカラムに式= 'COLUMN()'を書くことでこれをテストできます。 –

答えて

3

"ベース" システムとしての文字のASCII値を使用し

"A" = 1 = ASCII値 - AのASCII値+ 1

"AA" = 27 = (AのASCII値 - A + 1のASCII値)

"BA" =(BのASCII値 - AのASCII値+1) * 26 +(AのASCII値 - AのASCII値+1)

Dim oWorksheet as Worksheet : Set oWorksheet = ActiveSheet 

Dim iRow As Integer : iRow = 10 
Dim strColumn as String : strColumn = "AZ" 

Dim oCell as Range 
Set oCell = oWorksheet.Cells(iRow, 1).Range(strColumn & "1") 

oWorksheet.Cells(iRow, 1)はあなたの所望の行の最初のセルを与え、.Range(strColumn & "1")はあなたに与える:(桁-1)のパワー

Function GetIndex(ByVal str As String) As Integer 
     Dim i As Integer 
     str = str.ToUpper() 
     GetIndex = 0 
     For i = str.Length - 1 To 0 Step -1 
      GetIndex = GetIndex + (26^(str.Length - i - 1)) * (Asc(str(i)) - Asc("A") + 1) 
     Next 
End Function 
2

に26を掛ける等、これを試してください列の文字に基づいてそこからの水平オフセット。


EDIT:はるかに簡単な解決策のためのランス・ロバーツの答えを参照してください。単一セルの場合

+0

これを正しく理解すれば、2番目の部分は指定された列のセルを私に渡しますか? – MGZero

+0

はい。これは、現在のセル(10行目の最初のセル)を基準にして評価される.Range( "AZ1")として評価されます。 「1」部分は同じ行を意味し、「AZ」部分は列「AZ」を意味する。現在のセルは列Aにあるので、これは実際の列AZです。 –

+0

Aaargh。私はこれを過度に複雑化しました。ランス・ロバーツの答えははるかに良いです。 –

関連する問題