Q6. 배열을 사용하는 방법?

5478 단어 VBAExcelExcelVBA
마지막 Q5에서 한 일을 배열을 사용하여 재현해 보려면 어떻게 하면 좋을까요?

덧붙여서 마지막 기사는 이쪽
Q5. 특정 조건에 맞는 셀의 정보를 얻는 방법?

그런데, 전회 사용한 데이터는 이쪽입니다.


Q5에서는 ForEach 문을 이용하여 Range의 정보를 취득하여 30세 이상의 사람이
몇 명이 있는지 계산했습니다.

이번에는 같은 것을 배열을 이용하여 실현하는 방법을 생각해 갑니다.
20세 이하의 사람을 조사해, 20세 이하였던 경우, 이름을 정리해, 결국
20세 이하의 사람은 이쪽입니다. 라고 하는 상태에 20세 이하의 사람을 표시하는 매크로를 만들어 봅시다.

■ 배열 사용



배열을 사용하는 것은 매우 간단합니다.
변수를 선언하는 것처럼,

Dim 변수 이름 (요소 수) as 데이터 유형 이름

같은 설명입니다.

여기서 주의해 두고 싶은 것이, 요소수를 알고 있을까라는 점입니다.
이번에는 더 간단한 요소를 알고있는 경우를 설명합니다.

요소수가 미리 알고 있는 경우는, 요소수를 그대로 선언시에 지정해 주면 OK입니다.
덧붙여서, 요소수를 모르는 경우는 아무것도 기재하지 않고 비워서 선언합니다.

■답변



그럼, 매크로를 봐 갑시다 이쪽입니다.
Sub Q6_Answer()
    Dim Names(6) As Variant
    Dim j As Variant
    Dim i As Range
    Dim massage As String
    Dim index As Integer
    For Each i In Range("C2:C8")
        If i.Value >= 20 And i.Value < 30 Then
            Names(index) = i.Offset(0, -1).Value
            index = index + 1
        End If
    Next i

    For Each j In Names
        If Not IsEmpty(j) Then
            massage = massage + j + "さん" + vbLf
        End If
    Next j

    MsgBox "20代の人は" & vbLf & massage & "です。"

End Sub

■해설



우선, 1행째의 Dim Names(6) As Variant에서,
배열 선언을하고 있습니다.
이 배열에, 20대의 사람의 이름을 격납해 갑니다.

이번은, 미리 인원수를 알고 있는 전제로 작성하고 있으므로,
이렇게 됩니다.
덧붙여서, 7명 있는데도 불구하고 Names(6)로 하고 있는 것은,
배열의 요소는 0부터 시작하기 때문입니다.
이 경우, Names(0)로부터 Names(6)까지의 배열이 됩니다.

if문에 있는 And는 복수의 조건에 합치한 것을 판정하는데 이용합니다.
이번에는 20대 이상이므로 이렇게

If i.Value >= 20 And i.Value < 30 Then

And를 사용하여 복합 조건을 설명합니다.

이제 20대의 사람을 Names라는 배열에 저장할 수 있었습니다.

그러나 Names라는 배열에는 값이 들어 있는 요소와 그렇지 않은 요소가 있습니다.
7명의 모든 사람이 20대라면 모두 묻히는데, 그렇지 않으면
빈 요소와 데이터가 들어있는 요소가 혼합되어 있습니다.

ForEach 문을 이용하여 배열의 요소 하나 하나를 확인합니다.

If Not IsEmpty(j) Then이라고 하는 기술로, 비어 있지 않았던 경우라는 의미가 됩니다.
IsEmpty는 요소가 비어 있는지 확인하는 함수입니다. 비어 있으면 TRUE를 반환합니다.
이 설명에서는 머리에 Not을 붙이고 있으므로 TRUE가 아닌 경우,
즉, 비어 있지 않은 경우가 됩니다.

비어 있지 않은 경우에, message라고 하는 변수에 이름을 연결해, 격납해 가 마지막에 표시시키고 있습니다.

이번에는 이렇게 배열을 사용하기 위해, 굳이 이런 중복 기술이 되고 있습니다만,
같은 것을 실현하기 위해서는, 후반의 ForEach 문은 필요 없거나 합니다.
라고 하는지 원래 배열을 사용할 필요도 실은 별로 없거나 합니다.

하지만 어디까지나 배열을 사용하는 방법? 라는 관점에서 봐 주셨으면 합니다.
(더 좋은 예가 있으면 또 다른 기회에 취급하고 싶습니다.)

마지막으로 매크로를 실행한 결과를 올려 둡니다.

좋은 웹페이지 즐겨찾기