[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)의 순서임

[VBA]TwipsPerPixel

비주얼 베이직 6.0이하에서는 화면의 크기를 트윕(twip)으로 표시한다.

VBA에서는 없기에 다음과 같은 함수를 이용해야 한다. (source : MSDN)

공기상태 계산 엑셀 프로그램(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

XML과 .NET

.NET의 XML DOM 클래스들

XML Document의 부분 부분에 해당하는 클래스
document element XmlElement
processing instructions XmlProcessingInstruction
Element XmlElement
Attribute XmlAttribute
Test values XmlText
Nodes XmlNode

[VB]코드 생성기

프로그래밍을 하다보면 기계적으로 반복해야 할 일들이 생긴다. 이런 일들로 일일이 타이핑을 한다는 것은 매우 지루하고 따분한 일이다. 그래서 코드을 자동으로 생성하도록 할 필요가 생긴다.
곧 개발환경의 매크로를 이용하거나, Perl과 같은 문자열 처리기를 통하여 코드를 자동처리하도록 한다.
다음의 사이트도 그 중의 하나이다.

http://kimsk99.springnote.com/pages/63531
– 미리 지정된 텍스트를 현재 커서위치(실렉트된 것)에 삽입하는 매크로
– 현재 편집중인 파일과 같은 이름이고 확장자만 cpp <-> h 로 바뀐 파일을 열어주는 매크로

http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=8423&ref=8423
– 이름과 날짜를 입력
– 수평 라인 주석을 입력

http://serious-code.net/tc/tag/Visual%20Studio%20Macro
– 선택된 라인들에서 중복된 라인들은 삭제하고 나머지를 정렬하기
– 자동으로 getter/setter생성하기

Using Visual Studio .NET Macros

  • 속성을 위한 매크로
사용자 삽입 이미지
Private 변수를 Property Procedure로 확장하기

Visual Studio .NET 2005에서 설치용 프로그램 만들기

프로그램을 개발한 다음, 사용자가 설치해서 사용할 수 있도록 하기 위해서는 ‘설치용 프로그램'(일명 setup 프로그램)을 만들어야 한다.
Visual Studio .NET 2005에서는 솔루션에 ‘설치 프로젝트’를 추가하여 개발 프로그램을 설치가능하게 할 수 있다.
다음의 사이트는 이것을 잘 설명하고 있다.
http://www.nohungry.net/tt1/tag/110

BLT, blittable

BLT : block transfer
메모리의 내용을 옮기는 행위

<blittable>

Most data types have a common representation in both managed and
unmanaged memory and do not require special handling by the interop
marshaler. These types are called blittable types because they do not require conversion when they are passed between managed and unmanaged code.

대부분의 데이터 형식에는 관리되는 메모리와 관리되지 않는 메모리 모두에서 공통되는 표현이 있으므로, interop 마샬러에서
특별한 처리를 하지 않아도 됩니다. 이러한 형식은 관리 코드와 비관리 코드 사이에서 전달될 때 변환할 필요가 없으므로 blittable 형식이라고 합니다.

 

[book]Visual Basic.NET Class Design Handbook

비주얼 베이직 6.0에서 비주얼 베이직 닷넷(이하 비베닷넷)으로 옮기는 과정에서 참 많은 것이 장벽이었는데, 이런 것들 한 방에 해결해 준 책이 바로

Visual Basic .NET Class Design Handbook: Coding Effective Classes (Paperback)이다.

사용자 삽입 이미지
비베닷넷이 되면서 완전히 객체지향 프로그래밍 언어로 탈바꿈했다. 객체지향프로그래밍의 핵심은 그 무엇보다도 객체를 만들어내는 설계도 같은 클래스라고 할 수 있다. 책 제목에서도 알 수 있듯이 이 클래스를 어떻게 효과적으로 설계할 것인가를 자세히 다루고 있다.
참 맛있게 읽은 책이다.

During object-oriented analysis and design, we identify the most important objects in our system, and consider how they relate to each other. But during object-oriented programming, we don’t write ‘objects’; we define classes to represent the behavior and attributes of objects.
객체지향 분석과 설계를 하는 동안에, 우리는 우리 시스템 안의 가장 중요한 객체를 규명하고, 서로간에 어떻게 관계하는지를 고려한다. 그러나 객체지향 프로그래밍을 하는 동안에는 ‘객체들’을 작성하지 않는다. 다만 객체들의 행위와 속성을 대표하는 클래스를 정의한다.
(본문 중에서)