ฟังก์ชั่นการแปลงหมายเลขคอลัมน์เป็นตัวอักษร?


143

ใครบ้างมีฟังก์ชั่น Excel VBA ซึ่งสามารถส่งคืนตัวอักษรคอลัมน์จากตัวเลขได้หรือไม่?

ยกตัวอย่างเช่นการป้อน100CVควรกลับ


4
ตรวจสอบคำถามนี้: stackoverflow.com/questions/10106465/ …
ฟรานซิสดีน

@FrancisDean ที่ตรงกันข้ามของคำถามนี้ซึ่งกำลังมองหาที่อยู่จากหมายเลข
brettdj

2
@brettdj คำตอบที่เชื่อมโยงแสดงทั้งตัวอักษรต่อตัวอักษรและตัวอักษรต่อหมายเลข
ฟรานซิสดีน

2
จุดยุติธรรม @FrancisDean ผมมองชื่อคำถามในการเชื่อมโยงไปมากกว่าได้รับการยอมรับคำตอบ
brettdj

คำตอบ:


211

ฟังก์ชันนี้ส่งคืนตัวอักษรคอลัมน์สำหรับหมายเลขคอลัมน์ที่กำหนด

Function Col_Letter(lngCol As Long) As String
    Dim vArr
    vArr = Split(Cells(1, lngCol).Address(True, False), "$")
    Col_Letter = vArr(0)
End Function

รหัสการทดสอบสำหรับคอลัมน์ 100

Sub Test()
    MsgBox Col_Letter(100)
End Sub

9
คุณสามารถเพิ่มใน(0)ตอนท้ายของคำสั่ง Split หากคุณต้องการบันทึกการประกาศตัวแปรและบรรทัดรหัสเพิ่มเติมด้วยตนเอง เช่นCol_letter = Split(Cells(1, lngCol).Address(True, False), "$")(0)
Caltor

3
มันค่อนข้างถูกต้อง แต่ฉันคิดว่ามันอ่านง่ายขึ้นที่จะใช้หลายบรรทัด
brettdj

6
ทำไมต้องกังวลกับ Boolean params ในสถานการณ์นี้ คุณสามารถทำได้: ............................................. ......v = Split(Cells(1, lngCol).Address, "$")(1)
Excel Hero

1
ในขณะที่นี่เก่ามากฉันมีส่วนเพิ่มเติมเล็ก ๆ น้อย ๆ - ตรวจสอบก่อนว่าตัวเลขเป็นค่าบวกมิฉะนั้นคุณจะพบข้อผิดพลาด ถ้า lngcol <= 0 แล้ว
Selkie

1
เมื่อใช้ VBS จำได้ว่า.Cellsเป็นทรัพย์สินของ Excel <excel_object>.Cells()ซึ่งหมายความว่าคุณจะต้องใช้ มิฉะนั้นคุณจะได้รับข้อผิดพลาดประเภทไม่ตรงกัน
Stevoisiak

88

หากคุณไม่ต้องการใช้วัตถุช่วง:

Function ColumnLetter(ColumnNumber As Long) As String
    Dim n As Long
    Dim c As Byte
    Dim s As String

    n = ColumnNumber
    Do
        c = ((n - 1) Mod 26)
        s = Chr(c + 65) & s
        n = (n - c) \ 26
    Loop While n > 0
    ColumnLetter = s
End Function

1
ไม่ชัดเจนว่าทำไมคุณโพสต์อีกต่อไปด้วยวิธีการวนรอบบนพื้นฐานของถ้าคุณไม่ต้องการใช้วัตถุช่วง:
brettdj

29
@brettdj ฉันสามารถจินตนาการได้หลายสาเหตุ: 1) วิธีนี้เร็วขึ้นประมาณ 6 เท่าโดยการทดสอบของฉัน 2) ไม่ต้องการการเข้าถึง Excel API 3) สันนิษฐานว่ามีหน่วยความจำขนาดเล็กกว่า แก้ไข: นอกจากนี้ฉันไม่แน่ใจว่าทำไมฉันแสดงความคิดเห็นในคำตอบมากกว่าหนึ่งปี: S
Blackhawk

6
แม้ว่าจะมีข้อเสียเปรียบสำหรับความเร็วที่เพิ่มขึ้น ใช้วัตถุช่วงโยนข้อผิดพลาดถ้าคุณผ่านหมายเลขคอลัมน์ไม่ถูกต้อง มันใช้งานได้แม้จะมีใครบางคนยังใช้ Excel 2003 อยู่หากคุณต้องการข้อยกเว้นประเภทนี้ให้ใช้วิธีการช่วง มิฉะนั้นรุ่งโรจน์เพื่อ robartsd
Engineer Toast

