VBA IF 다중 조건문 문의 드립니다.

VBA
작성자
김홍범
작성일
2021-10-06 09:27
조회
461
엑셀버전 : 엑셀2016

운영체제 : 윈도우10

안녕하세요 VBA 로 함수 등록하여 제품 면적을 자동으로 계산하는 것을 작성중에

계산이 잘안되어 문의 드립니다.

타입 BG1, BG2 를 계산할때

타입이 BG2 인데도 불구하고, BG1 계산식으로 계산이 되는 것 같습니다.

아래와 같이 AND 와 OR 을 같이 사용하는 경우에 어떻 방법으로 구분해야

조건문에 적합되는지요?

 

 

 

------------------------------------------------------------------------------------

Function SUPPORT_면적F(타입, SIZE, MARK_NO, L1, L2, 수량)

Dim C150, C250, C150PLATE
Dim C125, G6_1, G6_4, G_6, G7_PLATE
Dim H200, H200PLATE
Dim L65, L100
Dim CT50, G3_02
Dim PIPE_2, PIPE_3, PIPE_4, PIPE_5, PIPE_6, PIPE_8
Dim SQ200, SQ220, SQ260, SQ270
C150 = 0.52
'C150x75x6.5x10t'
C150PLATE = 0.01
'PLATE 140x65 '
H150 = 0.8
H150PLATE = 0.02
H200 = 1.08
'H200X200X8X12T'
H200PLATE = 0.02
'H200 의 PLATE 180X100'
C125 = 0.44
'C125X65X6X8T'
C250 = 0.83
'C250X90X9X13T'
G6_1 = 0.06
'1" 배관 PLATE 150X105'
G6_4 = 0.07
G6_6 = 0.08
G7_PLATE = 0.09
'G7 의 PLATE 및 GUIDE'
L65 = 0.26
CT50 = 0.41
G3_02 = 0.012
L100 = 0.4
PIPE_2 = 0.19
PIPE_3 = 0.28
PIPE_4 = 0.36
PIPE_5 = 0.44
PIPE_6 = 0.53
PIPE_8 = 0.69
SQ220 = 0.05
SQ200 = 0.04
SQ260 = 0.07
SQ270 = 0.07

 

If 타입 = "BG1" Or MARK_NO = "N" And MARK_NO = "N5" And MARK_NO = "N10" And MARK_NO = "N15" And MARK_NO = "N25" And MARK_NO = "E" And MARK_NO = "E10" And MARK_NO = "E25" And MARK_NO = "NE" Then
SUPPORT_면적F = ((L2 * PIPE_3 / 1000) + (CT50 * 50 * 2 / 1000)) + SQ220 + SQ200

ElseIf 타입 = "BG2" And MARK_NO = "N" And MARK_NO = "N5" And MARK_NO = "N10" And MARK_NO = "N15" And MARK_NO = "N25" And MARK_NO = "E" And MARK_NO = "E10" And MARK_NO = "E25" And MARK_NO = "NE" Then
SUPPORT_면적F = ((L2 * PIPE_6 / 1000) + (CT50 * 50 * 2 / 1000)) + SQ260 + SQ270

ElseIf 타입 = "H3" Or 타입 = "MC7" Then
SUPPORT_면적F = (((L1 + L1 + L2) * C150 / 1000) + (C150PLATE * 8)) * 수량 'PLATE 4개 이므로 8개 면'

ElseIf 타입 = "MC1" Or 타입 = "MC2" And SIZE = "65" And MARK_NO = "A" Or MARK_NO = "B" Then
SUPPORT_면적F = ((L1 + L2) * L65 / 1000) * 수량

ElseIf 타입 = "MC1" Or 타입 = "MC2" And SIZE = "100" And MARK_NO = "A" Or MARK_NO = "B" Then
SUPPORT_면적F = ((L1 + L2) * L100 / 1000) * 수량

ElseIf 타입 = "MC3" Or 타입 = "MC4" And SIZE = "65" And MARK_NO = "A" Or MARK_NO = "B" Then
SUPPORT_면적F = ((L1 + L1 + L2) * L65 / 1000) * 수량

