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
'programing' 카테고리의 다른 글
Swift에서 버튼 텍스트를 되돌리는 방법 (0) | 2023.04.19 |
---|---|
시스템 입수 방법창문들.'참'을 반환하려면 ShowDialog()를 선택하십시오. (0) | 2023.04.19 |
어댑터로부터의 콜액티비티 메서드 (0) | 2023.04.19 |
힌트 텍스트를 WPF 텍스트 상자에 추가하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
Scroll Viewer를 자동으로 스크롤하는 방법 - 사용자가 스크롤 위치를 변경하지 않은 경우에만 (0) | 2023.04.14 |