6
IF ColumnNumber <= Columns.Countจะดีกว่าเพื่อหลีกเลี่ยงการสันนิษฐานรอบ ๆ รุ่น
brettdj

1
อีกเหตุผลที่ใช้รหัสนี้คือถ้าคุณไม่ได้อยู่ใน VBA แต่ใน VB, .net ฯลฯ
Maury Markowitz

46

สิ่งที่เหมาะกับฉันคือ:

Cells(Row,Column).Address 

นี่จะส่งคืนการอ้างอิงรูปแบบ $ AE $ 1 สำหรับคุณ


1
สิ่งนี้ไม่ตอบคำถาม
Pochmurnik

33

ฉันไม่แปลกใจเลยที่ไม่มีใครแนะนำ: ** <code> </code> <code> คอลัมน์ (</code> *** <code> ดัชนีคอลัมน์ </code> *** <code>) .Address </code> <code> </ code> **

  • ตัวอย่างเช่น ผลตอบแทนMsgBox Columns( 9347 ).Address ** <code> $ MUM: $ MUM </ code> **

หากต้องการส่งกลับเฉพาะตัวอักษรคอลัมน์ :Split((Columns(Column Index).Address(,0)),":")(0)

  • ตัวอย่างเช่น ผลตอบแทนMsgBox Split((Columns( 2734 ).Address(,0)),":")(0) ** <code> DAD </ code> **

  ตัวอย่างเพิ่มเติม



อันนี้ใช้ได้กับฉันใน Office 365: string col = Worksheet.Columns [column] .Address; return col.Substring (col.IndexOf (":") + 2); ด้วยเหตุผลบางอย่างนิพจน์อื่น ๆ เช่น Range = Worksheet.Cells [1, คอลัมน์] กำลังขว้างข้อผิดพลาด (ทั้งในการโทร Cells หรือเมื่อฉันพยายามที่จะใช้ที่อยู่ไม่สามารถจำได้ - ขอโทษ - สายใดที่โยนที่ กรณีเฉพาะ)
Sam Azer

19

อีกวิธีหนึ่งในการทำเช่นนี้ คำตอบของ Brettdjทำให้ฉันคิดถึงสิ่งนี้ แต่ถ้าคุณใช้วิธีนี้คุณไม่ต้องใช้อาเรย์ตัวแปรคุณสามารถไปที่สตริงได้โดยตรง

ColLtr = Cells(1, ColNum).Address(True, False)
ColLtr = Replace(ColLtr, "$1", "")

หรือทำให้กะทัดรัดขึ้นด้วยเล็กน้อย

ColLtr = Replace(Cells(1, ColNum).Address(True, False), "$1", "")

โปรดสังเกตว่าสิ่งนี้ขึ้นอยู่กับการอ้างอิงแถวที่ 1 ในวัตถุเซลล์


18

และวิธีแก้ปัญหาโดยใช้การเรียกซ้ำ:

Function ColumnNumberToLetter(iCol As Long) As String

    Dim lAlpha As Long
    Dim lRemainder As Long

    If iCol <= 26 Then
        ColumnNumberToLetter = Chr(iCol + 64)
    Else
        lRemainder = iCol Mod 26
        lAlpha = Int(iCol / 26)
        If lRemainder = 0 Then
            lRemainder = 26
            lAlpha = lAlpha - 1
        End If
        ColumnNumberToLetter = ColumnNumberToLetter(lAlpha) & Chr(lRemainder + 64)
    End If

End Function

ตัดและวางที่สมบูรณ์แบบเพื่อแปลงตัวเลขที่มากกว่า 676 ขอบคุณ!
David Krider

1
ส่วนที่เหลือจะไม่เกิน 26 ดังนั้นทำไมไม่เป็นจำนวนเต็มมากกว่ายาว?
Caltor

10
@Caltor ยกเว้นว่าคุณมีจุดประสงค์พิเศษสำหรับการใช้ Integer เช่นการเรียก API ที่ต้องการหนึ่งตัวอย่างเช่นคุณไม่ควรเลือก Integer ในระยะยาว VBA เหมาะสำหรับ Longs VBA ประมวลผลเร็วกว่า Integers
ฮีโร่ Excel

1
@ExcelHero ฉันไม่ทราบว่า Long ใช้หน่วยความจำนานกว่า Integer หรือไม่
แคลอรี่