ElseIf 타입 = "MC3" Or 타입 = "MC4" And SIZE = "100" And MARK_NO = "A" Or MARK_NO = "B" Then
SUPPORT_면적F = ((L1 + L1 + L2) * L100 / 1000) * 수량

ElseIf 타입 = "MC6" And SIZE = "65" And MARK_NO = "A" Or MARK_NO = "B" Or MARK_NO = "C" Then
SUPPORT_면적F = ((L1) * L65 / 1000) * 수량

ElseIf 타입 = "MC8" Then
SUPPORT_면적F = (((L1 + L1 + L2) * H150 / 1000) + (H150PLATE * 16)) * 수량

ElseIf 타입 = "MC9" And SIZE = "H200" And MARK_NO = 3 Then
SUPPORT_면적F = ((L1 * H200 / 1000) + (H200PLATE * 8)) * 수량

ElseIf 타입 = "G6" And SIZE = "1" Or SIZE = "2" And MARK_NO = "A" Then
SUPPORT_면적F = ((L1 * C125 / 1000) + (G6_1)) * 수량

ElseIf 타입 = "G6" And SIZE = "4" And MARK_NO = "A" Then
SUPPORT_면적F = ((L1 * C125 / 1000) + (G6_4)) * 수량

ElseIf 타입 = "G6" And SIZE = "6" And MARK_NO = "A" Then
SUPPORT_면적F = ((L1 * C125 / 1000) + (G6_6)) * 수량

ElseIf 타입 = "G7" And SIZE = "1" Or SIZE = "2" Or SIZE = "3" Or SIZE = "4" Or SIZE = "5" Or SIZE = "6" Or SIZE = "7" Or SIZE = "8" And MARK_NO = "A" Then
SUPPORT_면적F = ((L1 * C125 / 1000) + (G7_PLATE)) * 수량

ElseIf 타입 = "H4" Then
SUPPORT_면적F = (((L1 + L1 + L2) * H200 / 1000) + (H200PLATE * 8)) * 수량

ElseIf 타입 = "G8M" And SIZE = "18" Then
SUPPORT_면적F = ((L1 + L1 + L2 + L2) * C250 / 1000) * 수량

ElseIf 타입 = "CN1" And SIZE = "1" Or SIZE = "2" Or SIZE = "3" And MARK_NO = "A" Or MARK_NO = "B" Then
SUPPORT_면적F = ((L1) * L65 / 1000) * 수량

ElseIf 타입 = "G3" And MARK_NO = "1" Then
SUPPORT_면적F = (CT50 * 40 / 1000) * 수량

ElseIf 타입 = "G3" And MARK_NO = "2" Then
SUPPORT_면적F = (G3_01) * 수량

Else

SUPPORT_면적F = "함수확인"

End If

End Function

 

스크랩
공유
회원등급 : 3레벨
포인트 : 109 EP
총질문 : 1 개 (마감율 : 100%)
채택답변 : 0 개
전체 2

  • 2021-10-07 16:38
    채택된 답변

    @김홍범 님 If 타입 = "BG1" Or MARK_NO = "N" And MARK_NO = "N5" And MARK_NO = "N10" And MARK_NO = "N15" And MARK_NO = "N25" And MARK_NO = "E" And MARK_NO = "E10" And MARK_NO = "E25" And MARK_NO = "NE" Then

     

    이쪽에서 타입 변수가 BG2 여도 뒤 Mark No에서 일치하는 항목이 있어서 그럴 수 있습니다.

    지금 작성한 소스만으로는 함수 결과값을 예측하기 어려우니

    실제 사용하는 값을 작성하면 디버깅하는데 원할할것입니다.

     

    또 위 소스는 아래와 같이 개선하면 유지보수하는데 더 편할것입니다.

     

    If 타입 = "BG1" Or IsInArray(Array("N", "N5", "N10", "N15", "N25", "E", "E10", "E25", "NE"), MARK_NO) Then

    Else ...

    Private Function IsInArray(ByRef arr As Variant, text As Variant) As Boolean
    IsInArray = IsNumeric(Application.Match(text, arr, 0))
    End Function


  • 2021-10-06 19:12

    @김홍범 님 BG2값을 넣고 디버그를 통해 한 단계씩 보시면 어디서 잘못됬는지 아실꺼에요


