Q6. 배열을 사용하는 방법?
덧붙여서 마지막 기사는 이쪽
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 문은 필요 없거나 합니다.
라고 하는지 원래 배열을 사용할 필요도 실은 별로 없거나 합니다.
하지만 어디까지나 배열을 사용하는 방법? 라는 관점에서 봐 주셨으면 합니다.
(더 좋은 예가 있으면 또 다른 기회에 취급하고 싶습니다.)
마지막으로 매크로를 실행한 결과를 올려 둡니다.
Reference
이 문제에 관하여(Q6. 배열을 사용하는 방법?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/guren111/items/b38861f6dc0010e88db7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)