rand(life)

[VBA] 코드 모음10 - 기타 본문

컴퓨터/엑셀

[VBA] 코드 모음10 - 기타

flogsta 2017. 5. 13. 11:08

'87 [빈값의 차이]

Empty 변수 초기화되지 않은 상태. 숫자=0, 텍스트 =""

Null Variant 형식 변수

"" 텍스트형식 변수

Nothing 개체변수에 할당되지 않은 상태

'89

FN = Range.Address(False, False) 'A1 상대참조

FN = Range.Address(True, True) '$A$1 절대참조

'90

Val(s) 문자열 s를 숫자로

1,000은 1만 인식함. 그래서

Val (Replace(s, ",", ""))

와 같이 , 를 공백으로 바꿔줘야함

Str(n) 숫자 n을 문자열로 (숫자를 문자로 변환하기 위해 앞에 공백을 추가함.

그래서 문자개수가 1추가됨

'91

변수 = Format(dv, "aaa") '월,화,수....

Q '1분기, 2분기...

ww '주의 일련번호 1~53

' 월의 주차 계산 (각 월의 1~5주차)

변수 = Format(dv, "ww") - Format(dv - Day(dv) + 1, "ww") + 1

'92

Int(Double) 음수는 작은 값 -12.34 -> -13

Fix(Double) 음수는 소수점 제거 -12.34 -> -12

CInt(Integer) ~0.4 소수점 버림.

0.5 가장 가까운 짝수로. 12.5 -> 12 , 13.5 -> 14

'93

Date 오늘 날짜

Time 현재 시간

Now 오늘 날짜 + 현재 시간

'95 [기준일로부터 일정기간 전후의 날짜 계산]

DateAdd (interval, number, ddate)

interval = yyyy 연도, q 분기, m 월, y 일 일련번호(2월1일=32), d 일, w 요일, ww 1년53주 일련번호, h 시, n 분, s 초

Number 양수 = 이후, 음수 = 이전

ddate 기준일

워크시트함수 Edate 함수는 "개월"만 지정가능

Edate(날짜, 간격개월수)

'96 [두 날짜 사이의 차이 함수]

DateDiff --- vba 함수

DateDif --워크시트함수

'97

Timer 자정이후의 시간을 초단위로 반환


'86 [InstrRev 함수, 찾을 문자가 반복해서 나오는 경우 마지막 문자 위치 찾을 때 씀]

Filename = "D:\A\B\C\D.xlsx"

Path = Left(Filename, InStrRev(Filename, "\"))

'결과값 Path = D:\A\B\C\

 

'[중복된 항목 제거]

Range.RemoveDuplicates Array(2, 3, 5), xlYes

'2,3,5열을 기준으로 중복된 항목 제거, 제목행 있음

'79 [자동필터로 해당 열 삭제]

Set Rng = Range("a1").CurrentRegion

Rng.AutoFilter field:=5, Criteria1:="취소"

'E열의 조건이 "취소"인 것만 자동필터


152 페이지나누기

activesheet.resetallpagebreaks 페이지나누기 재설정

for i = 2 to 100

if cells(i, 1) <> cells(i-1, 1) then '이전행과 값이 다르면

activesheet. Hpagebreaks.add before:=cells(i,1)

end if

 

 

257 특정시간에 발생하는 이벤트

application.OnTime Timevalue("17:30:00"), "eoj"

17:30eoj 프로시저 실행

 

260

application.onkey 키조합지정

application.onkey "^{Left}", "scrollLeft"

컨트롤-왼화살표 누를때 scrollLeft 프로시저 실행

시프트 +

알트 %

컨트롤 ^

엔터 ~

키패드의 엔터 {ENTER}

 

 

 

 

 

 

 

text_N = InStr(1, 대상문자열, 찾을글자, 0)

 

 

중복된항목제거

ActiveSheet.Range("i:i").RemoveDuplicates Array(1), xlNo

 

개별 문자가 한글인지, 영어인지, 한자인지, 기호인지, 숫자인지 등을 구별해 주는 사용자 정의 함수를 만들었습니다.

각종 문자열 처리에 응용해서 쓸 수 있겠습니다.

=decideChar(판별할 개별글자)

)

 

 

=======================

VBA코드

=======================

Function decideChar(char As String) As String

Dim intASC As Integer

Dim lngCode As Long

intASC = Asc(char)

lngCode = Asc(char) + 65536

If (intASC >= 65 And intASC <= 90) Then

decideChar = "영어대문자"

ElseIf (intASC >= 97 And intASC <= 122) Then '

decideChar = "영어소문자"

ElseIf (intASC >= 48 And intASC <= 57) Then '

decideChar = "숫자"

Else

If (intASC >= 0 And intASC <= 128) Then

decideChar = "아스키기호"

Else

If char >= "" And char <= "" Then

decideChar = "한글"

Else

If lngCode >= 51873 And lngCode <= 65022 Then

decideChar = "한자"

Else

decideChar = "나머지특수기호"

End If

End If

End If

End If

End Function

[출처] 엑셀VBA로 한글,한자,영문,숫자,기호 등을 구별하는 함수|작성자 쭌

 

 

[지수표시]

123456789011.23E+10으로 표시되며, 이는 1.231010승을 곱한 값입니다.

pa

 

http://bigexcel.kr

파워쿼리 관련 글

 

https://msdn.microsoft.com/en-us/library/office/aa164506(v=office.10).aspx

integer 보다 long 선호, 더 빠름

byte255까지 효율적이나, string과 하는 작업에서 훨씬 빠름

Byte data type is typically used for working with strings. For some string operations, converting the string to an array of bytes can significantly enhance performance.

 

 

 

[변수 선언시 접미사]

데이터 형식 | 접미사

Integer : %

Long : &

Currency : @

Double : #

Single : !

String : $

 

하지만 VBA에서 접미사를 유용하게 사용할 때는 문자열 관련 함수를 사용할 때입니다.

보통 문자열 함수는 Variant(String) 값을 반환하게 되는데요.

이때 함수에 접미사를 붙이면 String 값을 반환하게 되어 코드가 효율적이됩니다.

예를들어 Mid() = Variant(String) 이지만 Mid$() = String 이 되는 형식입니다.

이는 MS에서 권장하는 스타일로 사용하시는 편이 좋습니다.

 

이외에는 따로 사용하실

 

 

[ColorIndex ]


https://blog.naver.com/tiny2n/110031350389

 

[find, findext]

dim c as range

with activesheet.usedrange

Set c = .Find(Cells(1, 5).Value, Lookat:=xlWhole) '부분검색은 Lookat:xlPart

If Not c Is Nothing Then 'c라는 값이 검색된다면 (c가 데이터베이스에 존재한다면)

StrFirstaddr = c.Address '첫 주소 설정 (무한루프 방지용)

StrAddr = c.Address '주소값 설정

Do

Range(StrAddr).Resize(, 3).Copy Cells(Rows.Count, 6).End(3)(2) '값이 존재하는 셀 바로 아래에 복사하기

Set c = .FindNext(c) '다음 c 값 찾기

StrAddr = c.Address '셀 주소 설정

Loop While Not c Is Nothing And StrAddr <> StrFirstaddr '첫 주소와 겹치지 않을때까지 루프

End If

 

 

[Collection 개체를 이용해 중복값 찾기]

Option Explicit

Sub dblName()

 

Dim rngName As Range

Dim rngCell As Range

Dim cltName As New Collection

Dim varName As Variant

Dim i As Integer

'기존항목 제거 후 제목 입력

With Range("C1")

.CurrentRegion.ClearContents

.Value = "중복이름"

End With

'반편성 영역 지정

Set rngName = Range("A1").CurrentRegion

'중복값을 Collection에 저장

On Error Resume Next

For Each rngCell In rngName

If WorksheetFunction.CountIf(rngName, rngCell) > 1 Then

cltName.Add rngCell, CStr(rngCell)

End If

Next rngCell

On Error GoTo 0

'Collection에 저장된 중복값을 배열로 뿌림

For Each varName In cltName

Range("C2").Offset(i, 0) = varName

i = i + 1

Next varName

 

End Sub

 

 

 

[조건부서식있는 셀 세기]

** 조건부 서식이 중첩되는 셀은 둘 중 하나만 적용됨**

조건부 서식주기

Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _

"=AND($C5-E$3>=0.9,$C5-E$3<=1.1)"

Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority

With Selection.FormatConditions(1).Interior

.ColorIndex = 37

.TintAndShade = 0

End With

ReDim stemp(i)

iC = Selection.FormatConditions(1).Interior.ColorIndex

For Each t In Selection

If t.DisplayFormat.Interior.ColorIndex = iC Then ‘조건부서식으로 칠해진 셀 찾는 구문

ReDim Preserve stemp(i)

stemp(i) = t.Value

i = i + 1

End If

Next t

 

[모두 바꾸기]

ActiveSheet.Cells.Replace what:="initial!", Replacement:="Local1!", _

LookAt:=xlPart, MatchCase:=False

 

 

[약간 빠르게 ]

Application.ScreenUpdating = False ‘화면 업데이트 방지

Application.Calculation = xlCalculationManual ‘셀 계산 방지

Application.EnableEvents = False ‘이벤트 방지

 

 

[사용자지정함수 사용하는 법]

Function Cfind(strV As String) As Variant

인수의 타입은 괄호안에, 돌려주는 값의 타입은 괄호밖에

 

 

 

[inputbox TYPE옵션]

 

0 A formula

1 A number

2 Text (a string)

4 A logical value (True or False)

8 A cell reference, as a Range object

16 An error value, such as #N/A

64 An array of values