땡큐엑셀vba & 엑셀매크로

땡큐 누적카운트1

 

땡큐 누적카운트4

 

헬로우 누적카운트1

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=279712065
'
'B1셀에 원하는 이름을 입력하고
'A4나 아무곳에 있는 매크로 실행 버튼을 누르면
'C2부터 C열 아래로 B1에 쓴 이름이 누적해서 나열되고,
'D2부터 D열 아래로는 누적횟수가 기록되는 매크로를 만들고싶네요.
'ex) 밑에 화면에서
'헬로'를 5명이나 희망한 사람이 있는데 다른 사람이 쓰면 '헬로' 옆에수가 6명으로 증가하게끔요.
'해피'를 B1에 입력하고 매크로를 실행하면 허니 밑에 해피가 추가되고, 옆에 수가 1명이 되게끔요.


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

    마지막행 = Cells(Cells.Rows.Count, "C").End(xlUp).Row
    
    '찾는값의 위치는 알맞게 변경하여 사용하세요.
    찾는값 = Cells(1, "B")
    
    '맨 마지막행부터 1행까지 거꾸로 올라가면서 C열에서 찾는다
    For i = 마지막행 To 1 Step -1
        'C열이 아닌 다른 열일경우 변경하여 사용하세요.
        If Cells(i, "C") = 찾는값 Then
            '찾는값인 경우 카운트증가
            현재값 = Cells(i, "C").Offset(0, 1)
            Cells(i, "C").Offset(0, 1) = 현재값 + 1
            Exit For
        End If
    Next i
    
    '새로운 값인경우 끝에 추가
    If i = 0 Then
        Cells(마지막행 + 1, "C") = 찾는값
        Cells(마지막행 + 1, "C").Offset(0, 1) = 1
    End If
    
    

    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"

End Sub

값찾고누적카운트-Rows.Count_Offset_End-땡큐엑셀vba.xlsm
0.05MB

 

 

시트 리스트

 

시트 삭제

 

'모든 시트명을 A열에 나열합니다.
'
' source by 땡큐엑셀vba & 엑셀매크로
'
Sub 시트리스트업()

    i = 1
    For Each 시트변수 In Worksheets
        'A열에 시트명을 나열합니다.
        Cells(i, "A") = 시트변수.Name
        i = i + 1
    Next
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
End Sub



'시트삭제
Sub 시트삭제()

    '에러무시하고 계속수행
    On Error Resume Next
    
    For Each 시트변수 In Worksheets
    
        If MsgBox(시트변수.Name & "를 삭제할까요?", vbOKCancel, "확인") = vbOK Then
            '시트를 삭제합니다.
            시트변수.Delete
        End If
        
    Next
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
End Sub

 

시트리스트업_시트삭제-Worksheets_Name_Delete-땡큐엑셀vba.xlsm
0.05MB

 

 

실행전

 

실행후

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=279521143
'A열에서 같은 이름을 찾아 B열의값으로 채우기

'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub B열채우기()

    마지막행 = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    
    '
    For i = 1 To 마지막행
    
    
        'B열에 값이 있으면
        B셀값 = Cells(i, "B")
        If B셀값 <> "" Then
            'A열의 값을 기억하고
            A셀값 = Cells(i, "A")
            
             '1.A열 전체에서(검색범위)
             Set 범위 = Range("A:A")
             Set Rng = 범위.Find(what:=A셀값, lookat:=xlWhole)
        
              '검색결과가 있다면
             If Not Rng Is Nothing Then
                strAddr = Rng.Address  '첫 위치 주소
                
                '2.검색결과가 없을때 까지 루프
                Do
                    'Offset메서드를 이용하여 B열에 값을 출력한다.
                    Rng.Offset(0, 1) = B셀값
                    Set Rng = 범위.FindNext(Rng) 'Next
                Loop While Not Rng Is Nothing And Rng.Address <> strAddr
             End If

        End If
        
    
    Next i
    
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"


End Sub

 

A열에서 같은값 찾아 B열채우기-find_FindNext-땡큐엑셀vba.xlsm
0.05MB

 

 

아래로 이동

 

아래로 이동

 

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

'위와 같은 엑셀에서
'원하는 행에서 버튼을 누르면 버튼의 종류(위,아래)에 따라 이동하는 매크로를 짜고 싶습니다.
'예를들어, 8행에 클릭을 한뒤 (A~L열 상관없이) 위 버튼을 누르면 7행으로 이동하고, 다시 아래버튼을 누르면 8행으로 이동해지는
'행이 통째로 이동해지는 매크로를 짜고자하는데 도와주실 분


'태그
'Selection.Insert, Selection.Cut, Selection.Delete
'offset
'Rows,row,address
'Application.ScreenUpdating


