VB(A)

[ADO] 매장별 담당자 현황 출력

당근쨈 2016. 11. 16. 20:29

http://cafe.naver.com/excelmaster/132560


담당자별로 담당 중인 매장수를 출력해주는 SQL

기본서에 나오는 내용임에도 응용이 아직 안 된다.

기초를 더 다지고 응용도 열심히 해봐야지




Option Explicit
 
Sub Macro()
 
    Dim ADO_Connect As New ADODB.Connection
    Dim ADO_Record As New ADODB.Recordset
    Dim sql As String
    Dim ExcelVersion As Integer
    Dim OLEDB_Connect As String
    
    '파일 버전을 확인하여 OLEDB를 사용할 버전을 정합니다.
    'ADO에 기본으로 들어가는 내용입니다.
    Select Case Application.Version
        Case Is <= 11: ExcelVersion = 8
        Case Is >= 12: ExcelVersion = 12
        Case Else
            MsgBox "엑셀 버전을 확인해주세요"
            Exit Sub
    End Select
    
    OLEDB_Connect = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "Data Source='" & ThisWorkbook.FullName & "';" & _
            "Extended Properties =""Excel " & ExcelVersion & ".0 xml; HDR = YES"";"
            
    '기존자료 삭제
    Range("D1").CurrentRegion.Offset(1).ClearContents
    
    'SQL을 지정합니다.
    sql = "select 담당, count(*) from "   '해당 시트의 담당자명과 담당자가 맡고 있는 매장수를 가져옵니다.
    sql = sql & "(select distinct 매장명, 담당 " '매장명과 담당자의 중복된 내용을 제거합니다.
    sql = sql & "from [Sheet1$" & Range("A1").CurrentRegion.Address(00& "]) " '데이터 범위를 지정합니다.
    sql = sql & "group by 담당" '담당자별로 그룹을 지어줍니다.
    
    'ADO 및 레코드셋에 ADO_Connect
    ADO_Connect.Open OLEDB_Connect
    ADO_Record.Open sql, ADO_Connect, 331
    
    'A9셀에 검색 결과를 출력합니다. 검색결과가 없으면 공란을 출력합니다.
    Range("D2").CopyFromRecordset ADO_Record
 
    '변수 초기화
    ADO_Record.Close
    ADO_Connect.Close
    
    Set ADO_Record = Nothing
    Set ADO_Connect = Nothing
    
End Sub
 
 
cs


Book1.xlsm