6
@ Calor แน่นอนความยาว 32 บิตในขณะที่ Integer เท่ากับ 16 แต่นั่นไม่สำคัญในการคำนวณที่ทันสมัย 25 ปีที่แล้ว ... มันสำคัญมาก แต่วันนี้ (แม้กระทั่ง 15 ปีที่แล้ว) ความแตกต่างนั้นไม่สำคัญเลย
Excel Hero

9

สามารถใช้ได้ผ่านการใช้สูตร:

=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")

และยังสามารถเขียนเป็นฟังก์ชัน VBA ตามที่ร้องขอ:

Function ColName(colNum As Integer) As String
    ColName = Split(Worksheets(1).Cells(1, colNum).Address, "$")(1)
End Function

8

นี่เป็นรุ่นของคำตอบของ robartsd (ด้วยรสชาติของโซลูชั่นบรรทัดเดียวของJan Wijninckx ) โดยใช้การเรียกซ้ำแทนการวนซ้ำ

Public Function ColumnLetter(Column As Integer) As String
    If Column < 1 Then Exit Function
    ColumnLetter = ColumnLetter(Int((Column - 1) / 26)) & Chr(((Column - 1) Mod 26) + Asc("A"))
End Function

ฉันได้ทดสอบสิ่งนี้ด้วยอินพุตต่อไปนี้:

1   => "A"
26  => "Z"
27  => "AA"
51  => "AY"
702 => "ZZ"
703 => "AAA" 
-1  => ""
-234=> ""

2
ฉันเพิ่งสังเกตเห็นว่านี่เป็นสิ่งเดียวกับโซลูชันของ Nikolay Ivanov ซึ่งทำให้ฉันแปลกใหม่น้อยลง ฉันจะทิ้งมันไว้เพราะมันแสดงให้เห็นถึงแนวทางที่แตกต่างกันเล็กน้อยสำหรับ minutia สองสาม
alexanderbird

วิธีแก้ปัญหาที่ดีด้วยเหตุผลสองประการ: ไม่ใช้วัตถุใด ๆ (เช่นช่วงเซลล์และอื่น ๆ ) นิยามที่กะทัดรัดมาก
รัก

8

รหัสของ robertsdนั้นสวยงาม แต่ยังสามารถพิสูจน์ได้ในอนาคตให้เปลี่ยนการประกาศของ n เป็นแบบยาว

ในกรณีที่คุณต้องการสูตรเพื่อหลีกเลี่ยงแมโครนี่คือสิ่งที่ใช้งานได้สูงสุด 702 คอลัมน์

=IF(A1>26,CHAR(INT((A1-1)/26)+64),"")&CHAR(MOD(A1-1,26)+65)

โดย A1 คือเซลล์ที่มีหมายเลขคอลัมน์ที่จะถูกแปลงเป็นตัวอักษร


7

ปรับปรุงล่าสุด : โปรดละเว้นฟังก์ชั่นด้านล่าง @SurasinTancharoen n = 53จัดการเพื่อแจ้งเตือนฉันว่ามันเสียที่
สำหรับผู้ที่สนใจนี่คือค่าที่ไม่ปกติอื่น ๆ ด้านล่างn = 200:

ค่าบางอย่างของ

กรุณาใช้ฟังก์ชั่น @brettdj สำหรับทุกความต้องการของคุณ มันยังทำงานได้กับจำนวนสูงสุดของคอลัมน์สูงสุดที่ Microsoft Excel จำกัด : 16384ควรให้XFD

ป้อนคำอธิบายรูปภาพที่นี่

สิ้นสุดการอัพเดท


ฟังก์ชั่นด้านล่างนี้จัดทำโดย Microsoft:

Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function

ที่มา: วิธีแปลงหมายเลขคอลัมน์ Excel เป็นอักขระแบบตัวอักษร

ใช้กับ

  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition

2
สำหรับการอ้างอิง pukes นี้ที่มีชุดคอลัมน์ขนาดใหญ่เนื่องจาก Chr () ไม่รองรับตัวเลขจำนวนมาก
Azuvector

2
นี่เป็นข้อผิดพลาด ลองใช้ ConvertToLetter (53) ซึ่งควรเป็น 'BA' แต่จะล้มเหลว
Surasin Tancharoen

