VB(A) 197

[& Chronicle] 숫자와 영문자가 혼용된 상태에서 영문자만 추출하기

아래와 같이 숫자와 영문이 혼합되어 있는 셀에서 영문만 골라내는 수식과 사용자정의함수입니다. 먼저 Chronicle님의 수식입니다. =MID(A1,MATCH(TRUE,ISERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1),0),LEN(A1)-COUNT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1)) 위 수식의 풀이 과정입니다. 1. 영문자가 시작되는 위치를 파악합니다. 2. 영문자의 수를 알아냅니다.(총 글자수에서 숫자의 글자수를 뺍니다.) 다음은 VBA를 이용한 사용자정의함수입니다. 셀에서 영문자만 골라내는 방법은 여러가지가 있습니다. 저는 텍스트 처리에 특화된 정규식을 선택했습니다. 셀 내용 중 영문자만 쏙쏙 골라내는 간단한 규칙입니다. 그 ..

[& Chronicle] 문자 거꾸로 출력하기

문자열을 뒤집는 매크로와 수식의 차이입니다. 먼저 정복해야할 대상은 아래와 같습니다. A행의 내용을 B행으로 바꾸는 거지요. 수식의 과정은 http://blog.naver.com/asaph16/220996432171 과 같습니다. 간략히 설명하자면 1. 보조열을 이용하여 뒤에서부터 한글자씩 분리한다. 2. 분리된 글자를 합쳐준다. 입니다. 제품이름의 글자수에 해당하는 보조열이 필요하다는 단점이 존재하네요. 그 결과가 바로 아래와 같습니다. 하지만 VBA로는 StrReverse 라는 함수 하나면 해결됩니다. 보조열도 글자를 분리할 필요도 없지요. 수식도 편하지만 경우에 따라선 사용자정의함수로 매우 간단하게 해결할 수 있는 경우가 많습니다. Function ReverseText(Goods As String)..

[& Chronicle] 중복값 제거 & 중복값의 개수

당근쨈 VS Chronicle 같은 주제로 매크로와 수식의 풀이과정을 살펴보는 새로운 도전입니다. 여기서 VS란 경쟁이 아닌 생각의 차이, 즉 접근방식에 따른(매크로 or 수식) 생각하는 과정을 이야기합니다. 해외 사례인 Mr Excel & ExcelisFun 을 보고 이 내용을 착안해내신 씽크탱크 Chronicle님의 아이디어에 감탄합니다. 먼저 카페에 올라온 질문글입니다. http://cafe.naver.com/excelmaster/117697 1. 명단의 중복값을 제거하고 2. 명단의 개수를 나타낸다 가 이 질문의 핵심입니다. 아래는 Chronicle님의 수식입니다. =INDIRECT(TEXT(MIN(IF(($C$2:$J$31"")*(COUNTIF($B$33:B33,$C$2:$J$31)=0),ROW..

[VB.Net] 포토갤러리 일괄 다운로더

금정구청 포토갤러리 일괄 다운로더 토끼같은 아이들의 사진을 한땀한땀 받다가 지친 영혼을 위해 만든 하찮지만 정성이 가득한 다운로드 매니저입니다.금정구청 포토갤러리를 이용하시는 분들의 수고를 조금이나마 덜어드림을 희망합니다. 1. 금정구청 포토갤러리에 접속하여 위와 같은 페이지까지 접속합니다. ▼ 2. 주소창을 복사하여 'Enter Photo Gallery URL' 에 붙여넣기를 한 후 '확인'을 누릅니다주소가 정확하지 않으면 에러 납니다. ▼ 3. 사진을 저장할 폴더를 지정해줍니다. ▼ 4. 게이지가 움직이면서 다운로드가 시작됩니다. ▼ 5. 기다립니다. Imports System.NetImports System.ComponentModelImports System.Text.RegularExpression..

VB(A) 2017.03.05

[정규식] 일치하는 문자열만 추출(lazy 모드)

질문글에서 알 수 있듯이 대괄호로 묶인 부분만 추출하면 되는 내용이다.유의해야할 점이 대괄호가 이중으로 묶여있다는 사실. 이것이 두개 이상인 경우가 있다. 정규식에는 lazy 모드과 Greedy 모드가 있다.문자 그대로 lazy는 패턴이 최소한으로 일치하는 패턴만 가져온다.문자열을 검색하다가 패턴이 일치하면 그 자리에서 멈춘다. 반연 greedy 는 패턴이 일치하는 마지막 문자열에서야 멈춘다.모든 패턴을 탐욕스럽게 검색한다는 뜻.아래 그림에서 보면 lazy와 greedy의 차이를 볼 수 있다. 아래 그림은 lazy 모드로, 두개의 그룹으로 문자열을 추출하는 것을 볼 수 있다.패턴이 일치하면 그 자리에서 멈추고 새로운 패턴을 찾아나선다.Global 속성이 부여되지 않았다면 처음 패턴에서 문자열을 추출한 후..

