Excel VBA - ynjch97/YNJCH_WIKI GitHub Wiki

1. ๋ณ€์ˆ˜ ์„ค์ •

  • Dim : Dimension์˜ ์•ฝ์ž๋กœ, ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ช…๋ น์–ด
  • Dim ๋’ค์— ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๋ณ€์ˆ˜๋ช…์„ ์ž…๋ ฅ
  • AS ๋’ค์— ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ์ง€์ • (์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋ฌด๋ฐฉ)
Dim fileName As String
Dim fileSize As Integer

2. ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ

2-1. If ๋ฌธ

If fileSize > 0 Then
    Exit Sub
ElseIf fileSize = 0 Then
    fileName = Cells(2, "A").Value
Else
    fileName = Cells(3, "A").Value
End If

2-2. Case ๋ฌธ

  • Select Case Target.Column : Target.Column ์ฆ‰, ์—ด์— ๋Œ€ํ•œ Case ๋ฌธ์ž„
  • Case 7 : ์ผ๊ณฑ ๋ฒˆ์งธ ์—ด์ธ G์—ด์„ ๋œปํ•จ
  • Target.Row : ์„ ํƒํ•œ ์…€์˜ ํ–‰ ๋ฒˆํ˜ธ๋ฅผ ๋ฆฌํ„ด
Select Case Target.Column
    Case 7
        fileSize = 0
    Case 10
        Cells(Target.Row, "A").Value
    Case Else
        Exit Sub
End Select

2-3. For ๋ฌธ

For i = [์‹œ์ž‘๊ฐ’] To [์ข…๋ฃŒ๊ฐ’]
    (์ƒ๋žต)
Next i

3. ์…€ ์ œ์–ด

3-1. ํŠน์ • ์…€์— ํฌ์ปค์Šค ์ฃผ๊ธฐ

  • If Target.Column = 2 And Target.Row = 7 Then : ์„ ํƒํ•œ ํƒ€๊ฒŸ์ด 2์—ด(B์—ด) 7ํ–‰์ด๋ผ๋ฉด
  • Target.Value : ์„ ํƒํ•œ ๋Œ€์ƒ ์…€์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
  • Range("B4") ๋˜๋Š” Cells(4, "B") : B4์—ด ์ œ์–ด ์‹œ Range ๋˜๋Š” Cells ์‚ฌ์šฉ
  • Range("B4").Select : B4์…€์— ํฌ์ปค์Šค ์ฃผ๊ธฐ
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   
    Select Case Target.Column
        Case 2, 3, 4, 5
            If Target.Column = 2 And Target.Row = 7 Then
                Range("B" & (Target.Value + 9)).Select
                Cells((Target.Value + 9), "B").Select
            End If
        Case Else
            Exit Sub
    End Select
    
End Sub

4. ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ

  • ์•„๋ž˜์™€ ๊ฐ™์ด ๋”๋ธ” ํด๋ฆญ, ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ํด๋ฆญ ๋“ฑ์— ์ด๋ฒคํŠธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    (๋‚ด์šฉ ์ž…๋ ฅ)
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    (๋‚ด์šฉ ์ž…๋ ฅ)
End Sub

4-1. ํ™œ์šฉ ์˜ˆ์‹œ

  • 10~14์—ด์— ๋Œ€ํ•ด ์šฐํด๋ฆญ ์‹œ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ ์ ์šฉ
  • 15์—ด์— ๋Œ€ํ•ด ์šฐํด๋ฆญ ์‹œ "O","X" ํ† ๊ธ€ ์ด๋ฒคํŠธ ์ ์šฉ
  • 1~9ํ–‰์€ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•ด๋„ ๋ฐ˜์‘ํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌ
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    Select Case Target.Column
        Case 10, 11, 12, 13, 14, 15
            If Target.Row < 10 Then '1~9ํ–‰์€ Exit Sub
                Exit Sub
            End If
        Case Else '10~15์—ด์ด ์•„๋‹ˆ๋ฉด Exit Sub
            Exit Sub
    End Select
    
    Select Case Target.Column
        Case 10, 11, 12, 13, 14 '๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ
            If Target.Interior.Color = RGB(153, 153, 255) Then
                Target.Interior.Color = RGB(255, 255, 255)
            Else
                Target.Interior.Color = RGB(153, 153, 255)
            End If
                
        Case 15 'O,X ๋ณ€๊ฒฝ
            If Target.Value = "O" Then
                Target.Value = "X"
            Else
                Target.Value = "O"
            End If
            
        Case Else
            Exit Sub
    End Select