@SurasinTancharoen ขอบคุณมากสำหรับข้อบกพร่องนี้ ฉันไม่เคยคิดเลยว่า Microsoft จะให้ฟังก์ชั่นที่ใช้งานไม่ได้เนื่องจากพวกเขาเป็นผู้สร้าง Microsoft Excel เอง ฉันจะยกเลิกฟังก์ชั่นนี้ต่อจากนี้ไปและจะใช้ฟังก์ชัน @brettdj ที่แก้ไขได้ถึงจำนวนคอลัมน์สูงสุดของ Microsoft Excel ล่าสุดCol_Letter(16384) = "XFD"
mtbink.com

4
และสิ่งนี้ "หารด้วย 27" บนโลกนี้มาจากไหน? ล่าสุดฉันตรวจสอบมี 26 ตัวอักษร นี่คือสาเหตุที่รหัสนี้แตก
ib11

5

นี่เป็นฟังก์ชั่นตามคำตอบของ @ DamienFennellyด้านบน หากคุณยกนิ้วให้ฉันให้ยกนิ้วให้เขาด้วย! : P

Function outColLetterFromNumber(iCol as Integer) as String
    sAddr = Cells(1, iCol).Address
    aSplit = Split(sAddr, "$")
    outColLetterFromNumber = aSplit(1)
End Function

2
ดีมาก แต่แตกต่างจากคำตอบที่ยอมรับได้อย่างไร
Ioannis

@loannis ฉันยึดคำตอบของ DamianFennelly ไม่ใช่ของที่ยอมรับ แต่ใช่ฉันดูเหมือนคำตอบที่ได้รับการยอมรับยกเว้นหนึ่งบรรทัดแบ่งออกเป็นสองบรรทัดเพื่อให้อ่านง่ายขึ้น
BrettFromLA

3

มีวิธีง่ายๆในการใช้พลังงาน Excel: ใช้Range.Cells.Addressคุณสมบัติด้วยวิธีนี้:

strCol = Cells(1, lngRow).Address(xlRowRelative, xlColRelative)

นี่จะส่งคืนที่อยู่ของคอลัมน์ที่ต้องการในแถวที่ 1 นำมาจาก1:

strCol = Left(strCol, len(strCol) - 1)

โปรดทราบว่ามันรวดเร็วและมีประสิทธิภาพที่คุณสามารถส่งคืนที่อยู่คอลัมน์ที่มีอยู่ได้!

ทดแทนlngRowสำหรับหมายเลขคอลัมน์ที่ต้องการโดยใช้Selection.Columnคุณสมบัติ!


2

นี่คือหนึ่งซับง่าย ๆ ที่สามารถใช้ได้

ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 1)

มันจะใช้งานได้กับการกำหนดคอลัมน์ตัวอักษร 1 ตัวเท่านั้น แต่มันก็ดีสำหรับกรณีง่าย ๆ หากคุณต้องการใช้สำหรับการกำหนดตัวอักษร 2 ตัวเท่านั้นคุณสามารถใช้สิ่งต่อไปนี้:

ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 2)

2

สิ่งนี้จะทำงานโดยไม่คำนึงว่าคอลัมน์ใดในโค้ดบรรทัดหนึ่งสำหรับเซลล์ที่อยู่ในแถว X ในคอลัมน์ Y:

Mid(Cells(X,Y).Address, 2, instr(2,Cells(X,Y).Address,"$")-2)

หากคุณมีเซลล์ที่มีชื่อเฉพาะที่ชื่อว่า "Cellname":

Mid(Cells(1,val(range("Cellname").Column)).Address, 2, instr(2,Cells(1,val(range("Cellname").Column)).Address,"$")-2)

1

ทางออกจาก brettdj ทำงานได้อย่างน่าอัศจรรย์ แต่ถ้าคุณเจอปัญหานี้ด้วยวิธีการแก้ปัญหาที่อาจเกิดขึ้นด้วยเหตุผลเดียวกับฉันฉันคิดว่าฉันจะเสนอทางเลือกอื่น

ปัญหาที่ฉันมีคือเลื่อนไปยังคอลัมน์ที่เฉพาะเจาะจงตามผลลัพธ์ของฟังก์ชัน MATCH () แทนที่จะแปลงหมายเลขคอลัมน์เป็นตัวอักษรคอลัมน์แบบขนานฉันเลือกที่จะสลับลักษณะการอ้างอิงจาก A1 เป็น R1C1 ชั่วคราว วิธีนี้ฉันสามารถเลื่อนไปที่หมายเลขคอลัมน์โดยไม่ต้องโคลนด้วยฟังก์ชัน VBA หากต้องการสลับระหว่างสไตล์การอ้างอิงทั้งสองอย่างง่ายดายคุณสามารถใช้รหัส VBA นี้:

