땡큐엑셀vba & 엑셀매크로

 

'[현재 통합문서]
'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=283236287
'
'NOW는 현재시간이 표시되고 더이상 올라가지않는데
'자동으로 현재시간으로 바뀌는걸 엑셀로 만들수있나요?


'Source by 땡큐엑셀vba & 엑셀매크로
'
'엑셀파일 오픈될때 실행되는 이벤트
Private Sub Workbook_Open()

    '1초후에 모듈에 있는 "시계" 프로시저 호출
    예약시간 = Now + TimeSerial(0, 0, 1)
    Application.OnTime 예약시간, "시계"
    
End Sub

 

'Source by 땡큐엑셀vba & 엑셀매크로
'
Sub 시계()

    '현재셀에 현재시간 표시
    ActiveCell = Now
    
    Call 반복예약

End Sub


Sub 반복예약()

    '1초후에 시계 프로시저 호출
    예약시간 = Now + TimeSerial(0, 0, 1)
    Application.OnTime 예약시간, "시계"

End Sub

 

자동시계-Application.Ontime-땡큐엑셀vba.xlsm
0.02MB

 

실행전

 

실행후

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=293294923
'
'첫번째 표를 두번쨰 표 형식으로 바꾸려고 하는데요
'a열에 데이터가 존재하면 b열의 값을 한줄 내려서 표시하도록 하려고 합니다.
'이걸 일일히 손으로 작업하지 않고 엑셀기능을 통해서 쉽게 할 수 있는 방법이 없을까요??



'[Sheet2]
'
'Source by 땡큐엑셀vba & 엑셀매크로
'
Sub 실행()
    
    '100행까지 (이부분은 입맛에 맞게 수정하여 사용하세요)
    For i = 1 To 100
    
        strA = Range("A" & i)
        strB = Range("B" & i)
        
        If strA <> "" And strB <> "" Then
            '아래에 행삽입
            Cells(i + 1, "A").EntireRow.Insert Shift:=xlDown
            'B열 공백으로
            Cells(i, "B") = ""
            '삽입한 행의 B열에 값복사
            Cells(i + 1, "B") = strB
        End If
        
    Next
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
 
 
End Sub

지그재그로출력-땡큐엑셀vba.xlsm
0.14MB

 

 

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=291935752
'
'완료 O열에 숫자 0을 쓰면 X표시가, 숫자 1을 쓰면 V표시가 되면서 해당 행 전체의 색이 변합니다
'완료 O열에 숫자 1을 쓸 경우 해당 행의 색이 변함과 동시에
'확인시간 P열에 V표시 시간을 자동으로 입력하고 싶습니다
'
'그리고 이름 F열에 내용을 기입하면 번호, 날짜, 시간이 자동으로 입력되는데
'이 부분에는 영향이 없었으면 좋겠습니다
'
'O열 혹은 P열에 사용할 함수식 부탁드립니다


' hello 시트
'
' source by 땡큐엑셀vba & 엑셀매크로
'
Private Sub Worksheet_Change(ByVal Target As Range)

    'O열 인지 체크
    If Not Intersect(Target, Range("O:O")) Is Nothing Then
        If Target.Value = 1 Then
            Cells(Target.Row, "P") = Now() '현재시각
        Else
            Cells(Target.Row, "P") = "" '널
        End If
    End If
    
    
End Sub


데이터입력시 자동으로 날짜입력-worksheet_change이벤트-땡큐엑셀vba.xlsm
0.14MB

 

 

'https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=302512665
'

'엑셀에서 사람 이름을 치면 어떤 셀에서든 옆 칸에 도장이 자동으로 찍히게 하고싶은데요. 어떻게 하면되죠?
'이 매크로 쓰니까 이미지 이름을 치면 옆에 사진이 나오긴 하는데 A열에서만 나오네요. 어떤 셀에서든 이름을 치면 바로 옆칸에 이미지가 뜨면 좋겠어요. 그리고 이 매크로를 쓰면특정 폴더에서 이미지를 못 가져오나요? 무조건 엑셀파일이랑 같은 폴더 안에 있으면 넣을 게 너무 많아져서요.
'부탁드립니다