전체 7,839
번호 카테고리 제목 작성자 작성일 추천 조회
알림
🎉 오피스 분야 30주 연속 1위! - 「 진짜쓰는 실무엑셀 」 전자책이 출간되었습니다! (4)
오빠두엑셀 | 2022.09.28 | 추천 5 | 조회 272
오빠두엑셀 2022.09.28 5 272
공지사항 함수/공식
[신규 기능 업데이트!] 👉 이제 게시글 작성시 스크린샷 복/붙이 가능합니다! 😎 (3)
오빠두엑셀 | 2022.08.04 | 추천 5 | 조회 1708
오빠두엑셀 2022.08.04 5 1708
공지사항 함수/공식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (97)
오빠두엑셀 | 2021.10.28 | 추천 125 | 조회 7486
오빠두엑셀 2021.10.28 125 7486
42696 VBA
New VBA 리스트박스 목록 선택 시 자동 누적 입력하기 안됨 해결방법 엑셀파일
GMART | 20:55 | 추천 0 | 조회 12
GMART 20:55 - 12
42695 파워쿼리/피벗
New 파워쿼리 병합 후 정렬에 대해서 질문드립니다. 엑셀파일첨부파일
월마리아 | 20:52 | 추천 0 | 조회 9
월마리아 20:52 - 9
42689 VBA
New 셀의 이미지를 복사하는 매크로... 첨부파일
실런 | 17:23 | 추천 0 | 조회 20
실런 17:23 - 20
42686 문서서식
New 영상 자료파일
뿌삐뿌찌빵꾸똥 | 14:15 | 추천 0 | 조회 25
뿌삐뿌찌빵꾸똥 14:15 - 25
42684 문서서식
New 조건부 서식 색 적용 안됨 첨부파일 (3)
아드키 | 12:48 | 추천 0 | 조회 27
아드키 12:48 - 27
42678 VBA
New VBA코드 오류뜨는데 왜 일까요ㅠㅠ 첨부파일 (2)
엑셀공부중 | 01:18 | 추천 0 | 조회 28
엑셀공부중 01:18 - 28
42676 함수/공식
New 함수조언 구합니다. 엑셀파일
엑셀공부중 | 2022.09.30 | 추천 0 | 조회 29
엑셀공부중 2022.09.30 - 29
42672 기능/도구
New 조건부 서식이 적용되지 않습니다. 첨부파일
dollffin | 2022.09.30 | 추천 0 | 조회 30
dollffin 2022.09.30 - 30
42670 피벗테이블
New 관계형데이터베이스 파워피벗 엑셀파일 (2) 답변완료
겸둥이 | 2022.09.30 | 추천 0 | 조회 37
겸둥이 2022.09.30 - 37
42669 함수/공식
New 출퇴근 자료를 이용하여 근태 테이블 작성하기 (index, match, iferror 함수 사용) 엑셀파일 (1)
공학 | 2022.09.30 | 추천 0 | 조회 38
공학 2022.09.30 - 38
42667 VBA
New M365 2206 버전의 VBA 자동화 오류 관련하여 문의를 드리고자 합니다
lililililil | 2022.09.30 | 추천 0 | 조회 24
lililililil 2022.09.30 - 24
42665 함수/공식
New if 함수 논리 설정 시 범위 선택 첨부파일 (2)
구찌갱 | 2022.09.30 | 추천 0 | 조회 29
구찌갱 2022.09.30 - 29
42664 문서서식
New 엑셀 날짜관련 질문드립니다. 첨부파일 (1)
엑셀잘할래요 | 2022.09.30 | 추천 0 | 조회 30
엑셀잘할래요 2022.09.30 - 30
42661 함수/공식
New 함수 조언구합니다. 엑셀파일 (2) 답변완료
엑셀공부중 | 2022.09.30 | 추천 0 | 조회 38
엑셀공부중 2022.09.30 - 38
42660 기능/도구
New 27인치 4K모니터로 엑셀을 하면... (1)
9 Crimes | 2022.09.30 | 추천 0 | 조회 45
9 Crimes 2022.09.30 - 45
42656 함수/공식
New 떨어진 여러 셀간의 AVERAGEIF 함수 사용 (1) 답변완료
아홉열 | 2022.09.30 | 추천 0 | 조회 35
아홉열 2022.09.30 - 35
42655 피벗테이블
New 피벗테이블에서 날짜 값 중에 "월"이 표시되었으면 합니다. 첨부파일 (7) 답변완료
twou**** | 2022.09.30 | 추천 0 | 조회 42
twou**** 2022.09.30 - 42
42653 VBA
New 엑셀 함수가 적용된 셀 영역에 round를 하는 방법 엑셀파일 (9) 답변완료
우산쓰자 | 2022.09.30 | 추천 0 | 조회 31
우산쓰자 2022.09.30 - 31
42651 함수/공식
New 수식 사용 시 결과값 오류 문의 엑셀파일 (3) 답변완료
병알 | 2022.09.30 | 추천 0 | 조회 28
병알 2022.09.30 - 28
42650 피벗테이블
New 관계형데이터 -파워피벗 관련 질문드려요. 엑셀파일 (2) 답변완료
겸둥이 | 2022.09.30 | 추천 1 | 조회 31
겸둥이 2022.09.30 1 31
42648
New OFFSET함수 관련 문의 첨부파일 (9)
콕콕이 | 2022.09.30 | 추천 0 | 조회 41
콕콕이 2022.09.30 - 41
42643 기능/도구
New 셀 병합 관련 알림 끄는 법 첨부파일 (1)
이종현 | 2022.09.30 | 추천 0 | 조회 29
이종현 2022.09.30 - 29
42635 VBA
New 원드라이브에 공유된 엑셀간에 VBA를 사용해서 데이터를 가져올수 있을까요 ?
헬롱 | 2022.09.30 | 추천 0 | 조회 30
헬롱 2022.09.30 - 30
42632 파워쿼리/피벗
New 파워쿼리 내에서 vlookup함수와 같은 기능이 없을까요? 엑셀파일첨부파일 (3)
월마리아 | 2022.09.30 | 추천 0 | 조회 46
월마리아 2022.09.30 - 46
42621 기능/도구
New 셀 하나당 그래프 하나를 만드는 방법이 궁금합니다. 첨부파일 (2) 답변완료
XD | 2022.09.29 | 추천 0 | 조회 45
XD 2022.09.29 - 45
42619 함수/공식
New 행방향으로으로 정열된 동일항목의 비고를 열방향으로 정열하는 방법 엑셀파일첨부파일 (8)
마운틴 | 2022.09.29 | 추천 0 | 조회 45
마운틴 2022.09.29 - 45
42618 VBA
New 블로그 문서 발행량 크롤링 서식을 다른 파일에서 이용하려면? 첨부파일 (3) 답변완료
XD | 2022.09.29 | 추천 0 | 조회 27
XD 2022.09.29 - 27
42612 함수/공식
New 다중 조건으로 하나의 결과값을 도출하고 싶습니다. 엑셀파일첨부파일 (2) 답변완료
배워배움 | 2022.09.29 | 추천 0 | 조회 38
배워배움 2022.09.29 - 38
42610 피벗테이블
New 엑셀 문서 재정리및 재정렬(부탁드려요 ㅠㅠ) 엑셀파일 (1)
u2y1gz71vdif | 2022.09.29 | 추천 0 | 조회 40
u2y1gz71vdif 2022.09.29 - 40
42607 기능/도구
New 엑셀 프로그램 2개를 하나의 파일로 합치는 방법이 있을까요? 엑셀파일 (2) 답변완료
노무인턴 | 2022.09.29 | 추천 0 | 조회 46
노무인턴 2022.09.29 - 46