728x90

목차

목차

목차

목차

목차

목차

 

 

우리가 숫자를 표현할 때 정수형식, 소수점 형식을 많이 사용합니다.

하지만 경우에 따라서 분수 형식도 사용하고는 하는데요.

엑셀에서 어떻게 사용하는지 알아보도록 하겠습니다.

 

분수
분수 양식

 

 

 

1. 셀 서식의 분수 표기

 

셀을 선택하고 "오른쪽 클릭"을 하거나 단축키 ctrl + 1을 누릅니다.

이렇게 해서 [셀 서식] - [표시 형식] - [분수]에 들어가서 형식을 선택합니다.

0.2가 1/2로 표기가 됩니다.

 

셀서식에서 분수 선택하기

 

그러나 분수로 표현하기 어려운 경우에는 분모를 자동으로 반올림해서 선정합니다.

이 때는 한 자리수, 두 자리수, 세 자리 수로 나타낼 수 있습니다.

 

분수 표기
나누어 떨어지지 않는 경우

 

 

 

 

2. 사용자 지정 서식에서 설정하기(가분수 포함)

 

기본 설정인 "분수"에서는 한 두 세 자리수로 설정하거나, 분모를 2, 4, 8, 16, 10, 100으로 고정할 수 있습니다.

하지만 다른 옵션을 설정하고 싶을 때는 사용자 서식으로 들어가서 쳐야 합니다.

사용자 지정에서 형식을 직접 입력할 수 있습니다.

 

만능 사용자
셀서식의 사용자 지정

 

분수를 사용자 지정을 들어갈 수 있습니다.

 

  • # ??/?? → 분수 형식을 나타냅니다. 분자와 분모의 자리수는 ?의 개수만큼 만들어집니다.
  • # ??/35 → 분모를 설정합니다. 
  • 분모는 어떤 수든지 설정할 수는 있지만 분자가 반올림됩니다.
  • 가분수로 표시할 때는 앞의 숫자를 빼고 "?/?"를 입력할 수 있습니다.
    (예 : 5/2, 7/3을 표현할 수 있습니다.)

 

 

 

 

3. 자동 변경 서식을 사용합니다.

 

엑셀에서는 분수형식을 넣으면 기본적으로 날짜 서식으로 변경하도록 되어있습니다.

[입력] 1/3 → [변경] 1월 3일

하지만 분수로 입력하려면 "자연수 숫자/숫자" 형식으로 넣으면 됩니다.

예시) 7 1/5이나 5 2/5라고 입력합니다.

 

설명은 움짤이 좋습니다.

 

 

 

 

4. 모양만 분수로 나타내는 방법

 

서식 변경 기능을 끄고 진행할 수 있습니다.

' 기호를 앞에 두고 작성하면 엑셀은 자동서식 변경 기능을 사용하지 않습니다.

뭐든 텍스트로 받아들이게 되고 제가 쓴대로 됩니다.

 

가분수 넣기
' 기호 사용하기

 

 

 

320x100

 

반응형
728x90

엑셀에서는 각종 함수를 사용할 수 있습니다.

지원되는 함수만해도 각양각색 다양하고 엑셀이 대중적으로 사용되는 이유이기도 합니다.

 

엑셀의 함수들

 

 

그래도 하나씩 나한테 꼭 필요하지만 없는 것들이 있습니다.

이럴때는 VBA로 함수를 만들 수 있습니다.

엑셀에서 함수를 만드는 예제 포스팅은 아래를 참고하세요.

엑셀(EXCEL) VBA로 영문자에서 이니셜(Initial) 추출하는 함수 만들기(첫 머리글자 따는 코드)

 

엑셀(EXCEL) VBA로 영문자에서 이니셜(Initial) 추출하는 함수 만들기(첫 머리글자 따는 코드)

한글은 한자어를 사용해서 개념적으로 어려운 단어를 만들고 음절을 생략하는 식으로 약어를 만듭니다.영어에는 단어를 쓰고 난 후에 각 단어의 첫 영자를 따서 약어를 만듭니다. 축구에 관련

toast-story.tistory.com

 

그런데 함수에 대해서 만들때는 좋게 사용하지만 설명을 달아놓지 않으면 나중에는 전혀 사용하지 못합니다.

코드를 작성해 놓고 오랜만에 보면 어? 모르겠다 하는 경우가 한둘이 아니죠.

코드안에 주석으로 처리를 해두어도 되겠지만 엑셀 인터페이스에서 설명을 보는 방법을 알아보겠습니다.

기본적으로 사용자 함수는 작성할 수 있을 정도의 고수분들이 참고용으로 사용하는 기능이니 코드를 펼치겠습니다.

 

< 예시 코드 >

 

