남겨 놓을 예제 코드들

본 게시글은 전 블로그에서 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을 줄 함수이름이 오기가 돼 있어서 였다..




© 2020.12. by 따라쟁이

Powered by philz