땡큐엑셀vba & 엑셀매크로

 

 

사용자 정의함수(땡큐점수로)를 사용하여 점수로 변환

 

 

[module]

'Module소스
'
'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=277604236

'백분율에 해당하는 점수로 변환하는 사용자 정의 함수
'예를 들어 12%이면 10점
'          10%이면 10점
'           7%이면 8점
'         0.02%이면 3점


'
'source by 땡큐엑셀vba & 엑셀매크로
'
'case A to B를 사용하면 쉽게 점수로 변환할수 있습니다.

Function 땡큐점수로(rng As Range)

    'select case문을 사용하여 해당범위의 점수로 변환
    'case A To B  : A부터 B사이일 경우
    Select Case rng
        Case 0.00001 To 0.0000999 '0.001%이상 ~ 0.01%미만
            땡큐점수로 = 2
            
        Case 0.0001 To 0.0004999 '0.01%이상 ~ 0.05%미만
            땡큐점수로 = 3
            
        Case 0.0005 To 0.0019999 '0.05%이상 ~ 0.02%미만
            땡큐점수로 = 4
            
        Case 0.002 To 0.0099999  '0.02%이상 ~ 1%미만
            땡큐점수로 = 5
            
        Case 0.01 To 0.0199999 '1%이상 ~ 2%미만
            땡큐점수로 = 6
            
        Case 0.02 To 0.0499999 '2%이상 ~ 5%미만
            땡큐점수로 = 7
             
        Case 0.05 To 0.0999999 '5%이상 ~ 10%미만
            땡큐점수로 = 8
            
        Case 0.1 To 100  '10%이상
            땡큐점수로 = 10
    
        Case Else '기타
            땡큐점수로 = 1
    End Select
    

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


End Function

 

 

점수로변환-사용자정의함수-땡큐엑셀vba.xlsm
0.08MB

사용자 정의 함수를 이용하여 글자수 세기

 

 

 

module1에 사용자 정의함수 작성

 

'http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102020101&docId=278816827&qb=VkJB&enc=utf8&section=kin.qna.all&rank=28&search_sort=8&spq=0
'엑셀 vba 사용자 정의 함수로 글자수를 파악하고자 합니다.
'(공백 포함, 공백 비포함으로 구분)
'
'텍스트 파일을 열지 않고 정보만 가져오면 됩니다 .
'
'A1셀에
'파일 전체 경로가 입력되어 있고
'
'A2셀에
'=wordcount(a1) 이라고 입력하면 글자수가 나오면 됩니다



'
'source by 땡큐엑셀vba & 엑셀매크로
'
'공백포함 글자수
Function wordCount(strFile)
  On Error GoTo errorMessage
  
  Dim s As String, s2 As String, fileHandle As Integer

  fileHandle = FreeFile ' 사용 가능한 파일 핸들 번호 구하기
  Open strFile For Input As fileHandle ' 파일오픈

  '파일의 끝까지 읽기
  Do While Not EOF(fileHandle) ' 파일의 끝까지 반복
    Line Input #fileHandle, s  ' 읽은 1줄을 변수 s 에 대입
    fulltxt = fulltxt & s      ' 결과를 저장할 변수에 차곡차곡 추가
  Loop

  wordCount = Len(fulltxt)


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

quitSub:
  Close fileHandle '파일닫기
  Exit Function


errorMessage:
  ' 에러 메시지 대화상자 출력
  MsgBox Err.Description, vbOKOnly + vbCritical, "에러 코드: " & Err.Number
  Resume quitSub

End Function



'A2셀에
'=wcNotSpace(a1) 이라고 입력하면 글자수가 나오면 됩니다
'공백제외 글자수
Function wcNotSpace(strFile)
  On Error GoTo errorMessage
  
  Dim s As String, s2 As String, fileHandle As Integer

  fileHandle = FreeFile ' 사용 가능한 파일 핸들 번호 구하기
  Open strFile For Input As fileHandle ' 파일오픈

  '파일의 끝까지 읽기
  Do While Not EOF(fileHandle) ' 파일의 끝까지 반복
    Line Input #fileHandle, s  ' 읽은 1줄을 변수 s 에 대입
    fulltxt = fulltxt & s      ' 결과를 저장할 변수에 차곡차곡 추가
  Loop

  '공백을 널로 변환
  fulltxt = Replace(fulltxt, " ", "")
  wcNotSpace = Len(fulltxt)


  MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
  