Sub toggle_reference_style()

If Application.ReferenceStyle = xlR1C1 Then
  Application.ReferenceStyle = xlA1
Else
  Application.ReferenceStyle = xlR1C1
End If

End Sub

1

เพิ่มเติมจากคำตอบ brettdj นี่คือการทำให้การป้อนหมายเลขคอลัมน์ไม่จำเป็น หากไม่ใส่หมายเลขคอลัมน์ฟังก์ชันจะส่งคืนตัวอักษรคอลัมน์ของเซลล์ที่เรียกใช้ฟังก์ชัน ฉันรู้ว่านี่สามารถทำได้โดยใช้เพียงColumnLetter(COLUMN())แต่ฉันคิดว่ามันจะดีถ้ามันสามารถเข้าใจอย่างชาญฉลาด

Public Function ColumnLetter(Optional ColumnNumber As Long = 0) As String
    If ColumnNumber = 0 Then
        ColumnLetter = Split(Application.Caller.Address(True, False, xlA1), "$")(0)
    Else
        ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False, xlA1), "$")(0)
    End If
End Function

การปิดฟังก์ชั่นนี้คือมันช้ากว่าคำตอบของ brettdj เล็กน้อยเนื่องจากการIFทดสอบ แต่สิ่งนี้อาจรู้สึกได้ถ้าใช้ฟังก์ชั่นซ้ำหลายครั้งมาก ๆ


1

นี่คือคำตอบที่ล่าช้าสำหรับวิธีการใช้แบบง่ายInt()และIfในกรณีของคอลัมน์อักขระ 1-3:

Function outColLetterFromNumber(i As Integer) As String

    If i < 27 Then       'one-letter
        col = Chr(64 + i)
    ElseIf i < 677 Then  'two-letter
        col = Chr(64 + Int(i / 26)) & Chr(64 + i - (Int(i / 26) * 26))
    Else                 'three-letter
        col = Chr(64 + Int(i / 676)) & Chr(64 + Int(i - Int(i / 676) * 676) / 26)) & Chr(64 + i - (Int(i - Int(i / 676) * 676) / 26) * 26))
    End If

    outColLetterFromNumber = col

End Function

1
Function fColLetter(iCol As Integer) As String
  On Error GoTo errLabel
  fColLetter = Split(Columns(lngCol).Address(, False), ":")(1)
  Exit Function
errLabel:
  fColLetter = "%ERR%"
End Function

1

ที่นี่ฟังก์ชั่นง่าย ๆ ใน Pascal (Delphi)

function GetColLetterFromNum(Sheet : Variant; Col : Integer) : String;
begin
  Result := Sheet.Columns[Col].Address;  // from Col=100 --> '$CV:$CV'
  Result := Copy(Result, 2, Pos(':', Result) - 2);
end;

1

สูตรนี้จะให้คอลัมน์ตามช่วง (เช่นA1 ) โดยที่ช่วงคือเซลล์เดียว หากกำหนดช่วงหลายเซลล์จะส่งคืนเซลล์ด้านซ้ายบน หมายเหตุการอ้างอิงเซลล์ทั้งสองจะต้องเหมือนกัน:

MID (CELL ("ที่อยู่", A1 ), 2, SEARCH ("$", CELL ("ที่อยู่", A1) ), 2) -2)

มันทำงานอย่างไร:

CELL ("property", "range") จะส่งคืนค่าเฉพาะของช่วงขึ้นอยู่กับคุณสมบัติที่ใช้ ในกรณีนี้ที่อยู่เซลล์ คุณสมบัติที่อยู่ส่งคืนค่า $ [col] $ [row] เช่น A1 -> $ A $ 1 ฟังก์ชัน MID แยกวิเคราะห์ค่าคอลัมน์ระหว่างสัญลักษณ์ $


0

วิธีง่ายๆในการรับชื่อคอลัมน์

Sub column()

cell=cells(1,1)
column = Replace(cell.Address(False, False), cell.Row, "")
msgbox column

End Sub

ฉันหวังว่ามันจะช่วย =)


0
Sub GiveAddress()
    Dim Chara As String
    Chara = ""
    Dim Num As Integer
    Dim ColNum As Long
    ColNum = InputBox("Input the column number")

    Do
        If ColNum < 27 Then
            Chara = Chr(ColNum + 64) & Chara
            Exit Do
        Else
            Num = ColNum / 26
            If (Num * 26) > ColNum Then Num = Num - 1
            If (Num * 26) = ColNum Then Num = ((ColNum - 1) / 26) - 1
            Chara = Chr((ColNum - (26 * Num)) + 64) & Chara
            ColNum = Num
        End If
    Loop

    MsgBox "Address is '" & Chara & "'."
