수색…


통사론

  • 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에는 전치 셀의 수식도 함께 업데이트되는 붙여 넣기 붙여 넣기 옵션이 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow