- 질문 게시판입니다.
Date | 18/09/17 20:27:58 |
Name | [익명] |
File #1 | excel.png (24.5 KB), Download : 7 |
Subject | 엑셀 고수님들 질문드립니다. |
하나의 파일을 열 때 마다 범위 A1:Z999사이에 데이터가 무작위로 생성됩니다. 제가 추출하고싶은 데이터는 'A+숫자 8자리'입니다. 추출한 데이터를 넣을 열은 AA1열이구요. 예시로 올린 파일에서 보면 A8셀과 C7셀을 추출하고 싶은 겁니다. 혹시 이렇게 할 수 있는 방법이 있을까요? 설명이 부족한 부분이 있으면 댓글로 얘기해주시면 바로 보충하겠습니다. 답변에 미리 감사드립니다. 0
|
다음과 같은 VBA 코드를 생각해볼 수 있겠습니다.
1. 엑셀 창에서 작업할 문서를 띄워둔 채 Alt+F11을 눌러 VBA 창을 엽니다.
2. VBA 창의 [Sheet1](작업해야 할 내용이 담긴 시트)를 더블클릭해서 열고, 다음 VBA 코드를 복사하여 그대로 붙여넣습니다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Sub extraction()
Dim allCells As... 더 보기
1. 엑셀 창에서 작업할 문서를 띄워둔 채 Alt+F11을 눌러 VBA 창을 엽니다.
2. VBA 창의 [Sheet1](작업해야 할 내용이 담긴 시트)를 더블클릭해서 열고, 다음 VBA 코드를 복사하여 그대로 붙여넣습니다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Sub extraction()
Dim allCells As... 더 보기
다음과 같은 VBA 코드를 생각해볼 수 있겠습니다.
1. 엑셀 창에서 작업할 문서를 띄워둔 채 Alt+F11을 눌러 VBA 창을 엽니다.
2. VBA 창의 [Sheet1](작업해야 할 내용이 담긴 시트)를 더블클릭해서 열고, 다음 VBA 코드를 복사하여 그대로 붙여넣습니다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Sub extraction()
Dim allCells As Range: Set allCells = Range("A1:Z999")
Dim writePos As Range: Set writePos = Range("AA1")
Dim pattern As String: pattern = "[A]########"
Dim myCol As New Collection
Dim item As Variant
For Each item In allCells
If IsEmpty(item) = False And item.Value Like pattern Then
myCol.Add (item.Value)
End If
Next
writePos.Select
For Each item In myCol
ActiveCell.Value = item
ActiveCell.Offset(1, 0).Select
Next
End Sub
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
3. F5 키를 눌러 VBA 코드를 실행시킵니다. 만일 [매크로]라는 창이 뜨면, 옆에 있는 [실행] 버튼을 눌러줍니다.
4. 실행된 결과물을 확인합니다.
참고로 이 VBA 코드는 여러 번 실행할 경우, 이전 실행시에 기록했던 AA1 셀부터의 결과값을 처음부터 덮어씁니다. 그리고 VBA 매크로가 있는 엑셀 파일은 저장할 때 .xlsx 확장자가 아니라 .xlsm이라는 확장자로 저장해야만 합니다.
1. 엑셀 창에서 작업할 문서를 띄워둔 채 Alt+F11을 눌러 VBA 창을 엽니다.
2. VBA 창의 [Sheet1](작업해야 할 내용이 담긴 시트)를 더블클릭해서 열고, 다음 VBA 코드를 복사하여 그대로 붙여넣습니다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Sub extraction()
Dim allCells As Range: Set allCells = Range("A1:Z999")
Dim writePos As Range: Set writePos = Range("AA1")
Dim pattern As String: pattern = "[A]########"
Dim myCol As New Collection
Dim item As Variant
For Each item In allCells
If IsEmpty(item) = False And item.Value Like pattern Then
myCol.Add (item.Value)
End If
Next
writePos.Select
For Each item In myCol
ActiveCell.Value = item
ActiveCell.Offset(1, 0).Select
Next
End Sub
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
3. F5 키를 눌러 VBA 코드를 실행시킵니다. 만일 [매크로]라는 창이 뜨면, 옆에 있는 [실행] 버튼을 눌러줍니다.
4. 실행된 결과물을 확인합니다.
참고로 이 VBA 코드는 여러 번 실행할 경우, 이전 실행시에 기록했던 AA1 셀부터의 결과값을 처음부터 덮어씁니다. 그리고 VBA 매크로가 있는 엑셀 파일은 저장할 때 .xlsx 확장자가 아니라 .xlsm이라는 확장자로 저장해야만 합니다.
https://redtea.kr/pb/pb.php?id=free&no=8267
여기에 첨부파일로 달았습니다. 시트를 따로 하나 만들어서 앞선 테이블을 순차적으로 검토하는 형태입니다.
가장 우측 열의 값이 "1"인 값이 원하는 추출값입니다. 필터로 조정하면 될 것 같습니다.
단, 이거는 예제를 위한 것이므로 가장 왼쪽에 INDEX 조건이 좀 바뀌어야 합니다.
여기에 첨부파일로 달았습니다. 시트를 따로 하나 만들어서 앞선 테이블을 순차적으로 검토하는 형태입니다.
가장 우측 열의 값이 "1"인 값이 원하는 추출값입니다. 필터로 조정하면 될 것 같습니다.
단, 이거는 예제를 위한 것이므로 가장 왼쪽에 INDEX 조건이 좀 바뀌어야 합니다.
최신 정보 하나를 알았습니다. MS 엑셀 개발진이 현재 개발중인 기능들에 대해 소개하는 글을 블로그에 올렸는데, 이 중 [동적 배열](Dynamic Arrays) 기능이 정말 대단합니다. 이걸 쓰면 위 질문에서 하고자 하는 작업이 상당히 간편해질 것으로 보입니다.
https://gigglehd.com/gg/soft/3597104
https://gigglehd.com/gg/soft/3597104
목록 |
|