MS 추가기능 및 앱 개발

[엑셀 추가기능 배포] 빈도수 빠르게 구하기(중복 카운트)

루아흐뉴마 2019. 6. 24. 00:41
반응형

 

추가기능 사용방법

 
  • VSTO를 통해 개발한 파워포인트 추가기능이다.
  • 거추장스러운 거 다 빼고 그냥 빈도만 세는 기능이다.
  • 매번 Countif 함수로 빈도수를 확인하기 번거로웠던 사람이라면 꽤 유용할 것이라 생각한다.

  • 설치 방법
  • 1) 첨부파일의 압축 파일을 압축 해제한다. (아무 곳이듯 상관 없음)
  • 2) setup.exe 파일을 (반드시)관리자 권한으로 실행한다. (마우스 오른쪽 클릭 -> 관리자 권한으로 실행)
  • 3) 다음, 설치를 클릭하면 설치가 완료된다.

  • 사용 방법
  • 1) 빈도수를 산출할 영역 지정
  • 2) 루아흐뉴마 추가기능 탭의 FastFrequency 단추 클릭
  • ※ 공백("")도 카운트한다. 빈도표에서 가볍게 삭제해주면 된다.
  • ※ 수치 데이터에 대한 구간별 빈도 산출은 하지 않는다.

  • 삭제하는 방법
  • 1) 시작 -> 제어판 -> 프로그램 및 기능
  • 2) 설치 날짜를 기준으로 내림차순 정렬
  • 3) 설치된 프로그램을 선택하여 제거

 

추가기능 실행 동영상

 


메인 코드(언어: VB)

 
Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click 
{
Dim box() As String = {} //배열변수 지정형식인듯, Variant 형식은 안됨. 마지막 = {}에서 배열 요소 초기화 
Dim cnt As Long 
Dim lastRow As Long 
Dim rngSel As excelApp.Range //선택영역 
Dim allRng As excelApp.Range 
Dim rngR As excelApp.Range //Box 순환용 
Dim myGlobal = Globals.ThisAddIn.Application 

Try
{
	rngSel = CType(myGlobal.Selection, excelApp.Range) //선택영역을 Range형식으로 입력받는 코드 
	//rngSel = CType(Globals.ThisAddIn.Application.Selection, excelApp.Range)

	cnt = 0 

	For Each rngR In rngSel //대상 영역의 모든 Value를 Box 배열에 할당 
		ReDim Preserve box(cnt) box(cnt) = rngR.Value 
		cnt = cnt + 1 
	Next rngR 

	myGlobal.Worksheets.Add(After:=myGlobal.Worksheets(myGlobal.Worksheets.Count)) //새로운 워크시트를 가장 끝에 삽입 
	cnt = 0 
	Dim i As Long 

	For i = LBound(box) To UBound(box) '배열을 처음부터 순환하면서 
		myGlobal.Worksheets(myGlobal.Worksheets.Count).cells(i + 1, "A") = box(LBound(box) + i) 
	Next 
    
	allRng = myGlobal.Worksheets(myGlobal.Worksheets.Count).Range("A:A") 
	allRng.RemoveDuplicates(Columns:=1, Header:=excelApp.XlYesNoGuess.xlNo) //대상 영역 중복제거 

	lastRow = myGlobal.Sheets(myGlobal.Worksheets.Count).Cells(myGlobal.Rows.Count, "A").End(excelApp.XlDirection.xlUp).row cnt = 0 

	For i = 1 To lastRow 
		For j = LBound(box) To UBound(box) //박스 순환하면서 중복내용은 카운트 up 
    		If CType(myGlobal.Worksheets(myGlobal.Worksheets.Count).Cells(i, "A").value, String) = box(j) Then 
	        	cnt = cnt + 1 
	        End If 
	    Next j myGlobal.Sheets(myGlobal.Worksheets.Count).Cells(i, "B") = cnt //카운트 된 숫자를 항목별로 뿌리기 
	    cnt = 0 
	Next i 
}

Catch ex As InvalidCastException //셀을 선택하지 않은 경우 오류 메시지 활성화 

{
	System.Windows.Forms.MessageBox.Show("셀이 아닌 개체를 선택했습니다." & Chr(10) & "1개 이상의 셀을 선택하세요.", "캐스팅오류", Windows.Forms.MessageBoxButtons.OK) 
}

Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.ToString()) 
{

}

End Try 

rngSel = Nothing 
rngR = Nothing 
allRng = Nothing

}
End Sub 

 

 

 

FastFrequency.zip
다운로드

 

 

 Copyright (2019) Ruahneuma. All Rights Reserved.

 

반응형