'
'Modified 땡큐엑셀vba & 엑셀매크로
'
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim StrFile As String
    
    Application.ScreenUpdating = False
    On Error GoTo MM
    
    
    'If Target.Column = 1 And Target.Row > 1 And Target.Value <> "" Then
    '값이 있으면
    If Target.Value <> "" Then
    

        
        '아래와 같이 경로를 주면 됩니다.(경로는 수정하여 사용하세요)
        StrFile = "c:\temp\" & Target.Value & ".jpg"
        'StrFile = ThisWorkbook.Path & "\" & Target.Value & ".jpg"
        
    
        ActiveSheet.Pictures.Insert(StrFile).Select
    
        With Selection
            
            .Top = Target.Offset(0, 1).Top
            .Left = Target.Offset(0, 1).Left
            .Width = Target.Offset(0, 1).Width
            .Height = Target.Offset(0, 1).Height
        End With
    
    End If
    
    Target.Offset(0, 1).Select
    Exit Sub


MM:
    MsgBox "없는 파일"
    Target.Select
    
End Sub

 

옆셀에사진출력-pictures_insert-땡큐엑셀vba.xlsm
0.15MB

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=281139295
'
'밑에 처럼 시작 점과 종료 지점을 입력하면 옆에 자동으로 색칠하고 싶어요.. 날짜는 계속 늘어 날수 있고요..  부탁드립니다.. 반복문.. 어렵습니다....


'
' source by 땡큐엑셀vba & 엑셀매크로
'
' A,B열 변경시 처리위해 Change이벤트 사용
Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    
    '화면갱신 일시 중지
    Application.ScreenUpdating = False
    
    '한개의 셀 선택시에만 계속 진행
    If Target.Count > 1 Then Exit Sub


    'A,B열 인지 체크
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        'MsgBox "A열"
        시작일 = Target
        종료일 = Target(1, 2)
    ElseIf Not Intersect(Target, Range("B:B")) Is Nothing Then
        'MsgBox "B열"
        종료일 = Target
        시작일 = Target(1, 0)
    Else
        Exit Sub
    End If
    
    
    
    '시작과 종료날짜 체크
    '시작일과 종료일다 값을 가지고 있는 경우만 계속 진행
    If 시작일 = "" Or 종료일 = "" Then
        Exit Sub
    Else
        'MsgBox "OK"
    End If
    
    
    
    
    '전체날짜
    Set 범위 = Range(Range("C1"), Range("C1").End(xlToRight))
    
    '전체날짜범위내에서 해당하는 날짜에 색칠
    For Each c In 범위
        If c >= 시작일 And c <= 종료일 Then
            Cells(Target.Row, c.Column).Interior.Color = vbRed '빨강색
        Else
            With Cells(Target.Row, c.Column).Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            
        End If
    Next
    
    '화면 갱신 재계
    Application.ScreenUpdating = True
    
End Sub

 

 

날짜색칠하기-Worksheet_Change_Intersect_Interior-땡큐엑셀vba.xlsm
0.12MB

 

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=283562551
'
'예를 들면
'A1 셀에 FREE NOTE 라고 적혀있고
'A2 셀에 FREE SIZE 라고 적혀있을 때
'다른 셀에 두 셀의 내용 중 중복되는 단어는 FREE라고 나오거나
'또는 이 FREE 라는 단어가 몇 번 중복되었는지 출력할 수 있는 함수가 있을까요?
'조건부 서식으로는 불가능합니다.

'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 단어카운트()

    Dim D As Object
    Dim v범위
    
    
    v범위 = Selection
    
    
    'i:j열 클리어
    Range("i:j").Clear
    
    '화면갱신 중지
    Application.ScreenUpdating = False
    
    
    '1. 범위를 루프돌며 사전에 기록
    Set D = CreateObject("Scripting.Dictionary")    '딕셔너리 선언
    
    
    '파싱
    For Each r In Selection
    
        '널이 아닌셀만
        If r <> "" Then
        
            'Split함수를 사용하여 공백으로 단어 분리
            v범위 = Application.Transpose(Split(r, " ")) '행,열 변환
        
            iCnt = UBound(v범위, 1)
            Select Case iCnt
                Case 1: '1개 단어일 경우
                    If Not D.exists(v범위(iCnt)) Then
                        '처음출현하는 단어
                        D.Add v범위(iCnt), 1
                    Else
                        '재출현하는 단어는 +1
                        D.Item(v범위(iCnt)) = D.Item(v범위(iCnt)) + 1
                    End If
                
                
                Case Else '2개 이상의 단어일경우
                
                     For i = 1 To UBound(v범위, 1)
                        If Not D.exists(v범위(i, 1)) Then
                            '처음출현하는 단어
                            D.Add v범위(i, 1), 1
                        Else
                            '재출현하는 단어는 +1
                            D.Item(v범위(i, 1)) = D.Item(v범위(i, 1)) + 1
                        End If
                    Next
            
            End Select
            
            


        End If
        
    
    Next
    
    
    
    
    '출력
    Dim key As Variant
    j = 1
    For Each key In D.Keys
        Cells(j, "I") = key
        Cells(j, "J") = D(key)
        
        j = j + 1
        'Debug.Print key, dict(key)
    Next key
    
    
    '화면 갱신 재계
    Application.ScreenUpdating = True
    
    
    MsgBox "완료되었습니다.", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
