VB(A)

[ADO] 최대값 구하기

당근쨈 2016. 11. 16. 11:05

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


F3에서 제품명을 변경하면 그에 맞는 제품원가의 최대값을 불러오는 ADO.

SQL을 공부하고 엑셀에 접목시켜보았다.

역시 책으로만 보는 것과 직접 짜보는 것은 차이가 있네.



Option Explicit
Sub Macro()
 
    Dim 연결 As New ADODB.Connection
    Dim OLEDB_Connect As String
    Dim FilePath As String
    Dim rS As New ADODB.Recordset
    Dim sql As String
    
    '파일 버전을 확인하여 OLEDB를 사용할 버전을 정합니다.
    FilePath = ThisWorkbook.FullName
    
    Select Case Application.Version
        Case Is <= 11
            OLEDB_Connect = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "Data Source='" & FilePath & "';" & _
            "Extended Properties =""Excel 8.0 xml; HDR = YES"";"
            
        Case Is >= 12
            OLEDB_Connect = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "Data Source='" & FilePath & "';" & _
            "Extended Properties =""Excel 12.0 xml; HDR = YES"";"
            
        Case Else
            MsgBox "엑셀 버전을 확인할 수 없습니다"
    End Select
    
    'SQL을 지정합니다.
    sql = "select max(제품원가)"    '제품원가 중 최대값을 가져옵니다.
    sql = sql & " from [22$B6:H" & Cells(Rows.Count, "H").End(3).Row - 1 & "]"  '테이블의 범위를 지정합니다.
    sql = sql & " where 제품='" & Range("F3"& "'" '어떤 제품의 제품원가 최대값을 가져올 건지 정합니다.
    
    'ADO 및 레코드셋에 연결
    연결.Open OLEDB_Connect
    rS.Open sql, 연결, 331
    
    'F4셀에 최대값을 출력합니다.
    Range("F4"= rS.Fields.Item(0)
 
    '변수 초기화
    rS.Close
    연결.Close
    
    Set rS = Nothing
    Set 연결 = Nothing
    
End Sub
 
cs

품목별단가표_연습.xlsm