VB(A) 2017.02.05

순서대로 필터링하기

매크로 흐름 1. B열의 고유값만 배열에 담는다2. 필터링이 되어있는지 체크하여2-1. 필터링이 되어있으면 다음 조건으로 넘어가고2-2 필터링이 되어있지 않으면 맨 처음값으로 필터를 한다.3. 마지막 조건이 되면 처음 조건으로 되돌아간다.4. 초기화 버튼을 누르면 필터가 해제된다. 자세한 건 주석으로. Sub GetName() Dim D As Object Dim v, i%, j% Dim MyCriteria$ Dim MyArea As Range Set D = CreateObject("Scripting.Dictionary") 'Dictionary 선언 v = Range("B2", Cells(Rows.Count, 2).End(3)) 'B열을 배열에 삽입 Set MyArea = Range("A1").Curren..

VB(A) 2017.02.04

[Adodb.Stream] json 파일로 추출하기

자료를 기준에 따라 취합한 후ADODB.Stream 을 이용해 UTF-8 의 텍스트 파일로 추출하는 매크로 - http://cafe.naver.com/excelmaster/134565 Option Base 1 Sub Macro() Dim ADOStream As Object Dim UnitData As Range Dim SingleRange As Range Dim v() As String Dim i As Integer Dim ColumnsCount As Integer Set UnitData = Range("A8", Cells(Rows.Count, "A").End(3)) '추출할 데이터 영역(A열) ColumnsCount = Range("A5").CurrentRegion.Columns.Count '열 개수 ..

VB(A) 2017.01.10

[Dictionary] 일정 정보만을 그대로 두고 여럿 존재하는 값(행렬 전환하여 붙이기)

- http://cafe.naver.com/excelmaster/134021 고객번호, 성명, 주소는 동일하나물품순번, 물품대금, 배송료, 물품코드, 배송기관이 여러 건일 경우여럿 존재하는 값인 물품순번, 물품대금, 배송료, 물품코드, 배송기관을 행렬 전환하여 붙여주는 매크로 Dictionary를 사용하여 중복값을 제거하고 배열을 사용하였다.임시배열을 사용하여 2차원 배열 중 1차배열을 증가시켜주었다. 뭐든지 짜고 나면 별 거 아닌 코드들.짜기 전엔 세상에서 가장 어려운 코드들.게다가 이제는 그 코드가 그 코드같은 느낌이... Option ExplicitOption Base 1 Sub Macro() Dim D As Object Dim MyData As Range Dim CustomerNumber, v()..

VB(A) 2016.12.27

숫자 합치기 + 음수만 빨갛게

- http://cafe.naver.com/excelmaster/133903 이상하게 카페에 글이 안 올라가지네...ColorScripter.com 도 접속이 잘 안되고여기 컴터가 구린 듯 Option Explicit Sub PlusMinus() Dim SingleCell As Range Dim NumberData As Range '기존 자료 삭제 Columns("B").Clear '데이터 영역 설정(여기서는 D행) Set NumberData = Range("D2", Cells(Rows.Count, "D").End(3)(2)) 'D행에서 데이터가 있는 영역만 순환 For Each SingleCell In NumberData.SpecialCells(2) With SingleCell 'D열과 E열 숫자를 연..

VB(A) 2016.12.23

주민번호로 만나이 구하기(외국인 포함)

주민번호로 만나이 구하는 사용자정의함수.외국인과 특정 날짜일 때의 나이를 구하는 코드. Option Explicit Function GetYear(IDNumber As Range, Optional GetDay As Date = 0) As Integer '주민번호를 받아서 만 나이를 구하는 사용자정의함수입니다. Dim BirthYear As Integer Dim BirthDay As Date '데이터베이스 최초등록날짜를 지정하지 않으면 오늘 날짜를 변수에 반환합니다. If GetDay = 0 Then GetDay = Now End If '주민번호 7번째 숫자를 인식하여 1900년대생인지 2000년대생인지 구분합니다. Select Case Mid(IDNumber.Text, 8, 1) Case 1, 2, 5,..

VB(A) 2016.12.03