End Sub

0

ดังนั้นฉันมางานปาร์ตี้ที่นี่ช้า แต่ฉันต้องการมีส่วนร่วมตอบคำตอบอื่นที่ยังไม่มีใครพูดถึง แต่ไม่เกี่ยวข้องกับอาร์เรย์ คุณสามารถทำได้ด้วยการจัดการสตริงอย่างง่าย

Function ColLetter(Col_Index As Long) As String

    Dim ColumnLetter As String

    'Prevent errors; if you get back a number when expecting a letter, 
    '    you know you did something wrong.
    If Col_Index <= 0 Or Col_Index >= 16384 Then
        ColLetter = 0
        Exit Function
    End If

    ColumnLetter = ThisWorkbook.Sheets(1).Cells(1, Col_Index).Address     'Address in $A$1 format
    ColumnLetter = Mid(ColumnLetter, 2, InStr(2, ColumnLetter, "$") - 2)  'Extracts just the letter

    ColLetter = ColumnLetter
End Sub

หลังจากคุณมีอินพุตในรูปแบบ$A$1แล้วให้ใช้Midฟังก์ชันเริ่มต้นที่ตำแหน่ง 2 เพื่ออธิบายสิ่งแรก$จากนั้นคุณจะพบว่าตำแหน่งที่สอง$ปรากฏในสตริงที่ใช้InStrแล้วจากนั้นลบ 2 ออกไปยังบัญชีสำหรับตำแหน่งเริ่มต้นนั้น

สิ่งนี้จะช่วยให้คุณได้รับประโยชน์จากการปรับให้เข้ากับคอลัมน์ที่เป็นไปได้ทั้งหมด ดังนั้นColLetter(1)ให้ "A" คืนและ ColLetter(16384)ให้ "XFD" ซึ่งเป็นคอลัมน์สุดท้ายที่เป็นไปได้สำหรับรุ่น Excel ของฉัน


-1

สามารถดึงตัวอักษรคอลัมน์จากหมายเลขคอลัมน์โดยใช้สูตรโดยทำตามขั้นตอนต่อไปนี้
1. คำนวณที่อยู่คอลัมน์โดยใช้สูตรที่อยู่
2. แยกตัวอักษรคอลัมน์โดยใช้ฟังก์ชัน MID และ FIND

ตัวอย่าง:
1. ที่อยู่ (1,000,1000,1)
ผลลัพธ์ $ ALL $ 1000
2 . = ผลลัพธ์ MID (F15,2, FIND ("$", F15,2) -2)
ALL asuming F15 มีผลลัพธ์ของขั้นตอนที่ 1

ในครั้งเดียวเราสามารถเขียน
MID (ที่อยู่ (1,000,1000,1), 2, FIND ( "$", ที่อยู่ (1000,1000,1) 2) -2)


-1

นี่เป็นเพียง REFEDIT เท่านั้น ... Generaly ใช้ uphere code รุ่นสั้น ๆ ... ง่ายต่อการอ่านและเข้าใจ / ใช้ poz ของ $

Private Sub RefEdit1_Change()

    Me.Label1.Caption = NOtoLETTER(RefEdit1.Value) ' you may assign to a variable  var=....'

End Sub

Function NOtoLETTER(REFedit)

    Dim First As Long, Second As Long

    First = InStr(REFedit, "$")                 'first poz of $
    Second = InStr(First + 1, REFedit, "$")     'second poz of $

    NOtoLETTER = Mid(REFedit, First + 1, Second - First - 1)   'extract COLUMN LETTER

End Function


-2

แล้วแปลงเป็นเลข ascii และใช้ Chr () เพื่อแปลงกลับเป็นตัวอักษรล่ะ?

col_letter = Chr (การเลือกคอลัมน์ + 96)


-6

นี่คือวิธีอื่น:

{

      Sub find_test2()

            alpha_col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,W,Z" 
            MsgBox Split(alpha_col, ",")(ActiveCell.Column - 1) 

      End Sub

}

1
ไม่จำเป็นต้องสร้างรายการสตริงตัวอักษรของตัวอักษร ASCII ได้ทำสิ่งนั้นเพื่อเราแล้ว
Caltor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.