Function FilterOddEven(rng As Range, num As Integer) As Variant
'이 Function 항목은 오늘 사용할 함수입니다.

    Dim cell As Range
    Dim result() As Variant
    Dim count As Integer
    Dim i As Integer
    
    ' 입력 값 검사
    If num <> 1 And num <> 2 Then
        FilterOddEven = CVErr(xlErrValue) ' 숫자가 1, 2가 아니면 #VALUE! 에러를 나타냄
        Exit Function
    End If
    
    '결과 배열 만들기
    ReDim result(1 To rng.count)
    count = 0
    
    ' 홀수(1) 또는 짝수(2) 조건에 맞는 값만 필터링
    i = 1
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            If (num = 1 And i Mod 2 <> 0) Or (num = 2 And i Mod 2 = 0) Then
                count = count + 1
                result(count) = cell.Value
            End If
        End If
        i = i + 1
    Next cell
    
    ' 결과 배열 크기조절
    If count > 0 Then
        ReDim Preserve result(1 To count)
    Else
        FilterOddEven = CVErr(xlErrNA) ' 결과가 없으면 #N/A 반환
        Exit Function
    End If
    
    ' 배열 반환
    FilterOddEven = result
End Function

'---------------------------------------------
'↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
' 오늘의 주제인 설명을 추가하는 코드입니다.

Sub AddDescription()
    Dim funcName As String
    Dim funcDesc As String
    Dim paramDesc1 As String
    Dim paramDesc2 As String

    ' ① 함수 이름을 정확하게 입력합니다.
    funcName = "FilterOddEven"
    ' ② 함수의 전체 설명입니다.
    funcDesc = "함수의 설명 - 주어진 범위에서 홀수/짝수 리스트를 필터합니다."

    ' ③ 매개변수 설명 설정
    paramDesc1 = "리스트를 필터할 범위"
    paramDesc2 = "필터할 기준을 선택합니다. 1 = 홀수번째 값, 2 = 짝수번째 값"

    ' ④ 함수 옵션 등록
    Application.MacroOptions Macro:=funcName, _
                              Description:=funcDesc, _
                              Category:="사용자 정의 함수", _
                              ArgumentDescriptions:=Array(paramDesc1, paramDesc2)
End Sub

 

 

이번에 예시로 들기 위해 작성해둔 사용자 함수를 사용하겠습니다. 위에 있는

"Function FilterOddEven(rng As Range, num As Integer) As Variant"에서 "End Function"까지는 그냥 예시입니다.

함수의 이름은 FilterOddEven이고 범위 하나와 숫자 하나를 계수로 받아들입니다.

오늘 소개하고 싶은 것은 아래 있는 "Sub AddDescription()" 구문입니다.

 

위의 코드의 ①, ②, ③번 부분은 설명과 같습니다.

함수의 이름과 함수 자체의 설명, 매개변수의 설명을 입력합니다.

④ Application.MacroOptions

 이 부분이 메크로(코드)의 옵션을 변경하는 적용 어플리케이션입니다.

 funcName 변수의 함수를 찾아서 Description(설명)과 Categoty(분류)를 변경합니다.

그리고 ArgumentDescriptions(매개변수)를 배열 형식으로 입력합니다.

 

※ 주의하실 점은 "Sub AddDescription()"  는 그냥 둔다고 되는 것이 아니고 F5나 ▶ 버튼을 눌러서 실행시켜야 합니다.

엑셀이 함수를 찾을 수 있도록 모듈을 만들어서 작성하거나 함수 바로 아래 작성해두고 단독으로 실행하면 됩니다.

한번만 실행하면 해당 문서에서는 계속 작동합니다.

 

설명을 보는 방법도 알려드리겠습니다.

아래 움짤로 보면 이해 되실 것 같습니다.

 

설명 확인하는 방법

 

함수를 다 타이핑해서 입력한 후에 함수키를 누르면 "함수 인수" 매뉴가 나타나는데 여기서 볼 수 있습니다.

함수키

 

방큼 코드를 통해 입력 한 설명이 정상적으로 입력 되었음을 알 수 있습니다.

좀 더 복잡하게도 넣을 수 있으니 사용자 함수를 여러개 사용하시는 분은 이런식으로 설명을 추가해 보세요.

함수를 사용하기가 편해지고 응용력이 높아질 것입니다.

 

잘 입력되어 있죠

 

 

 

 

반응형
728x90

 

엑셀에서는 글자에 밑줄을 그을 수 있습니다.

복잡하지는 않는 기능이고, 소개해 보겠습니다.

 

1. 셀에 글자에 밑줄을 긋기

 

셀을 선택하고, [상단매뉴] - [홈] - [글꼴] - "밑줄 아이콘"을 클릭합니다.