End Sub

 

단어카운트-Dictionary_Transpose_Split-땡큐엑셀vba.xlsm
0.06MB

 

D열(처리시간)이 변경되면 완료시간도 자동으로 계산됨

 

C열(접수시간)이 변경되면 완료시간도 자동으로 계산됨

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=284326395

'매일 매일 문서를 작성해야합니다.
'이런식의 문서내용이 있습니다.
'접수시간 + 처리시간 이 완료시간으로 TIME 함수를 써서 만들었는데
'다음날 문서를 새로 만들때. 시트내용을 다 지워야하거든요.
'그러면 완료시간에 적은 함수도 지워지는데
'함수 수식은 안지워지게 고정할수 없나요???
'함수 수식은 Del 키를 눌러도 안지워지게 할수 없나요.
'DEL 키를 누르면 다 지워지잖아요.
'근데 함수 수식은 안지워지게 하고 싶은데 방법 없나요???

'
' Source by 땡큐엑셀vba & 엑셀매크로
'
Private Sub Worksheet_Change(ByVal Target As Range)

    '에러 무시
    On Error Resume Next

    'D열에 변화가 있을때
    If Not Intersect(Target, Range("D:D")) Is Nothing Then
        
        If Target.Offset(0, -1) <> "" Then
            'DateAdd를 사용하여 분(n)을 더한다
            Target.Offset(0, 1) = DateAdd("n", Target, Target.Offset(0, -1))
        End If
            
    End If
    
    
    'C열에 변화가 있을때
    If Not Intersect(Target, Range("C:C")) Is Nothing Then
        
        If Target.Offset(0, 1) <> "" Then
            'DateAdd를 사용하여 분(n)을 더한다
            Target.Offset(0, 2) = DateAdd("n", Target.Offset(0, 1), Target)
        End If
            
    End If

End Sub

완료시간구하기-Worksheet_Change-땡큐엑셀vba.xlsm
0.20MB

 


'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1020201&docId=281241993
'
'예로 1=1 같은 값이라서 소리가 발행하나 1=1-> 1=2 로 변할때 까지 계속 발생합니다.
'문의1: 소리 1회 발생 할수 없나요?
'문의2: 소리 시작<->정지 버튼은 어떻게 하는건가요?
'고수님들 도와주세요~

'[시트]
'
'souce by 땡큐엑셀vba & 엑셀매크로
'

'계산될때마다 실행되는 이벤트 프로시저
Private Sub Worksheet_Calculate()

    Call playSound
    
End Sub


'음악Stop
Sub StopPlay()

    Call stopSound

End Sub


'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1020201&docId=281241993
'
'예로 1=1 같은 값이라서 소리가 발행하나 1=1-> 1=2 로 변할때 까지 계속 발생합니다.
'문의1: 소리 1회 발생 할수 없나요?
'문의2: 소리 시작<->정지 버튼은 어떻게 하는건가요?
'고수님들 도와주세요~