End Sub

5. ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ ํ˜ธ์ถœ

5-1. ํ…์ŠคํŠธ ํŒŒ์ผ ์—ด๊ธฐ

Dim filePath As String
Dim fileName As String
Dim progPath As String

filePath = "y:\๊ฒฝ๋กœ1\๊ฒฝ๋กœ1-1\"
fileName = filePath & Target.Value & ".sql"

If Dir(fileName) = "" Then '์„ค์ •ํ•œ ๊ฒฝ๋กœ์— ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ
    Exit Sub
Else
    Workbooks.Open fileName:=fileName 'ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด ์—ด๊ธฐ
End If
    progPath = "C:\Users\YNJCH\AppData\Local\Programs\Microsoft VS Code\Code.exe" '์‹คํ–‰์‹œํ‚ฌ ํŒŒ์ผ ๊ฒฝ๋กœ
    progPath = "notepad.exe" '์‹คํ–‰์‹œํ‚ฌ ํŒŒ์ผ ๊ฒฝ๋กœ
    Proc = Shell(progPath & " " & fileName, vbNormalFocus) 'ํŒŒ์ผ ์‹คํ–‰!!

5-2. Excel ํŒŒ์ผ ์—ด๊ธฐ

Dim filePath As String
Dim fileName As String

filePath = "y:\๊ฒฝ๋กœ1\๊ฒฝ๋กœ1-1\"
fileName = filePath & "Excel.xlsx"

If Dir(fileName) = "" Then '์„ค์ •ํ•œ ๊ฒฝ๋กœ์— ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ
    Exit Sub
Else
    Workbooks.Open fileName:=fileName 'ํŒŒ์ผ์ด ์กด์žฌํ•˜๋ฉด ์—ด๊ธฐ
End If

5-3. Excel ํŒŒ์ผ๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ

  • For ๋ฌธ์œผ๋กœ ์„ ํƒํ•œ ์…€์˜ ํ–‰๊ณผ ๊ทธ ์ดํ›„ 3๊ฐœ ํ–‰์˜ ๊ฐ’์„ ํ™•์ธ
  • Dir("A*.xlsx") : A๋กœ ์‹œ์ž‘ํ•˜๋Š” Excel ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ด
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

    Dim abbName As String
    Dim fileName As String
    Dim filePath As String
    Dim idx As Integer
    
    Select Case Target.Column
        Case 7 '์„ ํƒํ•œ ์…€์ด G์—ด์ธ ๊ฒฝ์šฐ For ๋ฌธ ์‹œ์ž‘
            For i = Target.Row To Target.Row + 3 
                filePath = "y:\๊ฒฝ๋กœ1\๊ฒฝ๋กœ1-1\"
                fileName = "" 'ํŒŒ์ผ๋ช… ๋ณ€์ˆ˜๋Š” ๋นˆ๊ฐ’์œผ๋กœ ์„ ์–ธ

                If Len(Cells(i, "F").Value) > 0 Then 'F์—ด์˜ iํ–‰์— ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ Excel ํŒŒ์ผ๋ช… ๊ฐ€์ ธ์˜ค๊ธฐ
                    fileName = Dir(filePath & Cells(i, "F").Value & "*.xlsx")
                End If
                
                Cells(i, "Q") = Left(Right(fileName, 16), 11)
            Next i
            
        Case Else
            Exit Sub
    End Select
    
End Sub