사용자정의함수에 3번 문제 중에
비고는 제품명에서 mg앞의 숫자가 100이상이면 해당 숫자를 100으로 나눈 값만큼 ■를 반복해서 표시하고 그렇지않으면 빈칸으로 표시하라는 문제에
식이
if mid(제품명,len(제품명)-4,3)*1>=100 then
이 부분에서 len(제품명)-4를 하는 이유는 무엇이며, *1은 왜 하는 건가요?
그리고
fn비고=fn비고&"■" 는 무슨 의미인가요?
또
for a 랑 next a 는 무슨 의미인가요?
안녕하세요.
문제의 조건 중
제품명에서 “mg” 앞의 숫자가 100 이상이면
이라는 조건이 있습니다.
파일에서 제품명을 확인하면
건웅 로딘정 100mg
국제 구루메포미정 250mg
와 같이
문자열의 길이는 다르지만 모두 mg라는 글자 앞에 숫자가 2자리 혹은 3자리인 것을 확인할 수 있습니다.
예를 들어 제품명이
건웅 로딘정 100mg
라면,
Mid(제품명, Len(제품명)-4, 3)*1
- Len(제품명)-4 : 제품명 전체 길이에서 4를 뺍니다. 결과는 12-4 = 8입니다.
- MID(제품명, 8, 3) : 제품명의 8번째 자리에서 3글자를 추출합니다.
건웅 로딘정 100mg
공백을 포함해서 8번째 자리는 100의 1이고 여기서 3글자를 추출하면 100이 됩니다.
- 100 * 1 : 추출된 100은 문자입니다. 그래서 계산을 위해 *1을 수행하여 숫자로 만드는 것입니다.
이제 앞선 수식에 넣으면 아래와 같이 됩니다.
IF 100>=100 then
mg 앞의 숫자가 2글자인 경우에는 빈공백과 함께 " 90"이 추출되는데, 여기에 *1을 하면 90으로 인식됩니다.
For 문은 아래 형식이 기본 형식입니다.
For 초기값 to 최종값 step 증가분
//반복되어 실행될 코드
Next
예를 들어
For a=1 to 10
a=a+1
Next a 라면
a는 1부터 10까지 반복되면서 누적합계를 구하는 코드가 됩니다.
For문은 a의 값이 10보다 작지 않은지 확인 하고 1~10 사이의 수라면
a=a+1을 실행합니다.
next a 를 만나면 다시 for 문의 시작으로 제어가 이동합니다.
다시 a가 1~10 사이의 수인지 확인하고,
1~10 사이의 수라면 a=a+1을 수행하고, 그렇지 않으면 Next a 다음으로 제어를 이동시키며 For문을 빠져나옵니다.
a는 변수로 변하는 값을 저장합니다.
1부터 Mid(제품명, Len(제품명) - 4, 3) / 100 의 계산 값까지 변합니다.
For 문이 Next 문을 만나 한 바퀴 돌면 1씩 증가하게 되죠.
변수 이름은 임의로 지정 가능합니다.
For문을 실행하다가 Next를 만나면
다시 For문으로 돌아가고 변수 a는 다음 값인 1 증가된 값을 가지고 For문이 실행됩니다.
For문으로 돌아갔는데, 증가된 a가 Mid(제품명, Len(제품명) - 4, 3) / 100 값보다 커지면 For문이 종료됩니다.
For문을 도는 동안 코드의 변화는 다음과 같습니다.
fn기타 = fn기타 & "■"
a가 1일때 실행하면 아무것도 입력되어 있지 않은 fn기타의 값과 "■"를 연결하여 fn기타에 넣으므로, fn기타에는 "■"가 들어가 있습니다.
a가 2일때 실행하면 fn기타에 입력되어 있던 "■"에 "■"를 연결하여 fn기타에 저장하므로 "■■"가 됩니다.
a가 3일때 실행하면 fn기타에 입력되어 있던 "■■"에 "■"를 연결하여 fn기타에 저장하므로 "■■■"가 됩니다.
연결하여 표시하기 위해 &를 이용합니다.
기존의 fn기타에 입력되어 있는 값에 "■"를 하나 더 연결하여 표시하는 것입니다.
오늘도 즐거운 하루 되세요.
-
관리자2021-11-09 12:43:13
안녕하세요.
문제의 조건 중
제품명에서 “mg” 앞의 숫자가 100 이상이면
이라는 조건이 있습니다.
파일에서 제품명을 확인하면
건웅 로딘정 100mg
국제 구루메포미정 250mg
와 같이
문자열의 길이는 다르지만 모두 mg라는 글자 앞에 숫자가 2자리 혹은 3자리인 것을 확인할 수 있습니다.
예를 들어 제품명이
건웅 로딘정 100mg
라면,
Mid(제품명, Len(제품명)-4, 3)*1
- Len(제품명)-4 : 제품명 전체 길이에서 4를 뺍니다. 결과는 12-4 = 8입니다.
- MID(제품명, 8, 3) : 제품명의 8번째 자리에서 3글자를 추출합니다.
건웅 로딘정 100mg
공백을 포함해서 8번째 자리는 100의 1이고 여기서 3글자를 추출하면 100이 됩니다.
- 100 * 1 : 추출된 100은 문자입니다. 그래서 계산을 위해 *1을 수행하여 숫자로 만드는 것입니다.
이제 앞선 수식에 넣으면 아래와 같이 됩니다.
IF 100>=100 then
mg 앞의 숫자가 2글자인 경우에는 빈공백과 함께 " 90"이 추출되는데, 여기에 *1을 하면 90으로 인식됩니다.
For 문은 아래 형식이 기본 형식입니다.
For 초기값 to 최종값 step 증가분
//반복되어 실행될 코드
Next
예를 들어
For a=1 to 10
a=a+1
Next a 라면
a는 1부터 10까지 반복되면서 누적합계를 구하는 코드가 됩니다.
For문은 a의 값이 10보다 작지 않은지 확인 하고 1~10 사이의 수라면
a=a+1을 실행합니다.
next a 를 만나면 다시 for 문의 시작으로 제어가 이동합니다.
다시 a가 1~10 사이의 수인지 확인하고,
1~10 사이의 수라면 a=a+1을 수행하고, 그렇지 않으면 Next a 다음으로 제어를 이동시키며 For문을 빠져나옵니다.
a는 변수로 변하는 값을 저장합니다.
1부터 Mid(제품명, Len(제품명) - 4, 3) / 100 의 계산 값까지 변합니다.
For 문이 Next 문을 만나 한 바퀴 돌면 1씩 증가하게 되죠.
변수 이름은 임의로 지정 가능합니다.
For문을 실행하다가 Next를 만나면
다시 For문으로 돌아가고 변수 a는 다음 값인 1 증가된 값을 가지고 For문이 실행됩니다.
For문으로 돌아갔는데, 증가된 a가 Mid(제품명, Len(제품명) - 4, 3) / 100 값보다 커지면 For문이 종료됩니다.
For문을 도는 동안 코드의 변화는 다음과 같습니다.
fn기타 = fn기타 & "■"
a가 1일때 실행하면 아무것도 입력되어 있지 않은 fn기타의 값과 "■"를 연결하여 fn기타에 넣으므로, fn기타에는 "■"가 들어가 있습니다.
a가 2일때 실행하면 fn기타에 입력되어 있던 "■"에 "■"를 연결하여 fn기타에 저장하므로 "■■"가 됩니다.
a가 3일때 실행하면 fn기타에 입력되어 있던 "■■"에 "■"를 연결하여 fn기타에 저장하므로 "■■■"가 됩니다.
연결하여 표시하기 위해 &를 이용합니다.
기존의 fn기타에 입력되어 있는 값에 "■"를 하나 더 연결하여 표시하는 것입니다.
오늘도 즐거운 하루 되세요.