2016-08-16 2 views
0

제가 개발중인 파일을 줄여야하고 VBA를 사용하는 좋은 방법이 있습니다. 불행히도 나는 아직 VBA에서 발전하지 못했고 이것을 설계하는 데 어려움을 겪고있다. 나는 세 가지 스트림으로 구성 목록의 가격을 가지고, 나는 아래와 같이 하나에 결합하려는 :IF와 Vlookup을 결합한 VBA로 코드를 작성하십시오

Stream  Site   Brand Code Price 
Mainstream Boston  Brand 01  Formula 
Midstream New York  Brand 02 
Midstream Los Angeles Brand 02 

을 현재 나는 기본적으로 다음과 같은 작업을 수행하는 공식 사용하고 있습니다 :

=IF(AND(stream="mainstream",Site = "Boston"),vlookup(Brandcode,list 1, 2,0),IF(ANd(stream="midstream", Site = "Boston", vlookup(Brandcode,list 2, 2,0),...)) 

공식을 실제로 잘 작동합니다. 문제는 단지이 하나 이상의 다른 많은 조건을 테스트하기 때문에 파일이 매우 무거워 져서 함수 나 서브 루틴을 만들 때 VBA 코드를 만들고 싶었지만 이해하려고 애 쓰고 있습니다. 그것을하는 방법.

감사

답변

1

이 실제로 대신 명명 된 범위를 사용하여 VBA를 사용하지 않고 달성 할 수있다. 공식을 보면 streamsite의 조합에 따라 조회 범위가 달라지는 것이 분명합니다.

각 조회 범위에 대해 Named Range을 만들 수 있습니다. 이렇게하려면 첫 번째 조회 그룹을 포함하는 셀 범위를 강조 표시하십시오 (Midstream New York을 예로 들어 봅시다). 그런 다음 Ctrl + F3을 눌러 Name Manager을 엽니 다. 마지막으로이 그룹에 MidstreamNewYork이라는 이름을 지정하십시오. (참고 : 이름에는 공백을 포함 할 수 없습니다.)

다음으로 Vlookup 기능을 업데이트 할 수 있습니다. 조회가 동적이기 때문에 더 이상 IF(AND... 구성 요소를 포함 할 필요가 없습니다. 의 당신이 행 2에 수식을 입력한다고 가정하자 공식은 다음과 같습니다

=VLOOKUP(C2,INDIRECT(SUBSTITUTE(A2&B2, " ", "")),2,FALSE) 

가의 수식을 무너 뜨리는 보자. ?. (1) C2 단지 brandcode이다 (I 그것이 열에 C. (2) The INDIRECT function treats a 문자열 as a 범위 . We are passing in Cells A2 and B2 , which are "Midstream" and "New York", respectively. We use the 대체 function to remove the spaces since they aren't allowed. So now, we are looking up a named range called MidstreamNewYork` (익숙한 음성)이었다 상정 (3) VLOOKUP 나머지 표준은 : 룩업 두 번째 항목을 입력하고 일치 항목 만 일치하십시오.

요구 사항을 충족하는지 알려주세요.