quitSub:
  Close fileHandle '파일닫기
  Exit Function


errorMessage:
  ' 에러 메시지 대화상자 출력
  MsgBox Err.Description, vbOKOnly + vbCritical, "에러 코드: " & Err.Number
  Resume quitSub



End Function

 

 

글자수세기-땡큐엑셀vba.xlsm
0.02MB

 

 

 

 

 

 

 

 

'CurrentRegion,Interior.Color,Find,FindNext
'찾기


'Sheet1의 코드번호와 일치하는 값을 Sheet2에서 찾고 해당 바탕색으로 칠하기

'
'source by 땡큐엑셀vba & 엑셀매크로
'
Sub 같은값찾아바탕색칠하기()
    Dim 범위 As Range
    Dim Rng As Range
    
    
    
    
    마지막행 = Cells(Rows.Count, "A").End(xlUp).Row
    Set 범위 = Sheets("Sheet2").Range("A1").CurrentRegion
    
    '2행부터 마지막행까지 루프
    For i = 2 To 마지막행
        찾을값 = Cells(i, "A")
        바탕색 = Cells(i, "B").Interior.Color
        
        
         '1.검색
         Set Rng = 범위.Find(what:=찾을값, lookat:=xlWhole)
    
        
         If Not Rng Is Nothing Then '검색결과가 있다면
            strAddr = Rng.Address  '첫 위치 주소
            
            '2.검색결과가 없을때 까지 루프
            Do
                '찾은셀에 바탕색칠하기
                Rng.Interior.Color = 바탕색
                
                Set Rng = 범위.FindNext(Rng) '다음값으로
            Loop While Not Rng Is Nothing And Rng.Address <> strAddr
         End If

    Next i
    

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

End Sub

 

 

같은값찾아 바탕색찰하기-CurrentRegion,Interior.Color,Find,FindNext-땡큐엑셀vba.xlsm
0.05MB

 

 

 

 

 

'선택영역의 합구하기
'다음 매크로를 작성하시오.
'워크시트에서 셀영역을 선택하고 매크로를 수행시키면 행 방향으로의 합과 열 방향으로의 합.
'그리고 전체 선택된 영영의 합을 구해서 아래 지정된 위치에 표시하는 매크로를 작성하시오.
'행과 열의 합을 구하기 우해 For문을 사용하시오
'(힌트) selection된 Range의 행의 개수와 열의 개수는 각각
'Selection.Rows.count, Selection.Columns.count이다.
'Range내의 특정 셀을 접근하기 위해서는 Cells(i,j)속성을 사용한다.


'
'Source by 땡큐엑셀vba & 엑셀매크로
'
Sub 합구하기()

    행수 = Selection.Rows.Count
    열수 = Selection.Columns.Count
    
    '행별 합계
    'For문을 돌면서
    '(1,1),(1,2),(1,3)
    '(2,1),(2,2),(2,3)
    '(3,1),(3,2),(3,3)
    '행별 합계를 구한다.
    For i = 1 To 행수
        행별합 = 0
        For j = 1 To 열수
            행별합 = 행별합 + Selection.Cells(i, j)
        Next j
        Selection.Cells(i, j) = 행별합
        행들의합 = 행들의합 + 행별합
    Next i
    
    
    '열별 합계
    'For문을 돌면서
    '(1,1),(2,1),(3,1)
    '(1,2),(2,2),(2,3)
    '(1,3),(2,3),(3,3)
    '열별 합계를 구한다.
    For j = 1 To 열수
        열별합 = 0
        For i = 1 To 행수
            열별합 = 열별합 + Selection.Cells(i, j)
        Next i
        Selection.Cells(i, j) = 열별합
    Next j

    
    '전체 합계
    '전체합계는 offset메서드를 사용해서 +1행,+1열에 출력한다.
    Selection.Cells(행수, 열수).Offset(1, 1) = 행들의합
    
    MsgBox "완료되었습니다.", vbInformation, "땡큐엑셀vba & 엑셀매크로"

End Sub

 

 

선택영역에서 행의합 열의합-땡큐엑셀vba.xlsm
0.02MB

 

 

 

 

 

 

 

 