밑줄이 중요한 기능인 건 아닌것 같지만 기본 단축키 Ctrl + U를 제공합니다.

엑셀이 기본단축키에 좀 쪼잔한 편인데 이 기능에는 있네요.

 

밑줄 아이콘

 

이러면 셀 전체에 밑줄이 그어지게 됩니다.

기본적으로 실선을 사용합니다.

 

밑줄이 그어진 결과

 

 

 

 

2. 부분에 밑줄 긋기

 

이번에는 셀에 들어가 있는 문장에 부분만 밑줄을 긋는 방법입니다.

셀을 선택하고 더블클릭 혹은 F2를 눌러서 글자를 선택할 수 있습니다.

원하는 범위만 선택하고 위의 밑줄 아이콘이나 Ctrl + U를 눌러서 밑줄을 활성화 시킵니다.

 

부분 밑줄 긋기

 

그리고 이건 반대로 부분만 밑줄을 지울 때도 가능합니다.

 

 

 

 

3. 이중 밑줄 긋기

 

엑셀에서는 일반 밑줄과 이중 밑줄을 지원합니다.

실행하는 방법은 밑줄 아이콘 옆의 ∨ 단추를 클릭하는 것입니다.

그럼 이중 밑줄을 선택할 수 있습니다.

※ 여기서 특이한 점은 이중 밑줄이 선택된 상태에서 아이콘을 클릭하면 이중실선으로 만들지만,

단축키인 Ctrl + U을 눌러서 만들면 그냥 실선을 긋습니다.

 

이중 밑줄 선택하기

 

그리고 하나가 더 있는데 셀을 오른쪽 클릭하거나 Ctrl + 1을 사용하면 셀 서식을 열 수 있습니다.

[셀 서식] - [글꼴탭] - [밑줄]에서 엑셀에서 지원하는 4가지 형식을 선택해서 사용할 수 있습니다.

사실 회계형은 그냥 보기에는 거리가 좀 멀 뿐입니다.

 

이중에 하나 고르면 됩니다.

 

 

 

 

4. 밑줄 꾸미기

 

엑셀에서는 밑줄을 꾸미는 기능을 거의 제공하지 않습니다.

글자의 색을 그대로 따라가거나 글자체나 크기에 따라서 위치가 조금 바뀔 뿐입니다.

워드에서는 꽤 이것저것 제공하지만 엑셀에서는 조금 아쉽네요

 

글자체에 따라갑니다.

 

하지만 예전에 도형, 선을 그어서 밑줄에 효과를 준 것을 본적이 있습니다.

많은 상황은 아니겠지만 밑줄이 문서에 중요한 경우라면 궁여지책으로 사용 가능할 것입니다.

 

이거 사실 밑줄이 아니라 그림입니다.

 

 

반응형
728x90

 

 

표 모양의 데이터를 보기 편하게 셀 병합을 자주 사용합니다.

거의 99.999%의 엑셀 사용자가 사용하는 기능이 아닐까 싶습니다.

하지만 여기에 약간 약점이 있는데요. 우선 병합할 때는 왼쪽 위의 데이터만 남기고 나머지는 다 날라갑니다.

 

병합시 나타나는 메시지

 

 

그리고 또 하나의 문제가 병합을 해제할 때인데 한칸만 남기고 빈칸이 됩니다.

이게 보기도 싫고 수식이나 필터의 에러를 만들 수 있습니다.

이 빈칸을 처리하는 방법을 알아보겠습니다.

 

빈 칸이 되었습니다.

 

 

 

< 빈칸을 메꾸는 방법 >

 

① 빈칸을 포함해서 내용을 선택합니다.

 

빈 칸을 포함해서 선택하되 맨 아래는 꼭 내용이 있어야 합니다.

아니면 아무거나 적어서 거기까지 선택해야 합니다.

 

내용이 없으면 더미로 만들어야 합니다.

 

 

 

 

② F5 를 눌러서 이동 탭을 엽니다.

 

F5를 누르면 "이동 탭"이 열리는데 여기서 "옵션"을 누릅니다.

"빈 셀"을 선택하면 빈셀만 선택됩니다.

이동 탭을 사용하면 정해진 유형을 전부 선택합니다.

 

빈셀을 선택합니다

 

 

 

 

③ =을 눌러서 수식을 활성화 시킵니다.

 

바로 위칸을 선택하고 Ctrl + Enter를 눌러야 합니다.

그럼 아래 셀까지 전부 변하게 됩니다.

 

그럼 위에 칸으로 다 됩니다.

 

좀 더 많은 범위를 선택해도 이 방법은 먹힙니다.

아래 GIF를 통해서 좀 더 이해가 쉽기를 바랍니다.

 