'
'source by 땡큐엑셀vba & 엑셀매크로
'
'윗행과 교체
Sub 위로이동()
'
' 매크로1 매크로
'

'
    '화면 업데이트 중지
    Application.ScreenUpdating = False
    
    'ActiveCell이 있는 행번호
    cRow = Selection.Row
    cAddr = Selection.Address

    '바로 아래의 행번호
    upRow = cRow - 1
    '바로 위의 행번호
    downRow = cRow + 1
    
    
    'ActiveCell이 있는 행 선택
    Rows(cRow & ":" & cRow).Select
    'ActiveCell위에 새로운 행 삽입
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
    '새로운 행으로 이동
    Rows(upRow & ":" & upRow).Select
    Selection.Cut Destination:=Rows(cRow & ":" & cRow)
    
    '아래행을 위로 이동
    Rows(downRow & ":" & downRow).Select
    Selection.Cut Destination:=Rows(upRow & ":" & upRow)
    
    '아래행을 삭제
    Rows(downRow & ":" & downRow).Select
    Selection.Delete Shift:=xlUp
    
    '옮겨진 위치로 선택
    Range(cAddr).Offset(-1, 0).Select
    
    
    '화면 업데이트 재개
    Application.ScreenUpdating = True
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
End Sub



'
'source by 땡큐엑셀vba & 엑셀매크로
'
'아래행과 교체
Sub 아래로이동()
'
' 매크로1 매크로
'

'
    '화면 업데이트 중지
    Application.ScreenUpdating = False
    

    'ActiveCell이 있는 행번호
    cRow = Selection.Row
    cAddr = Selection.Address
    
    '바로 아래의 행번호
    downRow = cRow + 1
    ''아래 아래의 행번호
    downdownRow = cRow + 2
    

    'ActiveCell이 있는 행 선택
    Rows(cRow & ":" & cRow).Select
    'ActiveCell위에 새로운 행 삽입
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
    '아래행을 새로운 행으로 이동
    Rows(downdownRow & ":" & downdownRow).Select
    Selection.Cut Destination:=Rows(cRow & ":" & cRow)
    
    '아래행을 삭제
    Rows(downdownRow & ":" & downdownRow).Select
    Selection.Delete Shift:=xlUp
    
    '옮겨진 위치로 선택
    Range(cAddr).Offset(1, 0).Select
    
    
    '화면 업데이트 재개
    Application.ScreenUpdating = True
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
End Sub

 

위로 아래로 행이동_Insert_Cut_Delete_Offset_Address-땡큐엑셀vba.xlsm
0.05MB

 

 

실행전

 

실행후

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=279517967
'
'그림에서 보시는것 처럼 특정값 예를들면0.3 이 있는행 아래로 행을 자동으로 추가하고
'싶습니다 수식적용해서가능할런지요 그리고 행의크기도 설정가능한지요
'도와주시면 감사드리겠습니다 수식으로 가능치 않다면 매크로로 알려주심 감사하겟습니다


'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 행삽입()

    마지막행 = Cells(Cells.Rows.Count, "A").End(xlUp).Row
    
    '찾는값의 위치는 알맞게 변경하여 사용하세요.
    찾는값 = Cells(1, "M")
    
    '맨 마지막행부터 1행까지 거꾸로 올라오면서 C열에서 찾는다
    For i = 마지막행 To 1 Step -1
        'C열이 아닌 다른 열일경우 변경하여 사용하세요.
        If Cells(i, "C") = 찾는값 Then
            '찾는값이 있을경우 아래에 행 추가하기
            Cells(i + 1, "C").EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        End If
    Next i


   MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
   
End Sub

 

특정값아래에 행추가-EntireRow_Insert-땡큐엑셀vba.xlsm
0.05MB

 

 

'엑셀 VBA를 통해서 자동으로 16진수로된 문자열을 표시 하려 합니다.
'시작 번호(dec)와 끝번호(dec)를 입력해서 값이 나오는것은 해결되었는데
'시작번호(hex)를 입력후 원하는수량(DEC)를 입력하면
'그 수량만큼 시작번호부터 1씩 증가하면서 원하는 수량 만큼 나타나게 하고 싶습니다.
'
'1. 시작번호 : (AA:BB:CC:00:00:0A) => 이중 앞자리 AA:BB:CC:는 고정
'2. 소요량  : 30
'3. 결과 값
'AA:BB:CC:00:00:0A
'AA:BB:CC:00:00:0B
'AA:BB:CC:00:00:0C
'AA:BB:CC:00:00:0D
'.
'AA:BB:CC:00:00:28


