rand(life)
[VBA] 코드 모음10 - 기타 본문
'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:30에 eoj 프로시저 실행
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로 한글,한자,영문,숫자,기호 등을 구별하는 함수|작성자 쭌
[지수표시]
12345678901이 1.23E+10으로 표시되며, 이는 1.23에 10의 10승을 곱한 값입니다.
pa
http://bigexcel.kr
파워쿼리 관련 글
https://msdn.microsoft.com/en-us/library/office/aa164506(v=office.10).aspx
integer 보다 long 선호, 더 빠름
byte는 255까지 효율적이나, 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 표]
[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