programing

vba의 열 번호를 사용하여 Excel 범위를 생성하시겠습니까?

elseif 2023. 4. 19. 22:26

vba의 열 번호를 사용하여 Excel 범위를 생성하시겠습니까?

문자가 아닌 열 번호를 사용하여 vba에서 범위를 작성하는 방법은 무엇입니까?

셀의 범위를 참조하려면 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

여기에 이미지 설명 입력

다음으로 범위 A1을 선택하기 위한2가지 솔루션을 나타냅니다.

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

이 링크도 확인해 주세요.

셀 및 셀 그룹의 조작에는 셀 대신 범위를 사용할 것을 강력히 권장합니다.그러면 문장이 훨씬 더 명확해지고 AE열이 31열이라는 것을 기억할 필요가 없습니다.

워크시트의 모든 셀을 선택하려는 경우에만 셀을 사용할 수 있습니다.예를 들어 셀입니다.모든 셀을 선택한 다음 사용할 값 또는 공식의 모든 셀을 비우려면: 셀을 선택합니다.콘텐츠 클리어

--

"셀"은 카운터를 사용하여 동적으로 범위를 설정하고 범위를 루프할 때 특히 유용합니다.문자를 열 번호로 사용하여 범위를 정의하는 것은 단기적으로는 더 투명할 수 있지만, 이러한 문자는 동적이지 않고 "하드 코딩된" 표현이므로 응용 프로그램의 강성이 더욱 높아집니다.

Kim Gyssen 덕분에

Range.Entire Column

네! 사용할 수 있습니다.Range.EntireColumn MSDN

dim column : column = 4

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

범위("ColumnName:Column Name" (컬럼명)

특정 열을 찾고 있는 경우 다음과 같은 구문을 사용하여 하드 코드화된 열 범위를 만들 수 있습니다. Range("D:D").

그러나 나중에 열을 변경할 수 있는 유연성이 더 높기 때문에 열 전체를 사용할 수 있습니다.

작업 계획표.

Worksheet.Columns워크시트 내의 열에 대한 범위 액세스를 제공합니다.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

다음으로 ConvertToLetter 함수에 대한 요약 대체를 나타냅니다.이 함수는 이론적으로 가능한 모든 양의 정수에 대해 작동합니다.예를 들어 1412는 결과적으로 "BBH"를 생성합니다.

Public Function ColumnNumToStr(ColNum As Integer) As String
Dim Value As Integer
Dim Rtn As String
    Rtn = ""
    Value = ColNum - 1
    While Value > 25
        Rtn = Chr(65 + (Value Mod 26)) & Rtn
        Value = Fix(Value / 26) - 1
    Wend
    Rtn = Chr(65 + Value) & Rtn
    ColumnNumToStr = Rtn
End Function

열 번호를 문자로 변환하려는 경우:

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

이 예제 함수는 열 전체를 선택합니다(예:범위("A:A").선택)

출처 : http://support.microsoft.com/kb/833402

솔루션으로는 stackPusher의 ConvertToLetter 기능이 매우 마음에 듭니다.그러나, 이것을 사용하는 동안, 나는 수학의 몇 가지 결함으로 인해 매우 구체적인 입력에서 몇 가지 오류가 발생하고 있다는 것을 알게 되었다.예를 들어 392를 입력하면 'N\', 418을 반환하면 'O\', 444를 입력하면 'P\' 등이 반환됩니다.

함수를 재작업했더니 703(첫 번째 세 글자 열 색인인 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

이 대답들은 이상하게 난해해해 보인다.내가 뭔가 놓치고 있는 게 아니라면...숫자를 문자로 변환하려면 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(여기서 your column number)를 사용하면 해당 문자와 연관된 열 제목(예: colcheck(703) = AAA)을 얻을 수 있습니다.

하하, Lovely - 내 버전의 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;
}
Function fncToLetters(vintCol As Integer) As String

        Dim mstrDigits As String

    ' Convert a positive number n to its digit representation in base 26.
    mstrDigits = ""
    Do While vintCol > 0
        mstrDigits = Chr(((vintCol - 1) Mod 26) + 65) & mstrDigits
        vintCol = Int((vintCol - 1) / 26)
    Loop

    fncToLetters = mstrDigits

End Function

마지막 행 또는 컬럼에 대한 단서를 모르면서도 Range를 계속 사용하려면

LastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
LastColumn = ActiveSheet.Cells(7, ActiveSheet.Columns.Count).End(xlToLeft).Column

'Column Transform number in Letter
Col_Letter = Split(Cells(1, LastColumn).Address(True, False), "$")(0)
x_range = "A1:"
y_range = Col_Letter & Trim(Str(LastRow))

'Set the range
rng_populated = x_range & "" & y_range

'Select the range
Range(rng_populated).Select

열 번호별로 열 범위를 사용하는 가장 쉬운 방법은 다음과 같습니다.

Range(Columns(initial_column), Columns(final_column))

예:

Range(Columns(1), Columns(3)).Select

언급URL : https://stackoverflow.com/questions/13157363/create-excel-ranges-using-column-numbers-in-vba