'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 연속맥주소()

    Dim 뒷번호 As String
    Dim 십진수 As Long
    Dim 십육진수 As String
    
    

    갯수 = Cells(2, "B")
    시작번호 = Cells(2, "A")
    뒷번호 = Mid(시작번호, 10, 2) & Mid(시작번호, 13, 2) & Mid(시작번호, 16, 2)
    앞번호 = Mid(시작번호, 1, 9)
    
    
    '갯수만큼 루프
    For i = 1 To 갯수
        
        '뒷번호에 +1하여 십진수로 변환
        십진수 = hexToDec(뒷번호) + i
    
        '그 값을 16진수로 변환
        십육진수 = decToHex(십진수)
        
        '6자리로 만듬
        헤더 = ""
        For j = 1 To 6 - Len(십육진수)
            헤더 = 헤더 & "0"
        Next j
        십육진수 = 헤더 & 십육진수
        
        '앞번호 & 뒷번호 조립
        결과 = 앞번호 & Mid(십육진수, 1, 2) & ":" & Mid(십육진수, 3, 2) & ":" & Mid(십육진수, 5, 2)
        
        '결과를 셀에 출력
        Cells(i + 1, "A") = 결과
    Next i
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"

End Sub


'10진수 --> 16진수
Function hexToDec(Hex As String) As Long
  hexToDec = Val("&H" & Hex)
End Function


'16진수 -> 10진수
Function decToHex(Dec As Long) As String
  decToHex = Hex(Dec)
End Function

연속된 맥어드레스구하기-Hex_Dec-땡큐엑셀vba.xlsm
0.05MB

 

기록순위

 

 

데이터>웹

 

테이블 보기

 

웹보기

 

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


'http://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo&year=2017&type=batter&playerOrder=hra
'위이 사이트는 네이버에서 프로야구 선수(투수 및 타자)의 기록순위가 나오는 사이트 입니다.
'(* 화면 우측 상단의 '장타율' 옆의 붉은 박스 안의 화살표를 클릭하면 OPS,..., WAR 등의 순위도 나옵니다.)
'투수와 타자의 모든 순위 데이터를 서식없이 텍스트로만 가지고 오는 웹쿼리를 VBA로 구현하고 싶습니다. 서점에서 아무리 책을 찾아봐도 웹쿼리에 대해 자세히 나온 책이 없더군요.
'코드와 함께 간단한 주석도 첨부해 주시면 스스로 공부해 보겠습니다.
'시간들여서 너무 정성껏 만들지 않으셔도 됩니다. 전체적인 흐름만 알수 있으면 됩니다.
'무례한 부탁인 줄 아오나 가르침 기다리고 있겠습니다.




'2016버전이상에서 실행하세요.
'데이터>웹 메뉴의 매크로입니다.
'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 매크로1()
'
' 매크로1 매크로
'

