[VBA]For-Next문의 이해

반복 횟수만큼 실행문을 반복할 때 사용한다.

Option Explicit

Function GetMean(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double

L = LBound(Score, 1)
U = UBound(Score, 1)

sum = 0
For i = L To U
sum = sum + Score(i)
Next i

GetMean = sum / (U – L + 1)
End Function

이상은 평균을 구하는 함수이다. 다음은 분산(Variance)를 구하는 함수이다.

Function GetVariance(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double
Dim avg As Double

L = LBound(Score, 1)
U = UBound(Score, 1)

avg = GetMean(Score)

sum = 0
For i = L To U
sum = sum + (Score(i) – avg) ^ 2
Next i

GetVariance = sum / (U – L + 1)
End Function

다음은 표준편차를 구하는 함수이다.

Function GetStandardError(Score() As Double) As Double
Dim L As Long
Dim U As Long
Dim i As Long
Dim sum As Double
Dim avg As Double

L = LBound(Score, 1)
U = UBound(Score, 1)

avg = GetMean(Score)

sum = 0
For i = L To U
sum = sum + (Score(i) * Score(i))
Next i

GetStandardError = (sum / (U – L + 1)) – (avg * avg)
End Function

위에는 오류 코드(버그)가 숨겨 있다. 잘 찾아보아 보세요.

[VBA]If문과 Select문의 비교

프로그래밍의 가장 기본 중의 하나가 If문에 의한 실행의 분기일 것이다.

단순한 분기에서부터 다중 분기까지 가능하다.

<문제>

성적 점수에 따라 평점(A, B, C, D, F 등으로 표시되는 것. 학점하고 구분)을 반환하는 함수를 작성하라.

1) If문을 이용한 함수 1

조건이 굉장히 복잡하게 보이지만, 계산 논리를 한번에 알아볼 수 있다. 이렇게 다중 분기하는 경우 다음과 같이 Select문을 생각해 볼 수 있다.

2)Select문을 이용한 함수

이 함수는 심각한 문제를 안고 있다. 즉, 85.5와 같은 점수에 대해서는 “F”를 줄 수 있기 때문이다. Case 간에 비어있는 범위가 생길 수 있다는 점에서 유의해야 한다.

3)다시 If문을 이용한 함수

처음 If문을 간결하게 다시 작성하면 다음과 같이 할 수 있다. 여기서 중요하게 볼 것은 처음 조건문은 그 다음 조건문의 필터 역할을 한다는 것이다. 예를들어 85.5점은 처음 조건문부터해서 두번째 조건문까지 만족하지 않는다. 그러나, 세번째 조건문에서는 통과하여 평점을 받게 된다. 즉, 세번째 조건문에 ’90보다 작다’는 필터가 두번째의 조건문을 통해서 만들어진 것이다.

주의사항 : 제대로 된 필터 기능을 사용하고자 한다면, 점수가 고득점부터 저득점으로 내려오든, 저득점에서 고득점으로 올라가든, 일정한 순서로 조건문을 배열해야 한다는 점이다.

정령 Select문으로는 해결할 수 없는가?
이것을 Select문으로 바꾸면 다음과 같이 될 것이다.

4) 다시 Select문을 이용한 함수

Is라는 키워드를 사용하면 다음과 같이 작성할 수 있다.

이 방법도 Case 점수가 일정한 순서로 배치되어 가능하다는 점을 유의해야 한다.

[Excel]Range와 Cells

1)  Range 이해

  • Range(“K7”) –> K7 셀 (단일 셀)
  • Range(“A3:B4”) –> A3:B4 영역 (단일 영역)
  • Range(“A1,A4,A5,B4,K3,K5,K7”) –> A1,A4,A5,B4,K3,K5,K7 셀 (다중 셀)
  • Range(“A1:A5, K3:K7”) –> A1:A5, K3:K7 영역 (다중 영역)
  • Range(“B:B”) –> B열 전체 (단일 열)
  • Range(“2:2”) –> 2행 전체 (단일 행)
  • Range(“B:K”) –> B:K열 전체 (다중 열)
  • Range(“3:4”) –> 2:5행 전체 (다중 행)
  • Range(“B:B, E:E, D:D”) –> B, E, D 열 전체
  • Range(“1:1, 3:3, 4:4”) –> 1, 3,4행 전체
  • Range(Range(“B1”), Range(“K3”)) –> B1:K3 영역
  • Range(Cells(1,2), Cells(3,4)) –> B1:D3 영역

2) Cells

  • Cells(3,4) –> Range(“D3”)와 같음
  • Cells는 행(3), 열(4)의 순서이고 Range는 열(D), 행(3)의 순서임

공기상태 계산 엑셀 프로그램(Visual Air 2010)

건축환경 및 설비 분야에서 공기의 상태값(psychrometrics)을 아는 것이 매우 중요하다.

(Excepted from Wikipedia) Although the principles of psychrometry apply to any physical system consisting of gas-vapor mixtures, the most common system of interest is the mixture of water vapor and air, because of its application in heating, ventilating, and air-conditioning and meteorology. In human terms, our thermal comfort is in large part a consequence of not just the temperature of the surrounding air, but (because we cool ourselves via perspiration) the extent to which that air is saturated with water vapor.
공기 상태를 계산하는 엑셀 프로그램을 여기에 올린다.

