5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
해결 엑셀2019윈도우11

vba 고수님 부탁드립니다!!

호두♡
7월 30일 조회 1,315
첨부된 사진처럼 시트1 과 시트 2로 나누어서 코드를 작성했습니다.

 

서로 다른건 "다름"으로 표기하고 싶은데 "다름"이라고 노출이 안됩니다 ㅠㅠ

 

else 를 사용해 보아도 똑같거다 다르게 도출됩니다 ㅠㅠ 부탁드립니다!!
111.png

댓글 7

마법의손 7월 30일
참고하세요
호두♡ 작성자 7월 30일
@마법의손 님 정말감사합니다!!

혹시 for eaxh 문으로 가능하나요?부탁드립니다!!
마법의손 7월 30일
@호두♡ 님 for each문은 애용하는 반복문이지만

여기선 변수사용법에서 비효율적이라 적절하지 않아요.

 
호두♡ 작성자 7월 30일
@마법의손 님 너무너무 감사합니다!!

for문을 for each문으로 바꿔서 해보려니 너무 어려운거 같아요ㅠ

몇일 고민했는데 감사한 답변 정말감사합니다!!
춘식 채택된 답변 8월 1일
for each를 사용하는 방법입니다.

Sub 비교()

Range("d1").CurrentRegion.ClearContents

Dim a As Range
Dim aa As Range

Set a = Sheet1.Range("a1:a15")
Set aa = Sheet2.Range("a1:a15")

For Each c In a
For Each cc In aa
If c = cc Then
c.Offset(0, 3).Value = "같음"
End If
If c <> cc Then
If c.Offset(o, 3).Value <> "같음" Then
c.Offset(0, 3).Value = "다름"
End If
End If
Next
Next

End Sub

 

 
춘식 8월 1일
@춘식 님 일반적으로 같은 크기의 범위를 비교할때는 for each를 한 번만 쓰는게 맞는데

이 경우는 for each를 중첩으로 썼기 때문에, sheet1 셀 1개에 대해서 sheet2의 모든 셀 값을 크로스체크하게 됩니다.
시트1의 1의 값을 시트2의 1부터 15번째셀까지 다 비교하고, 다음 시트1의 2 값을 또 시트2의 1부터 15번째 셀까지 다 비교하고... 이걸 시트1의 셀 갯수만큼 반복합니다. 15x15 = 225번 비교.

그 경우, 적절한 if를 사용하지 않으면 의미없는 마지막의 비교값으로 덮어씌워집니다. 그렇다고 러프하게 exit for를 해버리면, 의도치 않은 시점에 exit 되는 경우가 많으니 좋은 방법은 아닐듯 합니다.

그러므로 하나라도 같은 경우 같음이 나오게끔 같음을 우선값으로 상정하고
d셀의 출력값이 "같음"이 아닌 경우에만, "다름"을 넣을수 있도록 if문을 하나 더 넣어주면 간단하게 해결될듯합니다.
호두♡ 작성자 8월 1일
@춘식 님 코드부터 설명까지 너무너무 감사합니다!! for 와 for each로 서로 비교했을때  for each 속도가 너무 느려서 궁금했는데

ak님 덕분에 배운거 같습니다!! 설명해주신 내용 잘 이해해서 사용해보겠습니다!! 너무 감사합니다 ^^

질문답변 게시판의 최근 글

스크랩 완료