움짤입니다.

 

반응형
728x90
목차

1. 함수 사용하기 (UNIQUE + SUMIF)

2. VBA로 목록 만들기

 

 

여러가지 분류로 표를 만들고 요약을 할 경우가 많습니다.

요약을 할때는 부분합을 구하는 방식으로 구하는 경우가 많은 오늘 그런 경우를 해결해주는 방법을 알아 보겠습니다.

아래 예시에 분류별로, 혹은 치수별로 총 수량을 구하는 방법 2가지를 소개하겠습니다.

 

오늘의 예시입니다.

 

 

 

1. 함수 사용하기 (UNIQUE + SUMIF)

 

마이크로 오피스 365 이상의 버전에서는 배열을 처리하는 기능이 강화되었습니다.

그중 하나가 UNIQUE 함수합니다. 이 함수는 목록을 입력받아서 중복된 값을 지우고 고유값 목록을 만들어 줍니다.

이걸 SUMIF와 결합하면 쉽고 간단하게 목록을 만들 수 있습니다.

 

 

UNIQUE(범위) : 범위내에서 목록을 반환합니다. 오피스365 버전 이후에는 바로 목록을 배열하는 기능이 지원됩니다.

SUMIF(범위,조건,더할 값) : "범위""조건"하고 맞을 때 "더할 값"에 값들을 찾아서 더합니다.

 

먼저 UNIQUE 함수가 동작하는 방식을 알아보겠습니다.

백문이 불여일견이니 아래를 보겠습니다. UNIQUE 함수를 사용하자마자 목록이 생겼습니다.

 

UNIQUE 함수 사용하기

 

 

이제 여기에 SUMIF만 적용하면 됩니다.

함수내용은 아래와 같습니다.

=SUMIF($A$2:$A$55,H2,$D$2:$D$55)

  • $A$2:$A$55 : 범위가 됩니다.
  • H2 : 조건이 됩니다. 분류에서 같은 값을 찾은 조건입니다.
  • $D$2:$D$55 : 더할 값들입니다. 스마하트하게 범위에서 데이터를 찾으면 같은 열이나 행에서 찾아줍니다.

 

SUMIF 적용하기

 

 

 

2. VBA로 목록 만들기

 

위에 함수들은 일정이상 엑셀에 숙련된 분이라면 빠르게 적용이 가능할 것입니다.

하지만 UNIQUE 함수가 오피스 365 이상에만 적용되는 점 때문에 사용이 어려울 수도 있을 것입니다.

그리고 VBA로 짠 문서가 사용이 편할 수도 있을 것 같아서 코드를 소개합니다.

우선 파일을 바로 공유합니다. 제가 쓰던 코드라서 가볍게 사용 가능 하셨으면 좋겠습니다.

 

VBA 예제.xlsm
0.63MB

 

 

소스코드 및 사용법은 아래와 같습니다.

 

Sub SummarizeData()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim criteriaCol As Long
    Dim valueCol As Long
    Dim startCell As Range
    Dim lastRow As Long
    Dim dict As Object
    Dim i As Long
    Dim category As Variant
    Dim value As Variant
    
    ' ① 워크시 기본 정보 입력하기
    Set wsTarget = ThisWorkbook.Sheets("실행")
    On Error Resume Next
    Set wsSource = ThisWorkbook.Sheets(wsTarget.Range("D3").value)
    On Error GoTo 0
    Set startCell = wsTarget.Range("F8")
    
    ' ② 먼저 입력 했던 값 선택하고 지우기
    Worksheets("실행").Range(startCell.Address).CurrentRegion.Select
    Selection.ClearContents
    
    ' 시트가 없으면 없다고 알려주고 끝내기
    If wsSource Is Nothing Then
        MsgBox "대상 시트가 존재하지 않습니다.", vbExclamation
        Exit Sub
    End If
    
    ' ③ 입력한 열의 이름을 열 번호로 변경하기
    criteriaCol = wsSource.Range(wsTarget.Range("D4").value & "1").Column
    valueCol = wsSource.Range(wsTarget.Range("D5").value & "1").Column

    
    ' ④ "기준"이 되는 열에서 마지막 칸 입력하기
    lastRow = wsSource.Cells(wsSource.Rows.Count, criteriaCol).End(xlUp).Row
    
    ' ⑤ 폴더를 초기화합니다. 참조에서 Microsoft Scripting Runtime를 활성화 시킵니다.
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' ⑥ dict에 값이 없으면 폴더를 추가하고, 있으면 숫자의 값을 불러와서 더합니다.
    For i = 1 To lastRow
        category = Trim(wsSource.Cells(i, criteriaCol).value)
        value = wsSource.Cells(i, valueCol).value
        
        If category <> "" And IsNumeric(value) Then
            If dict.exists(category) Then
                dict(category) = dict(category) + CDbl(value)
            Else
                dict.Add category, CDbl(value)
            End If
        End If
    Next i
    
    ' ⑦ 결과 출력를 출력합니다. 참조가 추가되지 않으면 여기서 에러가 납니다.
    i = 0
    For Each category In dict.Keys
        startCell.Offset(i, 0).value = category ' 분류
        startCell.Offset(i, 1).value = dict(category) ' 합계
        i = i + 1
    Next category
    
    MsgBox "데이터를 정리하였습니다" & Chr(10) & "https://toast-story.tistory.com", vbInformation
    
