Excel range.Rows 속성은 실제로 어떤 역할을합니까?
좋아, 레거시 Excel-VBA 응용 프로그램에 대한 추가 기능 프로젝트를 마무리하고 있으며 신비한 range.Rows
(?) 및 worksheet.Rows
속성 의 수수께끼에 대해 다시 한 번 실행했습니다 .
이 속성이 실제로 무엇을하고 나에게 무엇을 제공해야하는지 아는 사람이 있습니까? (참고 :이 모든 것은 해당 *.Columns
속성에도 적용됩니다 .)
내가 정말로 것 처럼 그것을 사용할 수 있도록하면이 같은 행의 범위를 반환하는 것입니다 :
SET rng = wks.Rows(iStartRow, iEndRow)
그러나 Intellisense가 그것에 대한 두 가지 주장을 보여 주지만 나는 그것을 할 수 없었습니다. 대신 나는 두세 가지 다른 (매우 어설픈) 기술 중 하나를 사용해야합니다.
도움말은 매우 유용하지 않으며 (일반적으로 Office VBA의 경우) "행"에 대한 인터넷 검색은 내가 추가하는 다른 용어가 아무리 많아도 그다지 유용하지 않습니다.
내가 그것을 사용할 수 있었던 유일한 것은 1) 단일 행을 범위로 반환 ( rng.Rows(i)
) 및 2) 범위의 행 수를 반환 ( rng.Rows.Count
)하는 것입니다. 그게 다야? 정말 좋은 점은 없나요?
설명 : 범위를 반환하고 행 범위를 가져 오는 다른 방법이 있다는 것을 알고 있습니다. 내가 무엇을 요구하고 우리가 무엇을 어떻게해야합니까 특히입니다 .Rows()
우리는 이미에서 얻을하지 않습니다 .Cells()
와 .Range()
? 내가 아는 두 가지는 1) 단일 행의 범위를 반환하는 더 쉬운 방법과 2) 범위의 행 수를 계산하는 방법입니다.
다른 건 없나요?
Range.Rows
그리고 Range.Columns
새로운 범위는 행 또는 열을 나타낸다는 것을 나타내는 플래그를 가지고 있다는 사실을 제외하고 기본적으로 동일한 범위를 반환합니다. Range.Count 및 Range.Hidden과 같은 일부 Excel 속성과 다음과 같은 일부 메서드에 필요합니다 Range.AutoFit()
.
Range.Rows.Count
범위의 행 수를 반환합니다.Range.Columns.Count
범위의 열 수를 반환합니다.Range.Rows.AutoFit()
범위의 행을 자동 맞춤합니다.Range.Columns.AutoFit()
범위의 열을 자동으로 맞 춥니 다.
당신은 그것을 찾을 수 있습니다 Range.EntireRow
그리고 Range.EntireColumn
그들은 여전히 당신이 찾고있는 정확히 무엇 있지만, 유용합니다. 표시된 범위 EntireRow
에 EntireColumn
대해 가능한 모든 열과 가능한 모든 행을 반환합니다 .
.NET 용 SpreadsheetGear 에는 Excel의 API와 매우 유사한 .NET API가 제공 되기 때문에 이것을 알고 있습니다. SpreadsheetGear API에는 Excel이 갖고 싶었던 것을 포함하여 IRange 인덱서에 대한 여러 강력한 형식의 오버로드가 함께 제공됩니다.
IRange this[int row1, int column1, int row2, int column2];
면책 조항 : SpreadsheetGear LLC를 소유하고 있습니다.
Range.Rows, Range.Columns 및 Range.Cells는 VBA Type () 함수에 따라 Excel.Range 개체입니다.
? TypeName (Selection.rows) 범위그러나 이것이 전체 이야기는 아닙니다. 반환 된 개체는 Excel :: Range의 모든 속성과 메서드를 상속하는 확장 형식이지만 .Columns 및 .Rows에는 특수 For ... 각 반복기와 특수 .Count 속성이 있습니다. 't 상당히 부모 Range 개체의 반복자 및 계산과 동일.
따라서 .Cells는 상위 범위의 기본 반복자처럼 반복되고 단일 셀 범위의 컬렉션으로 계산됩니다.
그러나 .Columns는 반복되고 수직 하위 범위의 모음으로 계산되며 각 하위 범위는 단일 열 너비입니다.
... 그리고 .Rows는 반복되고 수평 하위 범위의 모음으로 계산되며 각 하위 범위는 단일 행 높이입니다.
이를 이해하는 가장 쉬운 방법은이 코드를 단계별로 살펴보고 선택된 항목을 보는 것입니다.
공개 하위 테스트 ()즐겨. 병합 된 범위가 얼마나 이상 한지 확인하기 위해 몇 개의 병합 된 셀을 사용해보십시오 .
범위로 하위 범위 축소 Dim ParentRange As Range
Set ParentRange = ActiveSheet.Range ( "B2 : E5")
ParentRange.Cells의 각 하위 범위에 대해 SubRange.Select 다음
ParentRange.Rows의 각 하위 범위에 대해 SubRange.Select 다음
ParentRange.Columns의 각 하위 범위에 대해 SubRange.Select 다음
ParentRange의 각 하위 범위에 대해 SubRange.Select 다음
End Sub
두 가지 예는 내가 Rows
및 Columns
속성을 사용한 유일한 것 입니다. 그러나 이론적으로는 Range
객체 로 수행 할 수있는 모든 작업을 수행 할 수 있습니다 .
이러한 속성의 반환 유형은 그 자체가 Range
이므로 다음과 같은 작업을 수행 할 수 있습니다.
Dim myRange as Range
Set myRange = Sheet1.Range(Cells(2,2),Cells(8,8))
myRange.Rows(3).Select
myRange
(시트 1의 셀 B4 : H4)에서 세 번째 행을 선택합니다 .
업데이트 : 원하는 작업을 수행하려면 다음을 사용할 수 있습니다.
Dim interestingRows as Range
Set interestingRows = Sheet1.Range(startRow & ":" & endRow)
업데이트 # 2 : 또는 다른 범위 내에서 행의 하위 집합을 가져 오려면 :
Dim someRange As Range
Dim interestingRows As Range
Set myRange = Sheet1.Range(Cells(2, 2), Cells(8, 8))
startRow = 3
endRow = 6
Set interestingRows = Range(myRange.Rows(startRow), myRange.Rows(endRow))
.Rows 결과는 행으로 구성된 것으로 표시되므로 다음과 같이 "For Each"로 각 행을 개별적으로 처리 할 수 있습니다.
Function Attendance(rng As Range) As Long
Attendance = 0
For Each rRow In rng.Rows
If WorksheetFunction.Sum(rRow) > 0 Then
Attendance = Attendance + 1
End If
Next
End Function
I use this to check attendance in any of a few categories (different columns) for a list of people (different rows).
(And of course you could use .Columns to do a "For Each" over the columns in the range.)
I'm not sure, but I think the second parameter is a red herring.
Both .Rows and .Columns take two optional parameters: RowIndex and ColumnIndex. Try to use ColumnIndex, e.g. Rows(ColumnIndex:=2)
, generates an error for both .Rows and .Columns.
My feeling it's inherited in some sense from the Cells(RowIndex,ColumnIndex)
Property but only the first parameter is appropriate.
I've found myself using range.Rows for its effects in the Copy method. It copies the height of the rows from the origin to the destination, which is the behaviour I want.
rngLastRecord.Rows.Copy Destination:=Sheets("Availability").Range("a" & insertRow)
If I had used rngLastRecord.Copy instead of rngLastRecord.Rows.Copy, the row heights would be whatever was there before the copy.
It's perhaps a bit of a kludge, but the following code does what you seem to want to do:
Set rng = wks.Range(wks.Rows(iStartRow), wks.Rows(iEndRow)).Rows
I've found this works:
Rows(CStr(iVar1) & ":" & CStr(iVar2)).Select
There is another way, take this as example
Dim sr As String
sr = "6:10"
Rows(sr).Select
All you need to do is to convert your variables iStartRow
, iEndRow
to a string.
참고URL : https://stackoverflow.com/questions/1038534/what-does-the-excel-range-rows-property-really-do
'Programing' 카테고리의 다른 글
Safari에서 교차 도메인 쿠키 설정 (0) | 2020.12.09 |
---|---|
암호화 키 저장 — 모범 사례? (0) | 2020.12.09 |
Git : 삭제 된 코드 찾기 (0) | 2020.12.09 |
Rails 3에서 ActiveRecord 연결 범위를 어떻게 지정합니까? (0) | 2020.12.09 |
Rails : 하나의 양식에서 다중 제출 버튼 (0) | 2020.12.09 |