Labview: 랩뷰로 프로그래밍 하기

랩뷰의 사용자 인터페이스와 프로그래밍 하는 방법을 소개한 간단한 동영상입니다.




텍스트로 내용을 작성하는 것도 좋긴한데, 사진을 하나하나 캡쳐하는 작업이 생각보다 만만치 않아서,
이렇게 동영상으로 만들어봤습니다. ㅎㅎ
보기 좋네요. ㅎㅎㅎ

spacer

[Excel Tip-07] VBA를 알아보자!!

엑셀을 사용하면서 '이런 기능들은 없을까?'와 같은 생각에 검색들을 해보면,
응용하는 방법을 몰랐을 뿐이지 참으로 다양한 함수들과 기능들을 많아 한번씩 놀라곤 한다.
그런데, 엑셀이 분명 유용한 도구임은 확실하지만, 어디까지나 도구일 뿐이지 메인이 될 순 없다는 생각이 들다보니,
자연스레 눈이 VBA를 향하게 되었다.
엑셀이 가진 그 수많은 기능들을 다 기억하지 못한다면... 그냥 내가 만들어 쓰지 뭐. ㅎㅎ

1. VBA는 무엇인가?

그 자체로도 풍요로운 기능을 제공하는 엑셀을 더 혜자스러운 도구로 변신하게 만들어주는 숨겨진 보물인 VBA.
무엇을 할 수 있고 어떤 혜자스러움을 품고 있는지 알아보기 전에 VBA란 무엇인가를 먼저 살펴보자.

Visual Basic for Application의 머리 글자를 따서 VBA라고 이름을 붙였단다.
다시 말해, 특정 어플리케이션을 위한 비쥬얼 베이직이고, MS에서 윈도우용 VB를 출시한 만큼
Office 제품군 (그러니까, 파워포인트나 엑셀, 워드... 이런 친구들)에 어느 순간부터 VBA를 넣기 시작했다.

아무래도, 비쥬얼 베이직은 너무너무 잘 알려진 프로그래밍 언어이고,
특정 어플리케이션의 활용을 돕기 위해 이런 프로그래밍 도구가 엑셀을 포함한 오피스 제품군에 포함되어 있는 만큼
잘 활용만 한다면 손가락 하나만 까딱해도 데이터가 착!착! 처리되는 진귀한 경험을 할 수 있다.
(물론 잘~ 활용해야지... ㅎㅎ)

그럼 그렇게 잘난 친구가 어떻게 생겼고, 엑셀의 어디에 숨어있었는지부터 찾아봐야한다.

VBA Editor는 엑셀 메뉴 중 '개발 도구' 안에 있다.
그림에서 보는 것처럼 '개발 도구' 메뉴를 클릭하면 제일 왼쪽에 비쥬얼 베이직 에디터를 여는 버튼이 나온다.

만약 위 그림처럼 '개발 도구'가 안보인다면, 엑셀의 옵션에 가서 활성화시킬 수 있다.

이도 저도 귀찮다면, 단축키 (Alt + F11)를 눌러서 에디터를 열 수도 있다.


2. VBA의 간단한 예제

이제 VBA 에디터도 열었으니, 간단한 예제를 한번 만들어보자.
간단한 예제라면 누가 뭐라 해도, 'Hello, World!' 만한게 있을까? ㅎㅎ
(만성 창의력 제로인 내가 새로운 것을 할리는 없지...)

VBA의 프로그래밍 구조는 천천히 하나씩 뜯어보기로 하고,
간단한 예제이니만큼, 그냥 한번 만들어보자.

먼저, Sheet1을 마우스 오른쪽 클릭해서, 모듈을 하나 추가하자.

추가된 Module1에 아래의 코드를 똑같이 입력하자.
1
2
3
4
Sub mySubRoutine()
    Sheet1.Range("A1").Value = "Hello, World!"
End Sub
cs

엑셀로 돌아가서 매크로를 실행시켜보면 (단축기 Alt + F8), Sheet1의 A1 셀에 Hello, World!가 찍힌다. ㅎㅎㅎ



spacer

WPF: TextBlock & Label


TextBlock을 알아보자.