End Sub

 

 

실행하는 방법

 

우선 실행하는 방법은 쉽습니다.

이 워크시트에 정리할 시트를 복사해서 붙여 넣고, 데이터만 있는 상태로 만듭니다.

그리고 시트이름 / 정리할 열 / 숫자가 들어있는 열을 각각 입력하고 옆에 회색의 실행버튼을 누릅니다.

그럼 아래와 결과가 정리됩니다.

결과를 복사해서 필요한 곳에 가져다 쓰시면 됩니다.

반응형
728x90

엑셀에서는 워크스프레드 프로그램에 문서형식으로 작성하는 많은 기능이 있습니다.

그 중에 하나가 그림을 삽입하거나 도형을 그리는 기능입니다.

그런데 그림을 삽입해서 문서를 편집하다보면 그림이 변하는 것을 볼 수 있습니다.

 

셀 삽입과 삭제에 따라 변하는 도형

 

 

주로 셀을 삽입하거나 삭제하는 기능에 따라서 이동하거나 커지거나 작아집니다.

이런 기능은 문서의 편집과 함께 하는 것이라 보통은 좋은 기능입니다.

하지만 항상 편한건 아닙니다.

원하지 않을 때를 대비한 도형 속성을 변경해서 크기와 위치를 고정하는 기능을 소개합니다.

 

 

 

도형을 여러개 동시에 선택해서 할 수도 있지만, 기본적으로는 매번 설정해주어야 합니다.

[오른쪽 클릭] - [도형서식] - [도형 서식 / 개체 서식] - [도형 옵션] - [크기 및 속성] - [변하지 않음]을 선택합니다.

위치만 변함을 선택하면 크기는 변하지 않고 위치는 변합니다.

일단 이렇게 잠그고 나면 도형의 위치는 고정됩니다.

 

잠그고 난 후의 도형

 

 

이게 좀 불편하게 일일히 설정해야 하는 것이 있습니다.

하지만 문서에 일괄적으로 들어가는 회사로그 같은 것에는 설정을 해둘 수도 있겠죠.

엑셀에서 좀 디폴트 옵션을 변하게 하는 시대가 빨리 왔으면 좋겠습니다.

 

 

반응형
728x90

 

 

엑셀 VBA를 작성하다보면 이 결과물이 어디에 쓰일지 다 예상 못할 수도 있습니다.

중요한 것은 DATA의 수와 끝을 파악하는 것이고요.

VAB에서 많이 사용하는 내용의 끝을 파악하는 방법에 대해서 알아 보겠습니다.

 

※ 엑셀 인터페이스에서 쓰는 Find 함수와 VBA에서 사용하는 Find 매소드는 별개임을 알려드립니다.

 

 

 

① B 행에서 내용이 있는 마지막 셀 찾기

 

find를 사용할 껀데 먼저 코드를 보도록 하겠습니다.

 

Sub FindLastColumn()

    Dim ws As Worksheet
    Dim lastCell As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet5")
    
    'find를 사용해서 마지막 값을 찾음
    Set lastCell = ws.Columns("B").Find(What:="*", _
                                        After:=ws.Range("B1"), _
                                        LookIn:=xlFormulas, _
                                        LookAt:=xlPart, _
                                        SearchOrder:=xlByRows, _
                                        SearchDirection:=xlPrevious)
    
    If Not lastCell Is Nothing Then
        MsgBox "B행의 마지막 데이터는 " & lastCell.Address & "에 있습니다."
    Else
        MsgBox "B행에 데이터가 없습니다."
    End If
End Sub

 

