부분적으로 일치하는 걸 가져오는 SQLVBA 코드이다.
strSQL = strSQL & "전화번호 LIKE '%" & S & "%' "
와 같이 SQL 에서 사용하는 wildcard 변수를 사용하면 된다.
만약 고급필더 버튼을 이용하여 데이터를 가져오고자 한다면
전화번호에 *3363 이라고 입력하면 해당되는 자료를 가져올 수 있다.
고급필터의 경우에는 반드시 A3열의 값이 비어 있으면 안된다. 아니면 IF조건문을 변경하던지 해야 하는 거 같다.
Sub ExcelFileData_Get()
'// 외부 엑셀파일을 가져올 수도 있고 다른 시트 내용을 가져올 수도 있음
'// The ADO 6.0 object library reference must be loaded.
Dim DBconn As ADODB.Connection '// 연결변수 선언
Dim RS As ADODB.Recordset
Dim strSQL As String '// SQL 문을 위한 변수
Dim sht1 As Worksheet '// 워크시트 변수
Dim RSCount As Integer '// 총 레코드(행)의 수 변수
Dim FieldCount As Integer '// 총 필드(열)의 수 변수
Dim i, j, sRow As Integer
Dim NoRecords As Boolean
Dim FilePath As String '// 파일 경로 변수
Dim FileName As String '// 가져올 엑셀 파일명 변수
Dim S, T As String
Set sht1 = Sheets("Main") '// 현재 작업중인 워크시트 명
Set DBconn = New ADODB.Connection
FilePath = ThisWorkbook.Path + "\" '// 현재 파일 경로
FileName = ActiveWorkbook.Name '// 같은 엑셀파일(현재 엑셀화면에 활성화된 파일)
S = sht1.Range("A3") '// 전화번호
T = sht1.Range("B3") '// 이름
strSQL = "SELECT * FROM [Data$] " '// 엑셀시트이면 뒤에 $ 를 붙인다. Data Sheet 가 존재해야 한다.
If S <> vbNullString Or T <> vbNullString Then strSQL = strSQL & "Where "
If S <> vbNullString Then strSQL = strSQL & "전화번호 LIKE '%" & S & "%' "
If S <> vbNullString And T <> vbNullString Then strSQL = strSQL & " and"
If T <> vbNullString Then strSQL = strSQL & " 이름 Like '%" & T & "%' " '// 텍스트 변수처리
With DBconn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & FilePath & FileName & ";" & _
"Extended Properties=Excel 12.0;"
.Open
End With
Set RS = DBconn.Execute(strSQL)
With ActiveWorkbook.ActiveSheet.Range("A5") '// A5열부터 데이터 출력
.CurrentRegion.Offset(1).ClearContents '// 현재 존재하는 값을 전부 삭제
sRow = Cells(Rows.Count, "A").End(3)(2).Row '// 첫번째 값을 뿌릴 행의 값
NoRecords = False
With RS
FieldCount = .Fields.Count '// 전체 필드(제목열)의 개수
For i = 0 To .Fields.Count - 1 '// 레코드셋 제목 전부 가져오기
sht1.Cells(5, 1).Offset(, i) = .Fields(i).Name
Next i
If Not (.BOF And .EOF) Then
NoRecords = False
.MoveFirst
While Not .EOF
.MoveNext
RSCount = RSCount + 1 '// 전체 레코드수 구하기
Wend '// 주어진 조건이 True인 동안은 일련의 문을 계속 실행
Else
NoRecords = True
MsgBox ("가져올 자료가 없음")
Exit Sub
End If
.MoveFirst '// 레코드의 처음으로 이동
While Not .EOF '// EOF 를 만나기 전까지 계속 반복하라
For i = sRow To sRow + RSCount - 1 Step 1 '// 총 행의 수만큼 반복
For j = 1 To FieldCount Step 1 '// 총 열의 수만큼 반복
sht1.Cells(i, j) = .Fields(j - 1) '// 셀에 값을 기록하라
Next j
.MoveNext '// 다음 레코드(행)으로 이동
Next i
Wend
End With
End With
RS.Close
DBconn.Close
Set RS = Nothing
Set DBconn = Nothing
MsgBox RSCount & "개 데이터 가져오기 완료"
End Sub
* 첨부파일은 위의 코드가 포함된 코드입니다. 필요한 분은 받아서 수정사용하세요
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 파일 이동 (0) | 2015.06.30 |
---|---|
[VBA] mkdir 폴더 생성 (3) | 2015.06.29 |
[VBA] 폴더에서 파일 리스트 가져오기 (0) | 2015.06.25 |
[VBA] 밑줄 글자 배열로 저장 (0) | 2015.06.21 |
[VBA] 찾고자 하는 파일의 경로명 알아내기 (0) | 2015.06.20 |