programing

Excel VBA에서 워크북 이름이 아닌 워크시트 이름을 포함한 범위의 주소를 얻으려면 어떻게 해야 합니까?

newnotes 2023. 4. 20. 22:40
반응형

Excel VBA에서 워크북 이름이 아닌 워크시트 이름을 포함한 범위의 주소를 얻으려면 어떻게 해야 합니까?

들어 , 이 객체가 셀 "Range"를 .A1 called called called called called called라는 워크시트 Book1는 전화하는 있습니다.Address()참고 자료를 수 : will한 will 、 will 、 will will 、 will will 、 will will will will will will will will will 。$A$1라고도 불릴 수 있다는 걸 알고 있습니다.Address(External:=True)하려면 , 의 순서에 따릅니다.[Book1]Sheet1!$A$1.

제가 원하는 것은 책 이름이 아닌 시트 이름이 포함된 주소를 받는 것입니다.는 정말 않아요Address(External:=True)스트링 함수로 워크북 이름을 직접 지웁니다.할 수 ?Sheet1!$A$1

다음과 같이 워크시트 이름과 셀 참조를 연결하는 방법밖에 생각할 수 없습니다.

Dim cell As Range
Dim cellAddress As String
Set cell = ThisWorkbook.Worksheets(1).Cells(1, 1)
cellAddress = cell.Parent.Name & "!" & cell.Address(External:=False)

편집:

마지막 행을 다음과 같이 수정합니다.

cellAddress = "'" & cell.Parent.Name & "'!" & cell.Address(External:=False) 

시트 이름에 공백이나 다른 재미있는 문자가 있더라도 작동하도록 설정할 수 있습니다.

Split(cell.address(External:=True), "]")(1)

벤 말이 맞아요나도 이걸 어떻게 해야 할지 모르겠어.Ben이 권장하는 방법 또는 워크북 이름을 삭제하는 방법을 제안합니다.

Dim cell As Range
Dim address As String
Set cell = Worksheets(1).Cells.Range("A1")
address = cell.address(External:=True)
address = Right(address, Len(address) - InStr(1, address, "]"))

Address()워크시트 함수가 바로 이 기능을 합니다.★★★★★★★★★★★★★★★★★★★★★★★★★★★★에서는 이용할 수 없습니다Application.WorksheetFunction는 '나중에'를 을 생각해 냈습니다.Evaluate()★★★★★★ 。

이 솔루션을 통해 Excel은 시트 이름의 공백 및 기타 재미있는 문자를 다룰 수 있으며, 이는 이전 답변보다 더 좋은 이점입니다.

예:

