수색…
통사론
- Set - Range와 같은 객체에 대한 참조를 설정하는 데 사용되는 연산자입니다.
- For Each - 컬렉션의 모든 항목을 반복하는 데 사용되는 연산자입니다.
비고
변수 이름 인 r
, cell
및 다른 변수는 원하는대로 지정할 수 있지만 적절하게 이름을 지정해야 코드가 사용자와 다른 사람들에게 더 쉽게 이해할 수 있습니다.
범위 만들기
Range 는 문자열과 같은 방법으로 생성하거나 채울 수 없습니다.
Sub RangeTest()
Dim s As String
Dim r As Range 'Specific Type of Object, with members like Address, WrapText, AutoFill, etc.
' This is how we fill a String:
s = "Hello World!"
' But we cannot do this for a Range:
r = Range("A1") '//Run. Err.: 91 Object variable or With block variable not set//
' We have to use the Object approach, using keyword Set:
Set r = Range("A1")
End Sub
참조 를 한정하는 것이 가장 좋은 방법으로 간주되므로 지금부터 동일한 접근 방식을 사용합니다.
MSDN에서 개체 변수 (예 : 범위)를 만드는 방법 에 대해 자세히 설명합니다. MSDN에서 Set 문에 대한 추가 정보.
동일한 범위를 만드는 데는 여러 가지 방법이 있습니다.
Sub SetRangeVariable()
Dim ws As Worksheet
Dim r As Range
Set ws = ThisWorkbook.Worksheets(1) ' The first Worksheet in Workbook with this code in it
' These are all equivalent:
Set r = ws.Range("A2")
Set r = ws.Range("A" & 2)
Set r = ws.Cells(2, 1) ' The cell in row number 2, column number 1
Set r = ws.[A2] 'Shorthand notation of Range.
Set r = Range("NamedRangeInA2") 'If the cell A2 is named NamedRangeInA2. Note, that this is Sheet independent.
Set r = ws.Range("A1").Offset(1, 0) ' The cell that is 1 row and 0 columns away from A1
Set r = ws.Range("A1").Cells(2,1) ' Similar to Offset. You can "go outside" the original Range.
Set r = ws.Range("A1:A5").Cells(2) 'Second cell in bigger Range.
Set r = ws.Range("A1:A5").Item(2) 'Second cell in bigger Range.
Set r = ws.Range("A1:A5")(2) 'Second cell in bigger Range.
End Sub
예제에서 Cells (2, 1)는 Range ( "A2")와 같습니다. 이것은 Cell이 Range 개체를 반환하기 때문입니다.
몇몇 근원 : 범위 내의 칩 Pearson 세포 ; MSDN 범위 개체 ; John Walkenback- 귀하의 VBA 코드 범위 참조 .
또한 숫자가 범위 선언에 사용되며 숫자 자체가 Range ( "A"& 2)와 같이 따옴표 밖에있는 경우에는 해당 숫자를 포함하는 변수에 대해 해당 숫자를 바꿀 수 있습니다 정수 / 긴. 예 :
Sub RangeIteration()
Dim wb As Workbook, ws As Worksheet
Dim r As Range
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
For i = 1 To 10
Set r = ws.Range("A" & i)
' When i = 1, the result will be Range("A1")
' When i = 2, the result will be Range("A2")
' etc.
' Proof:
Debug.Print r.Address
Next i
End Sub
이중 루프를 사용하는 경우 셀이 더 좋습니다.
Sub RangeIteration2()
Dim wb As Workbook, ws As Worksheet
Dim r As Range
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
For i = 1 To 10
For j = 1 To 10
Set r = ws.Cells(i, j)
' When i = 1 and j = 1, the result will be Range("A1")
' When i = 2 and j = 1, the result will be Range("A2")
' When i = 1 and j = 2, the result will be Range("B1")
' etc.
' Proof:
Debug.Print r.Address
Next j
Next i
End Sub
단일 셀을 참조하는 방법
현재 Excel 워크 시트에서 단일 셀을 참조하는 가장 간단한 방법은 참조의 A1 양식을 대괄호로 묶는 것입니다.
[a3] = "Hello!"
대괄호는 Application
개체의 Evaluate
메서드에 편리한 구문 설탕 이므로 기술적으로 다음 코드와 동일합니다.
Application.Evaluate("a3") = "Hello!"
행과 열을 받아 셀 참조를 반환하는 Cells
메서드를 호출 할 수도 있습니다.
Cells(3, 1).Formula = "=A1+A2"
VBA에서 행과 열을 Excel에 전달할 때마다 항상 행이 먼저오고 그 다음에 열이오고, 열이 먼저 나타나는 일반적인 A1
표기법의 반대이므로 혼란 스럽습니다.
두 예제 모두 워크 시트를 지정하지 않았기 때문에 Excel은 활성 시트 (사용자 인터페이스 앞에있는 시트)를 사용합니다. 활성 시트를 명시 적으로 지정할 수 있습니다.
ActiveSheet.Cells(3, 1).Formula = "=SUM(A1:A2)"
또는 특정 시트의 이름을 제공 할 수 있습니다.
Sheets("Sheet2").Cells(3, 1).Formula = "=SUM(A1:A2)"
한 범위에서 다른 범위로 이동하는 데 사용할 수있는 다양한 방법이 있습니다. 예를 들어 Rows
메서드를 사용하여 범위의 개별 행을 가져올 수 있으며 Cells
메서드를 사용하여 행이나 열의 개별 셀을 가져올 수 있으므로 다음 코드는 셀 C1을 참조합니다.
ActiveSheet.Rows(1).Cells(3).Formula = "hi!"
변수의 셀에 대한 참조 저장
변수의 셀 참조를 저장하려면 Set
구문을 사용해야합니다. 예를 들면 다음과 같습니다.
Dim R as Range
Set R = ActiveSheet.Cells(3, 1)
후에...
R.Font.Color = RGB(255, 0, 0)
Set
키워드가 필요한 이유는 무엇입니까? Set
은 Visual Basic에 =
의 오른쪽에있는 값이 개체임을 나타냅니다.
오프셋 속성
- Offset (Rows, Columns) - 현재 셀에서 다른 점을 정적으로 참조하는 데 사용되는 연산자입니다. 종종 루프에서 사용됩니다. 행 섹션의 양수는 음수가 왼쪽으로 이동함에 따라 오른쪽으로 이동한다는 것을 이해해야합니다. 기둥 섹션에서는 긍정이 아래로 이동하고 음화가 위로 이동합니다.
즉
Private Sub this()
ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Select
ThisWorkbook.Sheets("Sheet1").Range("A1").Offset(1, 1).Value = "New Value"
ActiveCell.Offset(-1, -1).Value = ActiveCell.Value
ActiveCell.Value = vbNullString
End Sub
이 코드는 B2를 선택하고 새 문자열을 입력 한 다음 해당 문자열을 A1으로 다시 이동 한 후 B2를 지 웁니다.
범위를 조 변경하는 방법 (수평에서 수직으로 또는 그 반대로)
Sub TransposeRangeValues()
Dim TmpArray() As Variant, FromRange as Range, ToRange as Range
set FromRange = Sheets("Sheet1").Range("a1:a12") 'Worksheets(1).Range("a1:p1")
set ToRange = ThisWorkbook.Sheets("Sheet1").Range("a1") 'ThisWorkbook.Sheets("Sheet1").Range("a1")
TmpArray = Application.Transpose(FromRange.Value)
FromRange.Clear
ToRange.Resize(FromRange.Columns.Count,FromRange.Rows.Count).Value2 = TmpArray
End Sub
참고 : Copy / PasteSpecial에는 전치 셀의 수식도 함께 업데이트되는 붙여 넣기 붙여 넣기 옵션이 있습니다.