'다음 매크로를 작성하시오.
'워크시트에 셀영역을 설정하고 매크로를 수행시킨다
'InputBox를 이용하여 숫자를 입력받는다.
'선택된 영역의 숫자가 입력받은 숫자보다 크면 셀색깔을 빨간색으로,작으면 파란색으로, 같으면 노란색으로 칠한다.
'(힌트) 셀 색깔은 Selection.Cells(i,j).Interiror.Color로 설정하고
'빨간색은 vbRed,파란색은 vbBlue, 노란색은 vbYellow이다.


'
'Source by 땡큐엑셀vba & 엑셀매크로
'
Sub 셀영역색칠하기()

    MsgBox "선택범위에서 입력값보다 작으면 파란색 크면 빨간색으로 칠하기", vbInformation, "땡큐엑셀vba & 엑셀매크로"

    '선택범위의 행,열수
    행수 = Selection.Rows.Count
    열수 = Selection.Columns.Count
    

    '입력값을 long형으로 변환
    입력값 = CLng(InputBox("숫자를 입력하세요", "숫자입력"))
    
    
    '선택범위 루프
    For i = 1 To 행수
        For j = 1 To 열수
            셀값 = Selection.Cells(i, j)
            
            If 셀값 > 입력값 Then
                Selection.Cells(i, j).Interior.Color = vbRed '셀값 > 입력값
            ElseIf 셀값 < 입력값 Then
                Selection.Cells(i, j).Interior.Color = vbBlue '셀값 < 입력값
            Else
                Selection.Cells(i, j).Interior.Color = vbYellow '셀값 = 입력값
            End If
            

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

End Sub

 

선택영역에서 큰값 같은값 작은값에 따른 색칠-땡큐엑셀vba.xlsm
0.02MB

 

 

 

 

 

 

 

 

' Source by 땡큐엑셀vba & 엑셀매크로
' 바탕색이 같은 셀 추출
'
Sub 같은바탕색추출()

    Dim 범위 As Range
    Dim 바탕색 As Range
    Dim k As Integer
    

    
    'G2부터 맨끝까지 Clear
    Range("G2:G" & Rows.Count).Clear
    
    
    '범위입력
    Set 범위 = Application.InputBox("범위를 지정하세요", "범위지정", , , , , , 8)
    '바탕색 입력
    Set 바탕색 = Application.InputBox("추출할 바탕색셀을 지정하세요", "바탕색", , , , , , 8)
    
    '화면갱신 중지
    Application.ScreenUpdating = False
    
    '범위의 셀 하나하나씩 꺼내어
    '바탕색이 같은지 비교하여
    '아래에 복사
    For Each R In 범위
    
        If R.Interior.Color = 바탕색.Interior.Color Then
            k = k + 1
            
            '지정한 바탕색셀(기준) 밑으로 출력
            R.Copy Destination:=바탕색.Offset(k, 0)
        End If
        
    Next
    
    '화면갱신 재개
    Application.ScreenUpdating = True


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

바탕색이 같은 셀값 추출하기-땡큐엑셀vba.xlsm
0.10MB

 

 

 

 

 

 

 

 

 

 

'이미지에서 주황색 셀의 더하기 수식 좀 알려주세요. 칸은 계속해서 추가될거라 수식이 필요합니다.
'또하나 저 이미지로 예를 들면 주황색 셀이 a13 , a18, a26 이라고 가정했을때 이 경우의 수식도 가능한가요?
'답변 부탁드리겠습니다.


'작성자: 땡큐엑셀vba & 엑셀매크로
'Module
'사용자 정의함수
'같은바탕색의 합계
'Rng : 범위
'C : 바탕색
Function colorSUM(Rng As Range, C As Range)
    
    '현행화
    Application.Volatile True
    
    Dim R As Range, X As Range, A As Range
    

    '범위의 셀을 하나 하나씩 꺼내어 루프
    For Each R In Rng
        '바탕색이 같은것만 더하기
        If R.Interior.ColorIndex = C.Interior.ColorIndex Then
            colorSUM = colorSUM + R
        End If
    Next
    
    
     MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"
        
End Function

 

같은바탕색의 합계구하기-colorSum-사용자정의함수-땡큐엑셀vba.xlsm
0.15MB

 

 

 

'
' Source by 땡큐엑셀vba & 엑셀매크로
'
' 시트이름 나열하기