Find의 사용법은 위 코드를 보면 알 수 있고 각 매개변수에 대해서 설명하겠습니다.

 

  • What : 찾을 값으로 * 을 사용하였음으로 "모든 값"을 검색합니다.
  • After : 검색을 시작할 위치입니다. 여기서 부터라고 보면 됩니다.
  • LookIn : 검색할 기준입니다. 이 경우에는 수식으로 검색하는 것이 좋습니다.
        - xlFormulas : 수식을 기준으로 검색하는데 수식의 결과가 아닌, 수식 자체를 검색합니다. 
        - xlValues : 값을 검색합니다. 이 경우에는 수식의 결과를 기준으로 검색합니다.
        - xlComments : 셀에 추가된 주석을 검색합니다.
        - xlCommentsThreaded : Threaded Comments라는 Office365 버전부터 추가된 새로운 주석을 검색합니다.
  • LookAt : (xlPart : 부분일치), (xlWhole : 전체일치)중 하나를 선택합니다.
  • SearchOrder : 검색하는 영역입니다. (xlByRows : 행 기준), (xlByColumns : 열기준)
  • SearchDirection : 검색하는 방향입니다. (xlNext : 앞에서 뒤로), (xlPrevious : 뒤에서 앞으로)
  • (MatchCase) : 검색할 때 대소문자를 구별할지 선택합니다. 디폴트는 False(구별 안함)입니다.
  • (MatchByte) : 더블 바이트 언어를 설치했을 때 사용합니다.
        - True : 더블 바이트 문자가 정확하게 더블 바이트와 일치할 경우만 검색
        - False : 더블 바이트 문자가 싱글 바이트와 일치해도 검색함
  • (SearchFormat) : 검색 형식입니다.

 

즉 위의 코드는 ws.Columns("B") 로 범위를 제한해서,

B1부터 시작하여 해당 행(xlByRows)에서 뒤에서 앞으로(xlPrevious) 검색하여 처음 만나는 값의 위치를 찾습니다.

 

 

 

 

② 셀에서 마지막 범위 찾기

 

거의 같습니다. 똑같이 Find를 사용합니다.

 

Sub FindLastCell()
    Dim ws As Worksheet
    Dim lastCell As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet5")
    
    ' 마지막 데이터를 찾음
    Set lastCell = ws.Cells.Find(What:="*", _
                                 After:=ws.Cells(1, 1), _
                                 LookIn:=xlFormulas, _
                                 LookAt:=xlPart, _
                                 SearchOrder:=xlByRows, _
                                 SearchDirection:=xlPrevious)
    
    If Not lastCell Is Nothing Then
        MsgBox "워크시트의 마지막 데이터는 " & lastCell.Address & "에 있습니다."
    Else
        MsgBox "워크시트에 데이터가 없습니다."
    End If
End Sub

 

 

처음나온 코드에서 범위를 행으로 제한했던 ws.Columns("B")를 전체 대상의 ws.Cells로 변경한 것입니다.

SearchOrder는 "xlByRows"로 하면 가장 아래 값을 끝으로 "xlByColumns"를 하면 가장 오른쪽에 있는 셀을 선택합니다.

 

 

 

 

③ 처음부터 끝까지 선택하기

 

이제 응용편입니다.

끝의 셀을 선택한다면 처음셀로 찾을 수 있죠.

두 셀을 찾아서 전체 선택을 하는 코드입니다.

이 것 역시 간간히 쓰는데, 그때그때 작성하려니 실수가 많아 오늘 기회로 정리합니다.

 

Sub SelectallContentCell()
    Dim ws As Worksheet
    Dim firstCell As Range
    Dim dataRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet5")
    
    ' 처음 셀 찾기
    Set firstCell = ws.Cells.Find(What:="*", _
                                  After:=ws.Cells(1, 1), _
                                  LookIn:=xlFormulas, _
                                  LookAt:=xlPart, _
                                  SearchOrder:=xlByRows, _
                                  SearchDirection:=xlNext)
    
    ' 마지막 셀 찾기
    Set lastCell = ws.Cells.Find(What:="*", _
                                 After:=ws.Cells(1, 1), _
                                 LookIn:=xlFormulas, _
                                 LookAt:=xlPart, _
                                 SearchOrder:=xlByRows, _
                                 SearchDirection:=xlPrevious)
            
        Set dataRange = ws.Range(firstCell, lastCell)
        dataRange.Select
    
    If Not firstCell Is Nothing Then
        MsgBox "선택된 범위는 " & dataRange.Address
    Else
        MsgBox "워크시트에 데이터가 없습니다."
    End If
End Sub

 


결과입니다.

셀도 선택을 잘하고 매세지도 잘 출력됩니다.

 

 

반응형
728x90
< 목차 >

1. 끝으로 이동하기

2. 끝까지 선택하기

 

많은 데이터가 있는 표를 위에서 작업하다 보면 처음과 마지막으로 이동할 일이 많습니다.

엑셀에서는 그럴 때 사용하도록 Ctrl + 방향키(←,→,↑,↓)를 눌러서 끝에서 끝까지 이동할 수 있습니다.