'

    '웹쿼리
    쿼리명 = "타자 순위" & Sheets.Count
    
    ActiveWorkbook.Queries.Add Name:=쿼리명, Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    원본 = Web.Page(Web.Contents(""http://sports.news.naver.com/kbaseball/record/index.nhn?category=kbo&year=2017&type=batter&playerOrder=hra""))," & Chr(13) & "" & Chr(10) & "    Data4 = 원본{4}[Data]," & Chr(13) & "" & Chr(10) & "    #""변경된 유형"" = Table.TransformColumnTypes(Data4,{{""순위"", Int64.Type}, {""선수"", type text}, {""타율"", type number}, {""경기수"", Int64.Type}, {""타수"", Int64.Type}, {""안타"", Int64.Type}, {""2루타" & _
        """, Int64.Type}, {""3루타"", Int64.Type}, {""홈런"", Int64.Type}, {""타점"", Int64.Type}, {""득점"", Int64.Type}, {""도루"", Int64.Type}, {""볼넷"", Int64.Type}, {""삼진"", Int64.Type}, {""출루율"", type number}, {""장타율"", type number}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""변경된 유형"""
        
    '시트추가
    ActiveWorkbook.Worksheets.Add
    
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""" & 쿼리명 & """" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [" & 쿼리명 & "]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "타자_순위" & Sheets.Count
        .Refresh BackgroundQuery:=False
    End With
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
End Sub


 

웹쿼리-네이버에서 프로야구 선수의 기록순위-땡큐엑셀vba.xlsm
0.06MB

 

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=279834709
'특정문자 갯수 구하기
'
'source by 땡큐엑셀vba & 엑셀매크로
'
'사용자정의함수
'rng1 : 검색범위
'rng2 : 검색어
Function 검색어카운트(rng1 As Range, rng2 As Range)
    
    카운트 = 0
    검색어 = rng2
    
    '루프
    For Each c In rng1
        'inStr내장함수를 사용하여 찾는값이 있는지 확인
        If InStr(1, c, 검색어) > 0 Then
            '찾는값이 있는경우 카운트증가
            카운트 = 카운트 + 1
        End If
    Next
    
    검색어카운트 = 카운트


End Function

검색단어갯수구하기-사용자정의함수-땡큐엑셀vba.xlsm
0.04MB

 

 

실행전

 

결과

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=281248947
'
'왼쪽 데이터 표를 기준으로 하여 오른쪽 표의 노란색 셀이 순번을 입력할경우 이름과 사진이 검색되서 나오도록 하고싶습니다.
'이름의 경우 vlookup 함수를 통해서 만들었는데 사진부분은 자동 업데이트 되는 방법을 모르겠습니다.
'연결하여 그림붙여넣기의 수식란에서는 함수사용이 불가능 한것 같습니다.
'혹시 방법 아시는분 있으시면 답변 부탁드립니다.


'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 사진붙여넣기()

    Dim 검색범위 As Range
    Dim rng As Range
    Dim 찾을값 As Range
    
    '화면갱신 잠시 중지
    Application.ScreenUpdating = False
    
    Set 검색범위 = Range("A:A")


    'G3셀 이미지삭제
    Call 셀이미지삭제
    
    
    
    '찾을값
    Set 찾을값 = Range("E3")

        
     '1.검색범위에서 동일한값 찾기
     Set rng = 검색범위.Find(What:=찾을값, LookAt:=xlWhole, LookIn:=xlValues)


     If Not rng Is Nothing Then '검색결과가 있다면
        
        '찾은값의 사진셀 복사
        rng.Offset(0, 2).Copy
        
        'G3셀
        찾을값.Offset(0, 2).Select
        
        '붙여넣기
        ActiveSheet.Paste
        
        '복사모드 해제
        Application.CutCopyMode = False
     End If
    
    
    '화면 갱신 재계
    Application.ScreenUpdating = True
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
End Sub


'G3셀의 이미지삭제
Sub 셀이미지삭제()

    '도형중에서 G3셀 안에 있는 도형만 삭제하기
    For Each sh In ActiveSheet.Shapes
    
        'G3셀의 좌표
        cx1 = Range("G3").Left
        cy1 = Range("G3").Top
        cx2 = cx1 + Range("G3").Width
        cy2 = cy1 + Range("G3").Height
        
        
        '도형의 좌표
        y1 = sh.Top
        x1 = sh.Left
        y2 = sh.Top + sh.Height
        x2 = sh.Left + sh.Width
        
        
        'G3셀의 범위안에 있으면 삭제
        If x1 >= cx1 And y1 >= cy1 And x2 <= cx2 And y2 <= cy2 Then
            sh.Delete
        End If
    
    Next

End Sub

 

같은값찾아 이미지붙여넣기-Find_Copy_Paste_Shapes-땡큐엑셀vba.xlsm
0.05MB

 

 

 

이미지 파일로 저장

 

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

'안녕하세요
'a1:ai42 범위를 ctrl + c (복사) 하여
'c:\abcd\ 폴더 안에 "배정표_170722.png" 파일로 저장하고 싶습니다.
'파일명의 170722의 날짜는 저장하는 당일의 날짜로 저장되면 됩니다.
'그리고 저장 후에는 msg박스 "c:\abcd\배정표_170722.png 저장완료" 라고 뜨면 됩니다.
'답변 부탁드립니다 ~~


'
' source by 땡큐엑셀vba & 엑셀매크로
' 범위를 png로 저장하기
'
Sub save2png()
    Dim strPath As String                        '파일 경로를 넣을 변수
    Dim cht As ChartObject                     '차트개체를 넣을 변수
    
    Application.ScreenUpdating = False    '화면 업데이트 (일시)중단

 
    '저장경로
    strPath = "c:\temp\"
    
    'A1:AI42선택
    Range("A1:AI42").Select
    
    '그림으로 복사해서 clipboard에 넣음
    Selection.CopyPicture
    
    
    '새로운 차트개체를 범위크기로 생성
    Set cht = ActiveSheet.ChartObjects.Add(0, 0, Selection.Width, Selection.Height)
    cht.Select
        
    '차트에 붙여 넣음
    cht.Chart.Paste
    
    '파일명
    Filename = strPath & "배정표_" & Format(Now, "YYYYMMDD") & ".png"
    
    '그림으로 저장
    cht.Chart.Export Filename
    '삽입했던 차트개체를 삭제
    cht.Delete

    '개체변수 초기화
    Set cht = Nothing


    Application.ScreenUpdating = True    '화면 업데이트 재계
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
    
End Sub

 

특정 범위를 png로 저장하기-ChartObjects.add_Chart.Export_Selection.CopyPicture-땡큐엑셀vba.xlsm
0.05MB