남겨 놓을 예제 코드들
본 게시글은 전 블로그에서 2020년 8월 23일에 작성한 글입니다 https://blog.naver.com/progress0407/222068792843
Sub 헬로()
'출력해보자.
Sheets("test").Range("A1:b2").Value = "hello"
MsgBox ("Hello World")
End Sub
Sub 헬로2()
'출력해보자.
Sheets("test").Range("A1:b2").Value = "hello"
MsgBox ("Hello World")
End Sub
Function printSq()
MsgBox ("printSq")
Set r = diagnoalCoord()
For i = 0 To 3
Cells(10, 10 + i).Value = r(i) & ": " & r.Item(i)
Next i
End Function
Sub SquareClink()
'ActiveCell.Offset(0, 0).Value = "현재 셀 내용 입력"
'Dim na
'myNa = InputBox("이름 : ")
'MsgBox ("myNa : " & myNa)
'For i = 1 To 2
' For j = 1 To 2
' MsgBox ("(" & i & "," & j & ")")
' Next j
'Next i
Dim cnt
cnt = 0
Do
MsgBox ("cnt : " & cnt)
If cnt > 3 Then
Exit Do
End If
cnt = cnt + 1
Loop
End Sub
Function getValue(cell)
Dim val
val = Range(cell, cell).Value
getValue = val
End Function
쌩처음 작성한 예제 코드들.. 저곳에서 이리 발전할 줄이야..
Function hasWord_prototype(cell, texToFind)
Dim val
val = Range(cell, cell).Value
' 기본 내장 함수, 이함수. 정말 제일 중요하다.
' 단어가 존재할 경우 위치를 반환한다. 대소문자 구분
' 존재 안 할 경우 0을 반환
idx = InStr(1, val, texToFind, vbTextCompare)
If idx > 0 Then
hasWord = "O"
Else
hasWord = "X"
End If
End Function
Sub testAddRows()
Application.ScreenUpdating = False
For r = 1 To 2
For c = 1 To 2
If StrComp(Cells(r, c).Value, "prograNa") = 0 Then
'MsgBox (TypeName(c))
Columns(numToChar(c + 1)).Insert
Rows(r + 1).Insert
End If
Next c
Next r
'Columns("A").Insert
End Sub
Public Function Foo(Optional v As Variant) As Variant
If IsMissing(v) Then
Foo = "Missing argument"
ElseIf TypeName(v) = "String" Then
Foo = v & " plus one"
Else
Foo = v + 1
End If
End Function
https://stackoverflow.com/questions/64436/function-overloading-and-udf-in-excel-vba
Function testBool()
Dim a: a = False
If Not a And True Then
MsgBox ("ok")
End If
Dim b: b = 1
If (b <> 0) Then
MsgBox ("ok")
End If
End Function
'외부함수 부를 때 인가보다. 까먹었다..
Public Function caller()
getColSum = temp()
Call temp2
End Function
' 배열사용.. 끝내 배열은 사용않고, dictionary를 사용했다.
Function temp4()
Dim a, b
a = 1
b = 2
Dim arr()
ReDim arr(0 To b - a + 1)
arr(0) = "hi"
arr(1) = "hello"
For i = 0 To 1
MsgBox (arr(0))
MsgBox (arr(1))
Next i
End Function
타입이 Range 인 것 반환하기
https://docs.microsoft.com/en-us/office/vba/api/excel.range(object)
https://stackoverflow.com/questions/439510/can-a-vba-function-in-excel-return-a-range
https://coronasdk.tistory.com/777
Public Function tDic()
Dim dict 'Create a variable
Set dict = CreateObject("Scripting.Dictionary")
'Add some keys and items
dict.Add "a", "Athens"
dict.Add "b", "Belgrade"
dict.Add "c", "Cairo"
Set tDic = dict
End Function
Function gDic()
Dim kv
Set kv = tDic()
For Each k In kv.keys
MsgBox (kv.Item("a"))
MsgBox ("key: " & k & " Value: " & kv.Item(k))
Next
End Function
' 영역안의 모든 문자열을 연결한다.
Function concatArea(cell As Range)
Dim resultVal
resultVal = ""
'MsgBox ("0")
Dim addr
addr = cell.Address
addr = Replace(addr, "$", "")
Dim colIdx
colIdx = InStr(addr, ":")
'MsgBox ("1")
If colIdx = 0 Then
getContent = cell
Exit Function
End If
Dim leftAddr, leftCol, leftRow
leftAddr = Mid(addr, 1, colIdx - 1)
leftCol = Range(leftAddr).Column
leftRow = Range(leftAddr).row
'MsgBox ("left : " & leftCol & " leftRow: " & leftRow)
Dim rightAddr, rightCol, rightRow
rightAddr = Mid(addr, colIdx + 1, Len(addr) - colIdx)
rightCol = Range(rightAddr).Column
rightRow = Range(rightAddr).row
'MsgBox ("right : " & rightCol & " rightRow: " & rightRow)
For c = leftCol To rightCol
For r = leftRow To rightRow
resultVal = resultVal & Cells(r, c).Value
'MsgBox ("re: " & re)
Next r
Next c
concatArea = resultVal
End Function
이 예제를 통해서 dictionary를 많이 탐구했다..
정말 무슨 에러가 그리 나는지…
와아.. 마지막에 못잡은 에러가 return을 줄 함수이름이 오기가 돼 있어서 였다..