'[모듈]
#If Win64 Then
    Public Declare PtrSafe Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
           (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#Else
    Public Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
                                           (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#End If


'
'souce by 땡큐엑셀vba & 엑셀매크로
'
'비동기방식play
Sub playSound()

    If [W8] = [W9] Then
        
        '파일의 위치는 수정하여 사용하세요
        wave1 = "C:\temp\SOUND1.wav"
        '비동기 방식으로 play
        Call sndPlaySound32(wave1, 1)
    End If

    If [X8] = [X9] Then
        '파일의 위치는 수정하여 사용하세요
        wave2 = "C:\temp\SOUND0.wav"
        '비동기 방식으로 play
        Call sndPlaySound32(wave2, 1)
    End If
    

End Sub


'stop sound
Sub stopSound()

    '없는 파일 play하여 stop시킴
    wave3 = "stop.wav"
    Call sndPlaySound32(wave3, 1)

End Sub

 

비동기방식의 Wave파일 Play_Stop-땡큐엑셀vba.xlsm
0.05MB
sound0.wav
1.08MB
sound1.wav
0.29MB

 

 

a 입력하면 영어로 바뀜
b 입력하면 영어로 바뀜

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=280478645
'
'엑셀에서 VBA (매크로) 작업할때 왼쪽 ABCDE 를 입력하면 자동으로 영어로 바뀌는 매크로는 없나요?
'셀어디에든 ABCDE 를 입력하면 영어로 바뀌는 매크로 어디없나요 ?




''Worksheet의 change이벤트를 사용합니다.
'
'source by 땡큐엑셀vba & 엑셀매크로
'
Private Sub Worksheet_Change(ByVal Target As Range)
    
        
    '이벤트 잠시중단
    Application.EnableEvents = False
    
    '한개의 셀만 선택되었을때
    If Target.Count = 1 Then
    
        'A,B,C,D,E,a,b,c,d,e 일경우
        If UCase(Target) = "A" Or UCase(Target) = "B" Or UCase(Target) = "C" Or UCase(Target) = "D" Or UCase(Target) = "E" Then
            Target = "영어"
        End If
        
    End If
    
    '이벤트 제계
    Application.EnableEvents = True
    
End Sub

 

abcd입력하면 자동으로 문자변환-Worksheet_Change이벤트이용-땡큐엑셀vba.xlsm
0.05MB

 

 

 

 

 

'http://tip.daum.net/question/97566847
'
'무작위 숫자 추출 방법?
'감사합니다.
'1부터 27까지의 숫자를 가지고
'무작위로 불규칙하게
'매번 다른 내용의 일련의 난수표를 만들고자합니다.
'예를 들면,
'1회차 : 13, 7, 27, 24, 14, 19......
'2회차 : 22. 3, 18, 22, 5,......식으로
'3회차 : (1부터 27까지의 무질서한 숫자 배열)형태입니다.
'어떤 방식이 있는지요?


'
'source by 땡큐엑셀vba & 엑셀vba
'
'중복없는
Sub 무작위수()

    Dim D As Object
    'Dim v범위
    Dim 최소값 As Integer
    Dim 최대값 As Integer
    Dim 중복허용여부 As String
    Dim 갯수 As Integer
    Dim 배열1() As Integer
    
    
    최소값 = Range("B1")
    최대값 = Range("B2")
    중복허용여부 = Range("B3")
    갯수 = 최대값 - 최소값 + 1
    
    
    'v범위 = Selection
    
    
    'D:E열 클리어
    Range("10:10").Clear
    
    '화면갱신 중지
    Application.ScreenUpdating = False
    
    
    '딕셔너리 선언
    'Set D = CreateObject("Scripting.Dictionary")
    
    '난수 발생기를 초기화 합니다
    Randomize
    
    
    '배열에 범위값 할당
    For i = 0 To 최대값 - 최소값
        
        ReDim Preserve 배열1(i)
        배열1(i) = 최소값 + i
        
        DoEvents
        
    Next i
    
    
    
    
    

    
    '랜던하게 숫자선택
    cnt = 갯수 - 1
    Do

        k = Int(Application.WorksheetFunction.RandBetween(0, cnt))
        
        'strA = strA & "," & 배열1(k)
        tmp = 배열1(cnt)
        배열1(cnt) = 배열1(k)
        배열1(k) = tmp

        cnt = cnt - 1

        DoEvents
           
    Loop Until cnt < 0
    
    
    '출력
    rSize = UBound(배열1, 1) + 1
    Range("C1").Resize(rSize, 1) = Application.Transpose(배열1)
    
    
    
    '출력
'    Dim key As Variant
'    j = 1
'    For Each v In 배열1
'        Cells(j, "J") = v
'        j = j + 1
'    Next
    
    
    '화면 갱신 재계
    Application.ScreenUpdating = True
    
    
    MsgBox "완료되었습니다.", vbInformation, "땡큐엑셀vba & 엑셀매크로"
End Sub

 

중복없는난수표-ReDim_Preserve_Randomize_DoEvents_RandBetween_Resize_Transpose-땡큐엑셀vba.xlsm
0.05MB