Sub 시트리스트업()


    ' sheets.count를 통해 시트 갯수만큼 루프를 수행
    '
    i = 1
    For i = 1 To Sheets.Count
        Cells(i, "A") = Sheets(i).Name
    Next


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

End Sub

 

시트이름나열-sheets_counts-땡큐엑셀vba.xlsm
0.13MB

 

 

 

 

'작성자: 땡큐엑셀vba & 엑셀매크로

'
'엑셀 VBA Select case를 사용해서 분류를 하고싶습니다.
'아래 내용처럼 적요란(F열) 에 "불량" 이라는 글씨가 먼저있을경우 창고 분류(G열)란에? "불량창고"
'정상 글씨가 먼저있을경우 창고분류 "정상창고"
'반품 이라는 글씨가 먼저있을경우 "반품창고"
'그리고 품목명이 1A 와 적요에 불량이 먼저있을경우 창고분류에 "재확인"
'품목명에 3C와 적요에 정상이 있을경우 "일반반품"
'Select case를 사용해서 해당 조건을 할수있을까요?

'
' Source by 땡큐엑셀vba & 엑셀매크로
'
' instr내장함수를 사용하여 품목과 적요의 단어를 분석하여 해당 조건을 만족하는지 체크하여 결과출력
Sub Main()

    '마지막행
    iLastRow = Range("A" & Cells.Rows.Count).End(xlUp).Row
    
    
    '창고분류 Clear
    If iLastRow > 1 Then Range("G2:G" & iLastRow).ClearContents
    
    
    '루프
    For i = 2 To iLastRow
    
        str품목명 = Cells(i, "D")
        str적요 = Cells(i, "F")
        str분류 = ""

        'instr내장함수를 이용하여 해당 단어가 들어 있는지 체크
        If InStr(1, str적요, "불량") > 0 Then str분류 = "불량창고"
        If InStr(1, str적요, "정상") > 0 Then str분류 = "정상창고"
        If InStr(1, str적요, "반품") > 0 Then str분류 = "반품창고"
        
        'instr내장함수를 이용하여 두가지 조건을 만족하는지 체크
        If InStr(1, str품목명, "1A") > 0 And InStr(1, str적요, "불량") > 0 Then str분류 = "재확인"
        If InStr(1, str품목명, "3C") > 0 And InStr(1, str적요, "정상") > 0 Then str분류 = "일반반품"
    
        Cells(i, "G") = str분류
    Next
    
    
    MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"

End Sub

 

 

창고분류-if_instr-땡큐엑셀vba.xlsm
0.18MB

 

 

 

 

'다음 표에서 K1에 테이블 안에 있는 알파벳을 적어 넣으면 알파벳에 해당되는 시간표를 만들고 싶은데요
'예를 들어 a를 적으면 a에 해당되는 시간과 과일이름이 나오게 하고 싶어요
'함수를 아무리 찾아봐도 해당하는 함수를 못찾겠어요 적용 가능한 함수 좀 꼭 알려주세요 ^^



'
'작성자: 땡큐엑셀vba & 엑셀매크로
'
Sub 같은값찾기()
    Dim 범위 As Range
    Dim Rng As Range
    
    
    '선택범위
    Set 범위 = Selection
    
    If 범위.Count = 1 Then
        MsgBox "범위를 선택하세요"
        Exit Sub
    End If
    
        
    
    '출력영역 클리어
    Range("K2:L9").ClearContents
    

    찾을값 = Range("K1")
    
    
    '증가값
    i = 1
    
     '1.검색
     Set Rng = 범위.Find(what:=찾을값, lookat:=xlWhole)

    
     If Not Rng Is Nothing Then '검색결과가 있다면
        strAddr = Rng.Address  '첫 위치 주소
        
        '2.검색결과가 없을때 까지 루프
        Do
            i = i + 1
            Range("K" & i) = Range("A" & Rng.Row)
            Range("L" & i) = Cells(1, Rng.Column)
            
            Set Rng = 범위.FindNext(Rng) '다음값으로
        Loop While Not Rng Is Nothing And Rng.Address <> strAddr
     End If
        
     MsgBox "완료되었습니다", vbInformation, "땡큐엑셀vba & 엑셀매크로"

End Sub

 

 

알파벳에해당하는시간표찾기-땡큐엑셀vba.xlsm
0.35MB