무슨 게임하는 것 같아서 처음에는 익숙해지지 않았을 때는 마우스에 많이 의존하지만,

일단 적응되면 손에서 놓을 수가 없습니다.

 

 

1. 끝으로 이동하기

 

Ctrl + 방향키로 움직이기

 

VBA에서도 이 기능을 수행하는 명령어가 있습니다.

 

  • xlDown : 시작 위치에서 아래방향으로 데이터가 끝나는 셀로 바로 이동합니다. 
  • xlUp  : 시작 위치에서 위 방향으로 데이터가 끝나는 셀로 바로 이동합니다. 
  • xltoRight : 시작 위치에서 오른쪽 방향으로 데이터가 끝나는 셀로 바로 이동합니다. 
  • xltoLeft  : 시작 위치에서 왼쪽 방향으로 데이터가 끝나는 셀로 바로 이동합니다. 
  • 시작 위치가 데이터가 없는 빈 셀일 경우에는 반대로 처음 데이터가 있는 셀로 이동합니다.
  • 빈 셀인 경우 그 방향에 데이터가 하나도 없으면 끝까지 이동합니다.

사용하는 방법은 아래와 같습니다.

간단함으로 모두 묶어서 하나의 소스에 담아서 설명하겠습니다.

 

Sub MoveCell()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ws.Range("B28").End(xlDown).Select '아래 방향으로
    ws.Range("B28").End(xlUp).Select '위 방향으로
    ws.Range("B28").End(xltoRight).Select '오른쪽 방향
    ws.Range("B28").End(xltoLeft).Select '왼쪽 방향으로

End Sub

 

 

보시면 이해될 것이라고 생각합니다.

셀 B28 에서 아래, 위, 오른쪽, 왼쪽으로 이동하는 소스입니다.

 

 

2. 끝까지 선택하기

 

위에 처럼 이동하는 것으로도 편리하지만 전체 선택하기라는 편리한 기능도 있습니다.

일반 엑셀 인터페이스에서는 Ctrl + Shift + 방향키(←,→,↑,↓) 입니다.

이 기능을 수행하는 코드도 설명 드리겠습니다.

 

범위 선택하기

 

소스로 따지면 약간 길어지는 합니다.

하지만 어렵지는 않으니 사용해 보면 바로 알 수 있을 것 같습니다.

 

Sub SelectRange()

    Dim ws As Worksheet
    Dim dataRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' A1부터 아래 방향으로 데이터가 있는 마지막 셀까지 범위 선택
    Set dataRange = ws.Range("A1", ws.Range("A1").End(xlDown))
    dataRange.Select

    ' A1부터 오른쪽 방향으로 데이터가 있는 마지막 셀까지 범위 선택
    Set dataRange = ws.Range("A1", ws.Range("A1").End(xlToRight))
    dataRange.Select

    ' A1에서 시작해 데이터가 있는 끝까지 범위를 설정
    Set dataRange = ws.Range("A1", ws.Range("A1").End(xlToRight).End(xlDown))
    dataRange.Select
    
End Sub

 

 

굉장히 자주 사용하는 코드로 사용자가 입력해서 계속 길어지는 엑셀에 VBA를 적용할 때 사용하기도 합니다.

잘 사용하면 순환문 하나 정도 뺄 수도 있게 만드는 편리한 코드입니다.

저도 이렇게 포스팅 해놓고 수시로 보러고 작성하는 것이랍니다.

보시는 분께도 참고가 되었으면 좋겠습니다.

 

320x100

 

반응형
728x90

 

 

엑셀의 내용은 행과 열의 표로 이루어져 있습니다.

하지만 그 안에도 "표 - Table"라는 영역을 다시 만들 수 있다는 것을 알고 계신가요?

자동서식을 사용할 수도 있고 표 전체에 대한 필터 기능도 사용할 수 있습니다.

이 필터를 슬라이서라고하는데 빠르고 편리합니다. 장점을 좀 알아보면,

 

  • 직관적이고 사용하기가 쉽습니다.
  • 필터 기능임에도 한 문서에 서로 다른 범위를 표로 지정해 여러개 설치할 수 있습니다.
  • 슬라이서를 만든 후에 표를 편집하면 슬라이서에도 자동으로 반영됩니다.

슬라이서를 만들고 사용하는 것에 대해서 알아보겠습니다.

 

 

① 범위를 먼저 표로 만들기

 

범위를 지정하고 상단매뉴의 [홈] - [스타일] - [표서식]을 찾습니다.

의무적으로 표서식을 넣어야 하지만 저는 지금에 표의 스타일을 변경하기 싫습니다.

그래서 "표 스타일 새로 만들기"를 선택하고 아무것도 하지 않고 확인을 누릅니다.

 

표 만들기

 