Evaluate("ADDRESS(" & rng.Row & "," & rng.Column & ",1,1,""" & _
    rng.Worksheet.Name & """)")

시트 1!"을 반환합니다. ($A$1")Range된 named named named라는 rng시트 1 A1 입니다.

이 솔루션은 범위의 첫 번째 셀 주소만 반환하고 전체 범위의 주소("Sheet1!")는 반환하지 않습니다.A$1과 Sheet1!$A$1:$B$2")커스텀 기능으로 사용합니다.

Public Function AddressEx(rng As Range) As String

    Dim strTmp As String

    strTmp = Evaluate("ADDRESS(" & rng.Row & "," & _
        rng.Column & ",1,1,""" & rng.Worksheet.Name & """)")

    If (rng.Count > 1) Then

        strTmp = strTmp & ":" & rng.Cells(rng.Count) _
            .Address(RowAbsolute:=True, ColumnAbsolute:=True)

    End If

    AddressEx = strTmp

End Function

Address() 워크시트 함수의 전체 설명서는 Office 웹사이트 https://support.office.com/en-us/article/ADDRESS-function-D0C26C0D-3991-446B-8DE4-AB46431D4F89에서 구할 수 있습니다.

제가 만든 사용자 정의 함수에서 다음과 같은 작업이 수행되었습니다.셀 범위 참조와 워크시트 이름을 문자열로 연결한 다음 Evaluate 문에 사용했습니다(Evaluate on Sumpproduct를 사용).

예를 들어 다음과 같습니다.

Function SumRange(RangeName as range)   

Dim strCellRef, strSheetName, strRngName As String

strCellRef = RangeName.Address                 
strSheetName = RangeName.Worksheet.Name & "!" 
strRngName = strSheetName & strCellRef        

그런 다음 나머지 코드의 strRngName을 참조하십시오.

여러 영역이 있는 범위를 처리하는 코드를 작성해야 할 수 있습니다.이 경우 다음과 같은 작업이 수행됩니다.

Public Function GetAddressWithSheetname(Range As Range, Optional blnBuildAddressForNamedRangeValue As Boolean = False) As String

    Const Seperator As String = ","

    Dim WorksheetName As String
    Dim TheAddress As String
    Dim Areas As Areas
    Dim Area As Range

    WorksheetName = "'" & Range.Worksheet.Name & "'"

    For Each Area In Range.Areas
'           ='Sheet 1'!$H$8:$H$15,'Sheet 1'!$C$12:$J$12
        TheAddress = TheAddress & WorksheetName & "!" & Area.Address(External:=False) & Seperator

    Next Area

    GetAddressWithSheetname = Left(TheAddress, Len(TheAddress) - Len(Seperator))

    If blnBuildAddressForNamedRangeValue Then
        GetAddressWithSheetname = "=" & GetAddressWithSheetname
    End If

End Function
rngYourRange.Address(,,,TRUE)

외부 주소, 전체 주소 표시

이를 위한 최선의 방법은 다음 코드를 사용하는 것입니다.

Dim SelectedCell As String

'This message Box allows you to select any cell on any sheet and it will return it in the format of =worksheetname!$A$X" where X is any number.

SelectedCell = Application.InputBox("Select a Cell on ANY sheet in your workbook", "Bookmark", Type:=8).Address(External:=True)

SelectedCell = "=" & "'" & Right(SelectedCell, Len(SelectedCell) - Len("[" & ActiveWorkbook.Name & "]") - 1)

'Be sure to modify Sheet1.Cells(1,1) with the Sheet and cell you want to use as the destination. I'd recommend using the Sheets VBA name.

Sheet1.Cells(1, 1).Value = SelectedCell

구조

메시지 상자가 나타나면 원하는 셀을 클릭합니다.주소(외부:=" ('[Code Sheet.xlsb]설정')그런 다음 $A$1)을 변경하여 워크시트의 전체 이름([Code Sheet.xlsb])을 삭제합니다.

위의 예에서는 다음과 같은 길이의 "Len"을 사용합니다.

[ Code Sheet . xlsb ]설정'!$A$1을 Len of ([Code Sheet.xlsb]-1)로 감산합니다.'설정'을 남겨주세요!$A$1.

 SelectedCell = "=" & "'" & Right(SelectedCell, Len(SelectedCell) - Len("[" & ActiveWorkbook.Name & "]") - 1)

그런 다음 코드와 "="를 입력하여 공식(='Settings')으로 표시합니다.$A$1).

IOS의 Excel에만 있는지는 잘 모르겠지만, 아래 그림과 같이 "=" & " 이외의 방법으로 "="를 추가하면 에러 코드가 표시됩니다.

SelectedCell = "=" & "'" & Right....

여기서 필요한 것은 시트와 셀에 새 수식을 넣을 프로그램을 만드는 것입니다.

Sheet1.Cells(1, 1).Value = SelectedCell

새 워크북을 열면 위의 전체 코드가 그대로 작동합니다.

이 코드는 워크북의 이름 또는 메시지 상자에서 선택한 시트의 이름을 변경하면 나중에 버그가 발생하지 않기 때문에 특히 유용합니다.

오늘 전에 포럼에 참석하신 모든 분들께 감사드립니다. 저는 외부=라는 사실을 몰랐습니다.사실이야, 코딩이 훨씬 쉬워질 거야.이것이 언젠가 누군가를 도울 수 있기를 바랍니다.

워크시트 이름을 주소 = 셀로 반환하면 됩니다.워크시트그런 다음 이 주소 = 셀처럼 주소를 다시 연결할 수 있습니다.워크시트이름 & "! & 감방.어드레스

Dim rg As Range
Set rg = Range("A1:E10")
Dim i As Integer
For i = 1 To rg.Rows.Count

    For j = 1 To rg.Columns.Count
    rg.Cells(i, j).Value = rg.Cells(i, j).Address(False, False)

    Next
Next

혼란스러운 옛 나를 위한 범위

.Address(False, False, True)

TheSheet 포맷으로 주는 것 같아요!B4:K9

그렇지 않은 경우 기준..Str 함수 회피

아마 1밀리초도 걸리지 않을 것이고 이미 사용된 153개의 전자를 사용할 것이다.

약 0.3마이크로초

RaAdd=mid(RaAdd,instr(radd(""))) +1)

또는

약 1.7마이크로초

RaAdd= split(radd,"]")(1)

[2009-04-21 편집]

와 같이, 당신이 그 때만 효과가 있다.
특정범범범범(((( 。? 아아아아아!

[/편집]

파티에 조금 늦었다는 건 알지만, 혹시 구글 검색에서 다른 사람이 발견했을 경우를 대비해서 다음 사항을 시도해 보세요.

Dim cell as Range
Dim address as String
Set cell = Sheet1.Range("A1")
address = cell.Name

이렇게 하면 "=Sheet1!"과 같은 전체 주소가 반환됩니다.$A$1"

등호를 사용하지 않을 경우 Replace(바꾸기) 기능을 사용하여 등호를 제거할 수 있습니다.

address = Replace(address, "=", "")

언급URL : https://stackoverflow.com/questions/131121/how-do-i-get-a-ranges-address-including-the-worksheet-name-but-not-the-workboo

반응형