사용전 엑셀 보안 설정
– 도구 -> 매크로 -> 보안 -> “보안 수준” 탭에서 “보통”을 선택 (Excel 2003이하)

사용법
1) 시트 안에 있는 “계산기” 단추를 누른다.
사용자 삽입 이미지2) 알고 있는 두 값을 선택해서 그 값을 입력한 다음 “계산” 단추를 누른다.
예) 건구온도 20도, 상대습도 55%를 입력해서 나머지 값을 구하고자 할 경우 다음과 같이 입력한다.
사용자 삽입 이미지
3) 계산결과는 엑셀 시트와 대화상자 동시에 출력이 된다.
사용자 삽입 이미지4) 첨부 엑셀 파일(You can download the following file)

psychrometrics.xls

[프로그램등록] Visual Air (software for psychrometic chart)

공기의 물리적인 상태값은 공기와 관련한 수치계산의 기본이 된다. 공조 설비에서 취급하는 공기는 습공기이기 때문에, 공기조화에 관한 계산은 습공기의 성질을 충분히 파악한 상태에서 가능하다. 이런 습공기의 상태값에는 밀도, 수증기압, 절대습도, 상대습도, 노점온도, 습구온도 등과 함께 습공기가 안고 있는 열량인 엔탈피가 있다.
습공기의 상태값은 표로 제시되기도 하지만, 모든 경우에 대한 자료를 주지 못한다. 이에 가장 기본적인 자료로서 습공기선도를 사용하게 되는데, 습공기의 상태값을 구하는데 사용됨과 동시에 공기조화 프로세스를 설계, 해석하는데도 사용된다.
따라서, 습공기에 대한 이론적인 것을 살펴보고, 상태값을 계산하는 함수와 함께 습공기선도를 그리는 함수를 작성하는 프로그램을 만들었다.
프로그램 제작은 사용자 인터페이스가 좋은 윈도우 환경에서 쓸 수 있게 Visual Basic 6.0 Professional Version으로 하였다.

사용자 삽입 이미지
Visual Air 실행 화면

이 프로그램에 대한 등록증은 아래와 같다.
사용자 삽입 이미지

[VBA]macro와 vba

매크로 기록은 조작한 명령을 기록하는 것으로 처리를 자동화할 때 편리한 기능이다. 조건에 따라 처리를 분기시키거나 원하는 값을 구할 때까지 계산을 반복시키는 복잡한 처리는 불가능하다. 이것은 VBA의 범주로 넘어간다. VBA를 시작한 사람은 우선 매크로 기록에서 전체를 이해하고, 다음에 Visual Basic Editor를 사용하여 코드를 추가/수정하는 것으로 원하는 매크로로 바꾸는 것이 VBA를 이해하고 실행하는데 효과적인 방법이다.

출처 : Katsuyuki Watanabe et al, 감춰놓고 혼자보는 엑셀비밀노트 970, p.652

[VBA]PERT/CPM를 위한 엑셀 (Excel Spreadsheet for Critical Path Mathod)

간단한 작업 입력으로 PERT/CPM의 주요 계산을 수행하는 프로그램이다.

공장 또는 작업현장에 있어서의 원자재로부터 최종제품에 이르기까지의 자재,제품조립 및 종합 조립의 흐름을 순서 정연하게 능률적인 방법으로 계획하고 공정을 결정하고 예정을 세워 작업을 할당하고 감독하는 절차가 공정관리이다.

작업 흐름을 순서정연하게 하는 방법 중의 하나가 주공정법(critical path method)으로 본 프로그램은 주공정법을 수행할 수 있도록에 작성되었다.

작업명, 설명, 소요일수, 선행작업 등을 입력하여 공정시간과 여유시간을 계산하여 출력하고, 작업흐름을 한 눈에 볼 수 있도록 간트 도표를 출력한다.

엑셀 프로그램의 특징

1) 작업의 공정시간(EST, EFT, LST, LFT)을 계산한다.
2) 작업의 여유시간(TF, DF, FF)을 계산한다.
3) 작업의 주공정(Critical Path) 여부를 판단한다.
4) 작업의 바 차트를 그려준다.

프로그램의 구성
1) 사용설명서 시트 -> 사용을 위한 주의사항이 있음 (매크로 사용시 필독)
2) 입력 시트 -> 사용자가 직접 입력하는 부분과 계산 부분이 함께 있음
3) 바 차트 시트

프로그램 설명

사용자 삽입 이미지

Download file : CriticalPath.XLS

1) 입력시트에서 작업명, 설명, 소요일수, 선행작업 등을 입력한다.
– 작업명은 알파벳으로 한글자 이상 입력한다
– 설명에는 작업 내용을 기술한다.
– 선행작업이 둘 이상일 때는 쉼표로 구분한다.
2) 입력이 완료되면, 계산실행 단추를 누른다.
3) 공정시간과 여유시간을 계산하여 출력한다. 또한 간트도표를 별도의 시트에 출력한다.

참고한 논문에서는 엑셀의 내장 함수를 이용하여 계산하였으나,
본 엑셀은 내부적으로 비주얼베이직(Visual Basic)을 이용하였다.

If you want to read an english post, please click here.