그럼 사용자 지정 - 표 스타일1이 생기게 되고 선택하면 표로 만들 범위를 물어봅니다.

선택한 영역이 "표 만들기"에 들어가 있으니 이상이 없으면 확인을 눌러서 표로 만들면 됩니다.

 

표로 지정합니다.

 

 

 

② 슬라이서 삽입하기

 

이제 지정한 범위가 "표 - Tabel"이 되었습니다.

여기에 커서를 올려두면 상당 매뉴에 테이블 디자인이 활성화 됩니다.

이 항목 안에 [테이블 디자인] - [외부 표 데이터] - [슬라이서 삽입]을 선택하면 됩니다.

 

슬라이서 삽입하기

 

 

③ 슬라이서를 설정합니다.

 

"슬라이서 삽입 버튼"을 클릭하면 머리말을 고르는 매뉴가 활성화 됩니다.

"시도별"을 골라서 활성화 시켰더니 그에 맞는 슬라이더가 생성되었습니다.

 

슬라이서 삽입하기

 

 

④ 슬라이서를 사용해 봅시다.

 

이제 드디어 오늘의 목적인 슬라이서를 사용할 차례입니다.

슬라이서는 필터처럼 사용할 수 있습니다.

그리고 Ctrl 키를 이용해서 여러개를 선택할 수도 있고 두개의 슬라이서를 적용할 수도 있습니다.

아래 GIF - 움짤을 보면 사용법을 알 수 있을 거라 생각합니다.

 

사용해 봅시다.

 

 

자주 사용하는 파일에는 이것만큼 편리한 필터기능이 잘 없습니다.

엑셀으로 많은 데이터를 처리하시는 분들에게는 슬라이서 기능에 익숙해 지실 것을 추천합니다.

 

 

320x100

 

반응형
728x90

 

 

엑셀에서는 행과 열을 나누어 데이터를 표로 만드는데 특화된 스프레드 워크시트를 제공합니다.

이 시트를 한 파일에 255개까지 제공함으로 데이터 작성에 폭이 넓어 집니다.

아직 한번도 이걸 다 채워보지는 못했지만 40~50개 정도의 시트를 사용한 적은 있습니다.

 

하단의 워크시트 목록

 

그럼 하단의 워크시트 목록을 좌로 우로 움직이면서 필요한 시트를 한참 찾았던 기억이 있습니다.

정말 찾기 어렵더라고요.

아직 엑셀에서 명료하고 편리한 검색기능은 지원하고 있지 않습니다.

다만 그래도 조금은 편한 방법을 소개해 봅니다.

 

 

 

① 활성화 매뉴 불러서 이동하기

 

하단의 시트 목록 좌측에서는 "<  >" 처럼 생긴 화살표가 있습니다.

처음에는 비활성화 되어 있다가, 시트의 수가 한눈에 볼수 없을 만큼 길어지면 활성화 됩니다.

 

시트 목록 옆의 화살표

 

그리고 활성화 시킨 상태에서는 오른쪽 클릭하면 시트를 목록으로 볼 수 있습니다.

원하는 시트를 더블클릭하면 바로 이동할 수 있습니다.

정말 시트가 많을 때 이 기능으로 충분합니다.

 

활성화 기능 살리기

 

 

 

② 하이퍼링크 사용하기

 

셀을 클릭하고 오른쪽 클릭을 해도되고 [상단매뉴] - [삽입] - [링크]를 클리하여 하이퍼 링크를 설정할 수 있습니다. 

여기서 "현재 문서"를 선택하여 시트 명을 누릅니다.

 

하이퍼링크 만들기

 

하이퍼링크 만들기로 시트리스트에 참조를 걸어두면 편리하게 사용할 수 있습니다.

시트가 수십개인 대형 엑셀파일을 아무리 쉽게 생각해도 간단하게 만든 것은 아닐 껍니다.

처음부터 천천히 이 표를 만들어 둔다면 만드는데 무리가 아닐껍니다.

 

만들어진 링크 테이블

 

 

 

③ 시트 함수 활용하기

 

이건 정확하게 이동하거나하는 건 아니고 시트를 관리하기 위해사용하는 함수입니다.

참고용이라고 보면 되겠네요.

office365 이상의 최신번전에서 동작합니다. 

 

Sheets() : 이 문서의 시트 총 갯수를 반환합니다. 여러명이 작성한 문서라 시트 수가 명확하지 않을 때 좋습니다.

Sheet([value - refer]) : 이 함수가 참조하고 있는 셀에 시트 번호를 호출합니다. 시트 번호는 매크로를 작성할 때 사용하면 편리한 값으로 VBA를 쓰는 경우 추천합니다.

 

 

320x100

 

반응형

+ Recent posts