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

VBA
작성자
김홍범
작성일
2021-10-06 09:27
조회
58
엑셀버전 : 엑셀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

 

회원등급 : 씨앗등급
포인트 : 29 EP
총질문 : 1 개 (마감율 : 0%)
채택답변 : 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값을 넣고 디버그를 통해 한 단계씩 보시면 어디서 잘못됬는지 아실꺼에요


전체 4,249
번호 카테고리 제목 작성자 작성일 추천 조회
4233 함수/공식
New x,y,z로 이루어진 방정식 두 개를 '해 찾기' 기능으로 풀 수 있을까요? (1)
고대하라 | 12:08 | 추천 0 | 조회 17
고대하라 12:08 0 17
4232 기능/도구
New 셀선택시 설명 팝업
HYODONG | 11:49 | 추천 0 | 조회 13
HYODONG 11:49 0 13
4231 피벗테이블
New 정규화에 대한 문의 첨부파일
광개토태왕 | 10:05 | 추천 0 | 조회 17
광개토태왕 10:05 0 17
4230 차트/그래프
New 원형 차트에 슬라이서 연결 시 표시 방법 문의 드립니다.
이찬우 | 09:48 | 추천 0 | 조회 14
이찬우 09:48 0 14
4229 함수/공식
New 대량의 데이터를 가지고 있는 다른 시트에서 중복값찾기 (4) 답변완료
라운 | 00:07 | 추천 0 | 조회 39
라운 00:07 0 39
4228 VBA
New 시간이 겹치거나 겹친 시간에 동일 이름이 중복될 경우 찾을려면 어떻게 하면 될까요? (1)
셀라푸우 | 2021.10.20 | 추천 0 | 조회 27
셀라푸우 2021.10.20 0 27
4227 VBA
New 데이터 범위설정 매크로 수식 (2)
젬마 | 2021.10.20 | 추천 0 | 조회 49
젬마 2021.10.20 0 49
4226 피벗테이블
New 피벗테이블 구성 (1)
광개토태왕 | 2021.10.20 | 추천 0 | 조회 38
광개토태왕 2021.10.20 0 38
4225 VBA
New (초보..)vba 웹크롤링(selenium 사용) 문자를 읽어오지않아 문의드립니다!! (4)
윌터너 | 2021.10.20 | 추천 0 | 조회 29
윌터너 2021.10.20 0 29
4224 함수/공식
New 함수 자동입력?
흑형 | 2021.10.20 | 추천 0 | 조회 51
흑형 2021.10.20 0 51
4223 기능/도구
New 구글 스프레드시트 이미지 인쇄 문제 (1)
민 쌤 | 2021.10.20 | 추천 0 | 조회 30
민 쌤 2021.10.20 0 30
4222 파워쿼리/피벗
New 파워쿼리 입문입니다. 시트 합치는 방법 질문드립니다. 첨부파일 (2)
월마리아 | 2021.10.19 | 추천 0 | 조회 49
월마리아 2021.10.19 0 49
4221 함수/공식
New 공부용 일정표 관련해서 자동 생성 질문드립니다.
1234느린열차 | 2021.10.19 | 추천 0 | 조회 31
1234느린열차 2021.10.19 0 31
4220 함수/공식
New 변화되는 값 추적하기 첨부파일 (1)
아자사랑 | 2021.10.19 | 추천 0 | 조회 47
아자사랑 2021.10.19 0 47
4219 함수/공식
New 셀에 포함된 특정단어 추출 함수 첨부파일 (5) 답변완료
마운틴 | 2021.10.19 | 추천 0 | 조회 68
마운틴 2021.10.19 0 68
4218 피벗테이블
New 피벗테이블에서 열 (레이블) 상위 10% 필터링 방법 문의 첨부파일 (3)
김성현19 | 2021.10.19 | 추천 0 | 조회 35
김성현19 2021.10.19 0 35
4217 함수/공식
New 다중조건으로 매출 순위 구하기 첨부파일 (8) 답변완료
newstar | 2021.10.19 | 추천 0 | 조회 56
newstar 2021.10.19 0 56
4216 파워쿼리/피벗
New Expression.Error: Table 형식의 값을 Binary 형식으로 변환할 수 없습니다 첨부파일 (3)
슝슝 | 2021.10.19 | 추천 0 | 조회 30
슝슝 2021.10.19 0 30
4215 함수/공식
New 행에서 시간만 나타내기 첨부파일 (6) 답변완료
드래군 | 2021.10.19 | 추천 0 | 조회 52
드래군 2021.10.19 0 52
4214 기능/도구
New QR 코드 만들기 첨부파일 (1)
맑고 향기롭게 | 2021.10.19 | 추천 0 | 조회 33
맑고 향기롭게 2021.10.19 0 33
4213 함수/공식
New --ISNUMBER의 의미 (2)
마운틴 | 2021.10.19 | 추천 0 | 조회 38
마운틴 2021.10.19 0 38
4212 함수/공식
New 엑셀 수식 가로로 하는법 첨부파일 (4)
KT | 2021.10.19 | 추천 0 | 조회 60
KT 2021.10.19 0 60
4211 함수/공식
New 유효성검사를 통해 다른시트의 데이터 중 매출액이 있는 데이터만 불러오는 방법 첨부파일 (6)
emp**** | 2021.10.19 | 추천 0 | 조회 42
emp**** 2021.10.19 0 42
4210 VBA
New 이미지넣는 매크로, 다시 열어보니 사진이 안떠요 (4) 답변완료
흑형 | 2021.10.19 | 추천 0 | 조회 41
흑형 2021.10.19 0 41
4209 함수/공식
New 조건에 맞는 값 추출될 수 있도록 수식 질문드립니다 첨부파일 (1) 답변완료
젬마 | 2021.10.19 | 추천 0 | 조회 48
젬마 2021.10.19 0 48
4208 기능/도구
New 하나 이상의 수식이 허용된 8,192자 제한보다 깁니다.
City0311 | 2021.10.19 | 추천 0 | 조회 21
City0311 2021.10.19 0 21
4207 VBA
New 재질문 : ParseJSON 함수 첨부파일 (3) 답변완료
하늘의 꿈 | 2021.10.19 | 추천 0 | 조회 29
하늘의 꿈 2021.10.19 0 29
4206 VBA
New 다른시트명 불러오기 vba (3)
야야야야구르트 | 2021.10.18 | 추천 0 | 조회 54
야야야야구르트 2021.10.18 0 54
4205 VBA
New 유저폼에서 리스트 검색 후, 선택목록 내용 보기 첨부파일 (7)
007 | 2021.10.18 | 추천 0 | 조회 51
007 2021.10.18 0 51
4204 함수/공식
New 변하는 변수값 고정시키기 첨부파일 (3)
아자사랑 | 2021.10.18 | 추천 0 | 조회 34
아자사랑 2021.10.18 0 34