Q9. 다른 워크시트에 셀 값을 복사하는 방법? ②
라고 하는 것도, Q7때는 3시트분의 데이터를 다른 시트에 카피한다고 하는 것이었습니다.
그 때문에, 꽤 단조로운 코드로 해 버렸기 때문입니다.
이번에는 13 인분의 데이터를 준비했습니다. (Q8 참조)
여기입니다.
전회의 3명+10명분의 데이터가 추가되고 있습니다.
이 시트에 있는 이름과 각 점수를 하나의 시트에 집계하는 매크로를 만들어 봅시다.
■ 포인트
루프 처리를 이용하는 것으로, 효율적으로 쓸 수 있습니다.
어디에서 어디에서 데이터를 얻고 싶어서 그것을 어떻게 기술하는지 생각해 가는 것이 이번 포인트입니다.
단지, 단지, 기재하는 것만이라면, Q7의 때와 같이 단순하게 기술하면 좋을 뿐이니까요.
하지만 그렇게 하면 이번 수가 많아졌을 때 불편해집니다.
이번에는 그 불편함을 어떻게 해소할지가 포인트가 됩니다.
■답변
Sub Q9_Answer()
Dim i As Integer
Dim StartRow As Integer
StartRow = 3
For i = 3 To Worksheets.Count
Worksheets("全体").Range("B" & StartRow).Value = Worksheets(i).Range("B3").Value
Worksheets("全体").Range("C" & StartRow).Value = Worksheets(i).Range("C3").Value
Worksheets("全体").Range("D" & StartRow).Value = Worksheets(i).Range("D3").Value
Worksheets("全体").Range("E" & StartRow).Value = Worksheets(i).Range("E3").Value
StartRow = StartRow + 1
Next i
End Sub
■해설
첫째, StartRow에 대해. StartRow는 집계할 시트가 나열하는 첫 번째 행을 나타냅니다.
이번은, 3행째로, 데이터 시트의 최초의 인덱스 번호인 3과 우연히 일치하고 있었으므로, StartRow에 관한 기술을 모두 없애고, i로 하는 것으로 같은 것을 실현할 수 있습니다만,
가독성 등도 고려해, 이번과 같이 하고 있습니다.
그런 다음 For 문이지만 i = 3과 3에서 루프가 시작되었습니다.
이는 데이터시트의 첫 번째 인덱스 번호를 나타냅니다.
인덱스 번호는 왼쪽에서 1부터 차례로 흔들어 갑니다.
그래서, 이전에 별도로 시트를 삽입해 버리면, 동작이 잘 되지 않습니다.
매크로를 사용하는 환경에 맞추어 적절히 바꿀 필요가 있습니다.
이번은 데이터 시트 이외는 고정된 전제로 작성하고 있습니다.
그리고 마지막이 대입하는 값을 Worksheets(i).Range("B3").Value
색인 번호를 사용하여 설명하는 것입니다.
이렇게 해서 만약 데이터시트가 늘어난다고 해도 일절 손을 넣지 않고,
비슷한 처리를 할 수 있습니다.
극단적인 이야기, 1000건분의 데이터나 10000건분의 데이터도 취급할 수 있습니다.
마지막으로 매크로를 실행하고 집계한 후의 이미지를 게재해 둡니다.
Reference
이 문제에 관하여(Q9. 다른 워크시트에 셀 값을 복사하는 방법? ②), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/guren111/items/d12e69f9079df90fb1b0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)