해결 엑셀2013윈도우10
Range 범위 안에 함수를 넣을 수 없는 걸까요?
업무에 필요해 주먹구구 식으로 매크로 기록으로 VBA를 공부 중인 직장인입니다..
제목처럼 Range 부분에 함수를 넣어서 진행을 할 수는 없을까 싶어 질문을 남겨봅니다.
상황은 특정 문자열을 찾아 필터를 걸고, 내림차순으로 정렬이 필요한 상황입니다.
하지만 해당 문자열이 불러오는 file마다 위치가 달라 공통적으로 사용할 수 있는 코드를 짜고 싶습니다.
하지만 필터를 걸고 내림차순을 하면 Range에서 범위가 딱 정해져버려 다른 file에는 적용이 안 되는 형태로 코드가 짜여지더라구요..
해결방법이 없을까요?
Cells.Find(What:="target", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate '특정 문자열"target" 찾기(해당 file에선 AE2에 위치, file 마다 다름)
Cells.FindNext(After:=ActiveCell).Activate
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Add Key:=Range _
("AE2:AE1995"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal '근데 여기서 범위 설정이 저 범위로 고정이 돼버림
With ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
제목처럼 Range 부분에 함수를 넣어서 진행을 할 수는 없을까 싶어 질문을 남겨봅니다.
상황은 특정 문자열을 찾아 필터를 걸고, 내림차순으로 정렬이 필요한 상황입니다.
하지만 해당 문자열이 불러오는 file마다 위치가 달라 공통적으로 사용할 수 있는 코드를 짜고 싶습니다.
하지만 필터를 걸고 내림차순을 하면 Range에서 범위가 딱 정해져버려 다른 file에는 적용이 안 되는 형태로 코드가 짜여지더라구요..
해결방법이 없을까요?
Cells.Find(What:="target", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate '특정 문자열"target" 찾기(해당 file에선 AE2에 위치, file 마다 다름)
Cells.FindNext(After:=ActiveCell).Activate
Selection.AutoFilter
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort.SortFields.Add Key:=Range _
("AE2:AE1995"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal '근데 여기서 범위 설정이 저 범위로 고정이 돼버림
With ActiveWorkbook.Worksheets("Sheet2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
T
진
눅
소
댓글 3
Range("AE2:AE1995")이렇게 작성된 것을
Dim i1, i2 As Long i1 = 2 i2 = 함수(예: Vlookup...) Range("AE" & i1 & ":AE" & i2)이렇게 바꾸면 됩니다
Target이라는 문자열이 필터의 맨 윗부분에 걸려있고, 이 문자열이 파일별로 AA~AE에 랜덤하게 있는 형태라 이걸 해결하고 싶습니다.
Option Explicit Function ConvertLetterToNumber(ByVal strSource As String) As String Dim i As Integer Dim strResult As String For i = 1 To Len(strSource) Select Case Asc(Mid(strSource, i, 1)) Case 65 To 90: strResult = strResult & Asc(Mid(strSource, i, 1)) - 64 Case Else strResult = strResult & Mid(strSource, i, 1) End Select Next ConvertLetterToNumber = strResult End Function함수는 아래 링크 참고하였습니다
https://stackoverflow.com/questions/38855045/converting-letters-to-numbers-in-vba
범위를 작성하실 땐,
Range(Cells(2,ConvertLetterToNumber("AE")),Cells(1995,ConvertLetterToNumber("AE"))
이런 식으로 작성하면 됩니다. 잘 적용해보시길..