56

文字ではなく列番号を使用してvbaで範囲を作成するにはどうすればよいですか?

4

10 に答える 10

83

セルの範囲を参照するには、Range(Cell1,Cell2)、サンプルを使用できます。

Sub RangeTest()
  Dim testRange As Range
  Dim targetWorksheet As Worksheet
  
  Set targetWorksheet = Worksheets("MySheetName")
  
  With targetWorksheet
    .Cells(5, 10).Select 'selects cell J5 on targetWorksheet
    Set testRange = .Range(.Cells(5, 5), .Cells(10, 10))
  End With
  
  testRange.Select 'selects range of cells E5:J10 on targetWorksheet
  
End Sub

ここに画像の説明を入力

于 2012-10-31T13:53:08.863 に答える
42

以下は、範囲 A1 を選択するための 2 つの解決策です。

Cells(1,1).Select '(row 1, column 1) 
Range("A1").Select

このリンクもチェックしてください。

セルおよびセルのグループを操作するには、Cells の代わりに Range を使用することを強くお勧めします。これにより、文章がより明確になり、列 AE が列 31 であることを覚えておく必要がなくなります。

Cells を使用するのは、ワークシートのすべてのセルを選択する場合だけです。例: Cells.Select すべてのセルを選択し、使用する値または数式のすべてのセルを空にするには: Cells.ClearContents

--

「セル」は、範囲を動的に設定し、カウンターを使用して範囲をループする場合に特に役立ちます。列番号として文字を使用して範囲を定義すると、短期的にはより透明になる可能性がありますが、動的ではなく「ハードコードされた」表現であるため、アプリケーションがより厳格になります。

キム・ギセンに感謝

于 2012-10-31T12:00:27.783 に答える
11

Range.EntireColumn

はい!MSDNを使用できますRange.EntireColumn

dim column : column = 4

dim column_range : set column_range = Sheets(1).Cells(column).EntireColumn

Range("列名:列名")

特定の列が必要な場合は、たとえばRange("D:D").

ただし、後でその列をより柔軟に変更できるため、列全体を使用します。

Worksheet.Columns

Worksheet.Columnsワークシート内の列への Range アクセスを提供します。 MSDN

最初のシートの最初の列にアクセスしたい場合。Columnsワークシートで関数を呼び出します。

dim column_range: set column_range = Sheets(1).Columns(1)

このColumnsプロパティは、どのRange MSDNでも利用できます

EntireRow単一のセルの範囲があり、行の他のセルに到達したい場合にも役立ちます。LOOKUP

dim id : id = 12345


dim found : set found = Range("A:A").Find(id)

if not found is Nothing then
    'Get the fourth cell from the match
    MsgBox found.EntireRow.Cells(4)
end if
于 2015-05-05T06:53:23.727 に答える
2

列番号を文字に変換しようとしていた場合:

Function ConvertToLetter(iCol As Integer) As String
    Dim iAlpha As Integer
    Dim iRemainder As Integer
    iAlpha = Int(iCol / 27)
    iRemainder = iCol - (iAlpha * 26)
    If iAlpha > 0 Then
        ConvertToLetter = Chr(iAlpha + 64)
    End If
    If iRemainder > 0 Then
        ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
    End If
End Function

このようにして、次のようなことができます。

Function selectColumnRange(colNum As Integer, targetWorksheet As Worksheet)
    Dim colLetter As String
    Dim testRange As Range
    colLetter = ConvertToLetter(colNum)
    testRange = targetWorksheet.Range(colLetter & ":" & colLetter).Select
End Function

その例の関数は、列全体を選択します (つまり、Range("A:A").Select)

ソース: http://support.microsoft.com/kb/833402

于 2014-12-11T17:16:59.790 に答える
1

ソリューションとして、stackPusher の ConvertToLetter 関数が非常に気に入っています。しかし、それを使用していると、数学のいくつかの欠陥により、非常に特定の入力でいくつかのエラーが発生することに気付きました. たとえば、392 を入力すると「N\」、418 を入力すると「O\」、444 を入力すると「P\」などが返されます。

関数を作り直した結果、最大 703 (最初の 3 文字の列インデックス、AAA) までのすべての入力に対して正しい出力が生成されます。

Function ConvertToLetter2(iCol As Integer) As String
    Dim First As Integer
    Dim Second As Integer
    Dim FirstChar As String
    Dim SecondChar As String

    First = Int(iCol / 26)
    If First = iCol / 26 Then
        First = First - 1
    End If
    If First = 0 Then
        FirstChar = ""
    Else
        FirstChar = Chr(First + 64)
    End If

    Second = iCol Mod 26
    If Second = 0 Then
        SecondChar = Chr(26 + 64)
    Else
        SecondChar = Chr(Second + 64)
    End If

    ConvertToLetter2 = FirstChar & SecondChar

End Function
于 2015-05-13T20:44:41.703 に答える
1

これらの答えは奇妙に複雑に見えます。何かが欠けていない限り...数字を文字に変換したい場合は、forループを使用してそれらをすべて配列にストックし、その列文字に関連付けられた数字を呼び出すことができます。そのようです

For intloop = 1 To 26
    colcheck(intloop) = Chr$(64 + intloop)
    For lenloop = 1 To 26
        colcheck((intloop * 26) + lenloop) = Chr$(64 + intloop) & Chr$(64 + lenloop)
        For terloop = 1 To 26
            colcheck((intloop * 676) + (lenloop * 26) + terloop) = Chr$(64 + intloop) & Chr$(64 + lenloop) & Chr$(64 + terloop)
            For qualoop = 1 To 26
                colcheck((intloop * 17576) + (lenloop * 676) + (terloop * 26) + qualoop) = Chr$(64 + intloop) & Chr$(64 + lenloop) & Chr$(64 + terloop) & Chr$(64 + qualoop)
            Next qualoop
        Next terloop
    Next lenloop
Next intloop

次に、colcheck(yourcolumnnumberhere) を使用するだけで、その文字に関連付けられた列見出しが取得されます (つまり、colcheck(703) = AAA)

于 2016-02-05T21:46:52.630 に答える
0

ハハ、ラブリー-私のバージョンのstackPusherのコードも含めさせてください:)。この機能は C# で使用しています。すべての Excel 範囲で正常に動作します。:

public static String ConvertToLiteral(int number)
{
        int firstLetter = (((number - 27) / (26 * 26))) % 26;
        int middleLetter = ((((number - 1) / 26)) % 26);

        int lastLetter = (number % 26);
        firstLetter = firstLetter == 0 ? 26 : firstLetter;
        middleLetter = middleLetter == 0 ? 26 : middleLetter;
        lastLetter = lastLetter == 0 ? 26 : lastLetter;
        String returnedString = "";
        returnedString = number > 27 * 26 ? (Convert.ToChar(firstLetter + 64).ToString()) : returnedString;
        returnedString += number > 26 ? (Convert.ToChar(middleLetter + 64).ToString()) : returnedString;
        returnedString += lastLetter >= 0 ? (Convert.ToChar(lastLetter + 64).ToString()) : returnedString;
        return returnedString;
}
于 2015-12-22T12:01:06.323 に答える