메뉴
해결 엑셀2013윈도우10

Range 범위 안에 함수를 넣을 수 없는 걸까요?

아
8월 30일 조회 1,732
업무에 필요해 주먹구구 식으로 매크로 기록으로 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

댓글 3

J
JsKim9219 8월 30일
Range("AE2:AE1995")

이렇게 작성된 것을
Dim i1, i2 As Long
i1 = 2
i2 = 함수(예: Vlookup...)
Range("AE" & i1 & ":AE" & i2)

이렇게 바꾸면 됩니다
아
아르픽 작성자 8월 30일
@JsKim9219 님 제 설명이 조금 부족했나 봅니다 ㅠㅠ "AE"<얘가 고정이 되면 안 되는 거라서요.

Target이라는 문자열이 필터의 맨 윗부분에 걸려있고, 이 문자열이 파일별로 AA~AE에 랜덤하게 있는 형태라 이걸 해결하고 싶습니다.
J
JsKim9219 채택된 답변 8월 30일
@아르픽 님 그러시면 아래 함수를..
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"))

이런 식으로 작성하면 됩니다. 잘 적용해보시길..

질문답변 게시판의 최근 글

스크랩 완료