ฟังก์ชันรับหมายเลขบรรทัดปัจจุบันและชื่อคอลัมน์ปัจจุบันของเซลล์ใน Excel คืออะไร
OFFSET
ฟังก์ชันร่วมกับหรือแทนINDIRECT
สูตรในกรณีนั้น ถ้าคุณต้องการใช้สตริงฉันก็อัพเดตคำตอบของฉันด้วย
ฟังก์ชันรับหมายเลขบรรทัดปัจจุบันและชื่อคอลัมน์ปัจจุบันของเซลล์ใน Excel คืออะไร
OFFSET
ฟังก์ชันร่วมกับหรือแทนINDIRECT
สูตรในกรณีนั้น ถ้าคุณต้องการใช้สตริงฉันก็อัพเดตคำตอบของฉันด้วย
คำตอบ:
คุณสามารถใช้ROW
และCOLUMN
ฟังก์ชั่นการทำเช่นนี้ หากคุณไม่ใช้อาร์กิวเมนต์สำหรับสูตรเหล่านั้นเซลล์ปัจจุบันจะถูกใช้ เหล่านี้สามารถนำมาใช้โดยตรงกับฟังก์ชั่นหรือฟังก์ชั่นอื่น ๆ ที่คุณสามารถระบุทั้งแถวและคอลัมน์เป็นค่าตัวเลขOFFSET
ตัวอย่างเช่นหากคุณป้อน=ROW()
ในเซลล์ D8 ค่าที่ส่งคืนคือ 8 หากคุณป้อน=COLUMN()
ในเซลล์เดียวกันค่าที่ส่งคืนคือ 4
หากคุณต้องการตัวอักษรคอลัมน์คุณสามารถใช้CHAR
ฟังก์ชั่น ฉันไม่แนะนำให้ใช้ตัวอักษรเพื่อเป็นตัวแทนของคอลัมน์เนื่องจากสิ่งต่าง ๆ มีความยุ่งยากเมื่อส่งผ่านไปยังชื่อคอลัมน์ตัวอักษรสองตัว
หากคุณยังต้องการรับตัวอักษรคอลัมน์คุณสามารถเพิ่ม 64 ไปยังหมายเลขคอลัมน์ (64 เป็นตัวอักษรน้อยกว่านั้นA
) ดังนั้นในตัวอย่างก่อนหน้านี้หากคุณตั้งค่าของเซลล์เป็นค่า=CHAR(COLUMN()+64)
ที่ส่งคืนจะเป็นD
. =CHAR(COLUMN()+64) & ROW()
หากคุณต้องการความคุ้มค่าของเซลล์ที่จะเป็นที่ตั้งของมือถือของตัวเองสูตรที่สมบูรณ์จะเป็น
แค่ FYI ฉันได้ 64 จากตาราง ASCII นอกจากนี้คุณยังสามารถใช้สูตรเพื่อให้สูตรการปรับปรุงโดยใช้นี้จะเป็นCODE
=CHAR(COLUMN() + CODE("A") - 1)
คุณจะต้องลบ 1 ตั้งแต่มูลค่าขั้นต่ำของการCOLUMN
เป็นเสมอ 1 B
แล้วค่าตอบแทนขั้นต่ำสูตรทั้งหมดจะเป็น
อย่างไรก็ตามสิ่งนี้จะไม่ทำงานกับคอลัมน์สองตัวอักษร ในกรณีนั้นคุณต้องใช้สูตรต่อไปนี้ในการแยกคอลัมน์สองตัวอักษรอย่างถูกต้อง:
=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()
ฉันไม่แน่ใจว่ามีวิธีที่ง่ายกว่าในการทำหรือไม่ แต่ฉันรู้ว่ามันใช้ได้ตั้งแต่เซลล์A1
จนถึงZZ99
ไม่มีปัญหา อย่างไรก็ตามสิ่งนี้แสดงให้เห็นว่าเหตุใดจึงเป็นการดีที่สุดที่จะหลีกเลี่ยงการใช้ตัวระบุคอลัมน์แบบตัวอักษรและใช้สูตรแบบตัวเลขจำนวนมาก (เช่นใช้หมายเลขคอลัมน์แทนตัวอักษรด้วยOFFSET
)
OFFSET
แทนซึ่งช่วยให้คุณสามารถระบุคอลัมน์เป็นตัวเลขได้ ไม่ว่าฉันจะอัพเดตคำตอบด้วยสูตรใดเพื่อขยายให้ทำงานกับคอลัมน์สองตัวอักษร
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
ลองใช้ฟังก์ชั่นต่อไปนี้:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
คำอธิบาย: ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= ที่อยู่ญาติ นั่นหมายความว่าไม่มี '$' ในค่าที่ส่งคืน สำหรับคอลัมน์ 'AB' ADDRESS
จะส่งคืน 'AB1' ตัวสำรองจะลบ '1'
ลองสิ่งนี้
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
สิ่งนี้จะทำให้คุณมีส่วนหัวคอลัมน์ที่แน่นอนโดยไม่มี $ ฯลฯ
พิมพ์สิ่งนี้ลงในเซลล์ใดก็ได้:
Español :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
ภาษาอังกฤษ :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
คุณสามารถแทนที่คอลัมน์ () ตามหมายเลขแถว
ในการรับชื่อคอลัมน์ฉันใช้สูตรต่อไปนี้
สำหรับเซลล์เฉพาะ:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
สำหรับเซลล์ปัจจุบัน:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
ลองชุดรูปแบบนี้ ใช้งานได้กับคอลัมน์ 3 ตัวอักษรและไม่ปล่อย "$" ที่ส่วนหน้า:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
คู่มือเล็กน้อย แต่ VBA น้อยและสูตรที่ง่ายกว่า:
=column()
=Address(1,A1)
$A$1
เมื่อค่ามีการคัดลอกค้นหาและแทนที่$
และ1
มีว่างเปล่า
สิ่งนี้จะได้ผลเช่นกัน
=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)
อีกวิธีที่เป็นไปได้คือการใช้สิ่งนี้:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
โดยที่colid
อ้างถึงช่วงที่ตั้งชื่อคุณจะสร้างที่อื่นภายในเวิร์กบุ๊กซึ่งประกอบด้วยคอลัมน์ที่อยู่ติดกันสองคอลัมน์ที่มีหลายแถว: คอลัมน์แรกที่มีตัวเลข 1 ถึง n ที่สอดคล้องกับCOLUMN()
ตัวเลขส่วนที่สองประกอบด้วยตัวอักษร A - ZZ หรือคอลัมน์อื่น ๆ ต้องการที่จะรองรับ ROW()
ที่เหลือปรับเป็นก็คือการกลับจำนวนแถว
ดังนั้นถ้าคุณมีการคัดลอกสตริงด้านบนเพื่อเซลล์ A1 ของ MySheet2 'ก็จะประเมินเป็นและส่งกลับค่าที่พบในเซลล์ที่สอดคล้องกันของ=MySheet1!A1
MySheet1
สิ่งนี้จะช่วยให้คุณสามารถใช้MySheet1
เป็นพื้นที่ทำงานในการลบและแทรกข้อมูลใหม่ในขณะที่การจัดรูปแบบหรือการคำนวณใด ๆMySheet2
ที่อ้างถึงเนื้อหาเหล่านั้นจะยังคงทำงานอย่างถูกต้องกับชุดข้อมูลใหม่จากแผ่นงานแท็บเป้าหมาย
วิธีแก้ปัญหาสำหรับรุ่น Excel ของโปแลนด์:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")
นี่คือ VBA สูตรที่ผู้ใช้กำหนดโซลูชัน ใช้งานได้กับคอลัมน์ 1, 2 และ 3 ตัวอักษร
ใส่สิ่งต่อไปนี้ในโมดูลโค้ด:
Function COLUMNLETTER(Optional rng As Range) As String
'Returns the Column Letter of the top left cell in rng.
If rng Is Nothing Then Set rng = Application.Caller
COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))
End Function
= COLUMNLETTER () ในเซลล์ใด ๆ จะส่งคืนตัวอักษรคอลัมน์ของเซลล์
= COLUMNLETTER (B3) ในเซลล์จะกลับB
ฟังก์ชั่นที่ผู้ใช้กำหนดนี้ทำงานได้ดีเมื่อสร้างสูตรทั่วไปภายในฟังก์ชั่น INDIRECT
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
สูตรที่อยู่ใช้งานได้โดยส่งคืนชื่อคอลัมน์และแถว รูปแบบที่ส่งคืนจะเป็น$(Column Letters)$(Row Numbers)
เช่น - $AA$2
หรือ$XAA$243556
หากเรารู้ว่า $ จะเกิดขึ้นเสมอกับตัวอักษรตัวแรกเราสามารถใช้สูตรกลางแรกเพื่อเริ่มการดึงตัวละครหลังจากเครื่องหมาย $ แรก (เช่นตัวที่ 2)
จากนั้นเราจะพบเครื่องหมาย $ ถัดไป (เท่าที่เรารู้ว่าจะมีเพียงสอง) และเรารู้ว่ามีอักขระกี่ตัวระหว่างเครื่องหมายดอลลาร์ตัวแรกและตัวที่สอง ส่วนที่เหลือเป็นการลบแบบง่าย
นี่คือวิธีที่คุณสามารถค้นหาส่วนหัวของคอลัมน์ (เช่นตัวอักษร):
=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)
ลองนี้:
=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
สูตรต่อไปนี้ใช้ได้ไม่ว่าคุณจะใส่ไว้ที่ไหน (มันจะให้ชื่อคอลัมน์กลับมา)
=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")
ลองนี้:
= IF (COLUMN ()> 26, CHAR (COLUMN () / 26 +64), "") & CHAR (MOD (COLUMN () - 1,26) +65) & ROW ()
ฟังก์ชันนี้มีผลจนถึง "ZY1" หรือคอลัมน์ = 701
=IF(COLUMN()>702,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),4),3),IF(COLUMN()>26,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),3),2),RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),2),1)))
LIN
และCOL
แต่ปัญหาคือพวกเขากลับตัวเลขและตัวอักษรที่ฉันต้องการคอลัมน์เพื่อINDIRECT
มัน