WPF에서 TextBlock은 말 그대로 Text를 처리하는 컨트롤 중 하나이다.
이렇게 Text를 처리하는 컨트롤로 Label이 있지만, Label은 짧은 1줄 정도의 텍스트를 처리하는 용도라고 한다면, TextBlock은 여러 줄의 문자열을 처리할 수 있다.
(대신, Label은 이미지를 담을 수도 있지만, TextBlock은 문자열만 담을 수 있다.)

간단한 예제를 한번 보자. (feat. 나라 사랑 ㅎㅎ) __φ(。。)
MyWPFApp.xaml
<Window x:Class="WpfApp1.MyWPFApp"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="180" Width="220"
        ResizeMode="CanResizeWithGrip">
    <Window.Resources>
    </Window.Resources>
    <Grid Margin="10">
        <TextBlock Margin="10" FontSize="14"> 우리 나라 좋은 나라 대한민국 만세!!</TextBlock>
    </Grid>
</Window>

예제에서 볼 수 있듯이 <TextBlock>과 </TextBlock> 이라는 태그 안에 원하는 텍스트를 입력하면 쉽게 윈도우에 표시할 수 있다.
그러나, 윈도우 크기에 비해 긴 문자열을 입력했을 때 글자가 한번에 표시되지 않는다.
이럴 때 활용할 수 있는 몇 가지 방법을 알아보자. (´▽`)ノ♪
MyWPFApp.xaml
<Window x:Class="WpfApp1.MyWPFApp"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="180" Width="220"
        ResizeMode="CanResizeWithGrip">
    <Window.Resources>
    </Window.Resources>
    <StackPanel>
        <TextBlock Margin="10" FontSize="14" Foreground="Red"> 우리 나라 좋은 나라 대한민국 만세!!</TextBlock>
        <TextBlock Margin="10" FontSize="14" Foreground="Blue" TextTrimming="CharacterEllipsis"> 우리 나라 좋은 나라 대한민국 만세!!</TextBlock>
        <TextBlock Margin="10" FontSize="14" Foreground="Green" TextWrapping="Wrap"> 우리 나라 좋은 나라 대한민국 만세!!</TextBlock>
    </StackPanel>
</Window>

파란색으로 작성된 텍스트 블럭은 'TextTrimming'이라는 속성을 'CharacterEllipsis'로 했을 때의 결과를 보여준다.
윈도우 크기를 넘어서는 텍스트의 경우 '...'을 표시하여 뒤에 더 많은 글자가 있음을 나타내고 있다.

녹색으로 작성된 텍스트 블럭은 'TextWrapping'이라는 속성을 'Wrap'으로 했을 때의 결과를 보여준다.
윈도우 크기를 넘어서는 텍스트의 경우 자동으로 다음 줄에 이어서 텍스트를 표시한다.

텍스트 블럭에서 텍스트의 일부만 꾸미는 작업도 가능하다. (글자를 굵게 한다던지, 색상을 바꾼다던지...)
그럴 때는 'Span'을 사용한다.
MyWPFApp.xaml
<Window x:Class="WpfApp1.MyWPFApp"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="180" Width="220"
        ResizeMode="CanResizeWithGrip">
    <Window.Resources>
    </Window.Resources>
    <StackPanel>
        <TextBlock Margin="10" FontSize="14" TextWrapping="Wrap">
            우리 나라
            <Span FontWeight="Bold" Foreground="Blue">좋은 나라</Span>
            <Span Background="Black" Foreground="Yellow"> 대한민국 만세!!</Span>
        </TextBlock>
    </StackPanel>
</Window>

Label을 알아보자.

Label은 텍스트를 처리하는 아주 간단한 컨트롤 중 하나이다.
텍스트를 처리하는 텍스트 블록과 달리 레이블은 Content 속성을 가지면서 다른 컨트롤을 다룰 수 있다.
그래서, 단순히 텍스트만을 처리하는 목적이라면 레이블에 비해 텍스트 블록을 사용하는 것이 훨씬 가볍다는 점을 기억하자!! ٩(ˊ〇ˋ*)و

다음의 예제를 한번 살펴보자!

MyWPFApp.xaml
<Window x:Class="WpfApp1.MyWPFApp"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="180" Width="220"
        ResizeMode="CanResizeWithGrip">
    <Window.Resources>
    </Window.Resources>
    <StackPanel Margin="10">
        <Label Content="_ID:" Target="{Binding ElementName=txtID}" />
        <TextBox Name="txtID" />
        <Label Content="_PW:" Target="{Binding ElementName=txtPW}" />
        <TextBox Name="txtPW" />
    </StackPanel>
</Window>

활성화 된 윈도우에서 'Alt' 키를 눌렀을 때  'ID' 와 'PW'의 머리글자에 밑 줄이 생기는 것을 확인할 수 있다.
그리고, 키보드로 머리글자를 눌렀을 때 각 레이블에 바인딩 되어 있는 텍스트 박스로 커서가 넘어가는 것도 확인할 수 있다. (⊙_⊙)

이런 액세스 키는 문자 앞의 밑줄(_)을 통해 지정할 수 있다. 바꿔 말하면, 꼭 첫 번째 문자일 필요는 없다는 의미이다. ㅎㅎ





spacer

[Excel Tip-06] 조건부 서식을 활용하자!

엑셀은우리가 몰라서 사용을 못하는 것 뿐이지 데이터를 표시하고 취합하며 연산하는데 단연 최고라고 할 수 있다.
이번에는 장황하게 나열된 데이터를 보다 직관적으로 볼 수 있는 유용한 팁!!
함께 알아보자.


조건부 서식 활용하기

다음과 같은 엑셀 문서가 있을 때,

품목별로 단가와 수량, 그리고 할인율이 적용되어 일목 요연하게 금액을 표시하는데 부족함이 없다.
그런데, 약간의 상상을 더해서 위의 예제가 수 많은 물품들의 월간 매입량을 나타내는 표라고 가정하자.
엄청나게 많이 표시되고 있는 데이터 중에서 특정 조건에 해당되는 항목들이 다른 셀들과 다르게 표시된다면,
주어진 데이터를 읽어보는데 충분히 큰 도움이 될 것이다.

조건부 서식이 여기서 큰 도움이 될 수 있다.
(단축키는 Alt + O, D)

합계가 50,000 이상이 되는 셀의 숫자를 빨간색, 굵게 표시해보자.
그러기 위해서는 먼저 조건부 서식을 지정할 셀들을 선택해주고, 단축키를 통해 조건부 서식 창을 활성화시켜서, '새 규칙'을 클릭한다.

표시되는 새 규칙 창에서 '다음을 포함하는 셀만 서식 지정'을 클릭하고, 아래의 조건을 작성한 다음 '서식' 버튼을 클릭한다.

조건에 맞는 셀을 표시할 글꼴을 지정한 다음,

미리 보기 창을 통해 반영하고자 하는 글꼴이 제대로 되었는지 다시 한 번 확인하고,
 
확인을 누른다.

다시 한번 확인을 눌러서 조건부 서식 설정을 완료한다.

이렇게 해서 특정 조건에 따라 셀의 표시를 지정하였다. ㅎㅎ


조건부 서식의 응용

다음과 같은 엑셀 문서가 있을 때,

왠지 Item01부터 Item07까지의 표가 심심한 느낌이 든다. (아님 말고... ㅎㅎㅎ)
항목마다 번갈아가면서 셀의 채우기 색상을 두어 심심함을 없애고자 한다.
이 때도 '조건부 서식'은 유용하게 활용될 수 있다.
셀들을 선택한다음 조건부 서식 창을 열고 새 규칙을 선택한다.
이번에는 규칙 유형으로 '수식을 사용하여 서식을 지정할 셀 결정'을 선택하고 수식 부분에 다음과 같이 입력한다.

여기서 MOD 함수는 앞의 숫자를 뒤의 숫자로 나눈 나머지를 구할 때 사용하는 함수이고,
ROW 함수는 현재의 행 번호를 반환하는 함수이다.
다시 말해, 위의 수식은 짝수 행들을 의미한다.
그리고나서 서식을 지정한 다음 확인!!

짝수 행의 셀이 연한 연두색으로 채워진 것을 확인할 수 있다. ㅎㅎ



spacer