Hàm để lấy số dòng hiện tại và tên cột hiện tại cho một ô trong Excel là gì?
OFFSET
hàm kết hợp với hoặc thay vì INDIRECT
công thức trong trường hợp đó. Tuy nhiên, nếu bạn muốn sử dụng chuỗi, tôi cũng cập nhật câu trả lời của mình.
Hàm để lấy số dòng hiện tại và tên cột hiện tại cho một ô trong Excel là gì?
OFFSET
hàm kết hợp với hoặc thay vì INDIRECT
công thức trong trường hợp đó. Tuy nhiên, nếu bạn muốn sử dụng chuỗi, tôi cũng cập nhật câu trả lời của mình.
Câu trả lời:
Bạn có thể sử dụng ROW
và các COLUMN
chức năng để làm điều này. Nếu bạn bỏ qua đối số cho các công thức đó, ô hiện tại sẽ được sử dụng. Đây có thể được sử dụng trực tiếp với các OFFSET
chức năng , hay bất kỳ chức năng khác mà bạn có thể chỉ định cả hàng và cột như các giá trị số.
Ví dụ: nếu bạn nhập =ROW()
vào ô D8, giá trị được trả về là 8. Nếu bạn nhập =COLUMN()
vào cùng một ô, giá trị được trả về là 4.
Nếu bạn muốn chữ cái cột, bạn có thể sử dụng CHAR
hàm. Tôi không khuyên bạn nên sử dụng các chữ cái để thể hiện cột, vì mọi thứ trở nên khó khăn khi chuyển vào các tên cột hai chữ cái (trong đó chỉ cần sử dụng các số là hợp lý hơn).
Bất kể, nếu bạn vẫn muốn lấy ký tự cột, bạn chỉ cần thêm 64 vào số cột (64 là một ký tự ít hơn A
), vì vậy trong ví dụ trước, nếu bạn đặt giá trị của ô thành =CHAR(COLUMN()+64)
, giá trị được trả về sẽ là D
. Nếu bạn muốn giá trị của một ô là chính vị trí ô, thì công thức hoàn chỉnh sẽ là =CHAR(COLUMN()+64) & ROW()
.
Chỉ là một FYI, tôi đã nhận được 64 từ một bảng ASCII. Bạn cũng có thể sử dụng CODE
công thức, vì vậy công thức cập nhật sử dụng công thức này sẽ là =CHAR(COLUMN() + CODE("A") - 1)
. Bạn phải trừ 1 vì giá trị tối thiểu COLUMN
luôn là 1, và sau đó giá trị trả về tối thiểu của toàn bộ công thức sẽ là B
.
Tuy nhiên, điều này sẽ không hoạt động với các cột hai chữ cái. Trong trường hợp đó, bạn cần có công thức sau đây để phân tích chính xác các cột hai chữ cái:
=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()
Tôi không chắc có cách nào dễ dàng hơn để làm điều đó hay không, nhưng tôi biết rằng nó hoạt động từ tế bào A1
đến ZZ99
không có vấn đề. Tuy nhiên, điều này minh họa tại sao tốt nhất nên tránh sử dụng mã định danh cột dựa trên chữ cái và gắn bó với các công thức dựa trên số thuần túy (ví dụ: sử dụng số cột thay vì chữ cái OFFSET
).
OFFSET
thay thế, cho phép bạn chỉ định các cột dưới dạng số. Bất kể, tôi đã cập nhật câu trả lời với một công thức để mở rộng nó hoạt động với các cột có hai chữ cái.
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Hãy thử chức năng sau:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Giải thích : ADDRESS(row_num, column_num, [abs_num])
. [abs_num] = 4
= địa chỉ tương đối. Điều đó có nghĩa là không có '$' trong giá trị được trả về. Đối với Cột 'AB', ADDRESS
sẽ trả về 'AB1'. Thay thế loại bỏ '1'.
Nhập cái này vào bất kỳ ô nào:
Đặc biệt :
=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)
Tiếng Anh :
=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)
Bạn có thể thay thế cột () bằng số hàng.
Để có được tên cột tôi đã sử dụng các công thức sau đây.
Đối với một ô cụ thể:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
Đối với ô hiện tại:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
Hãy thử biến thể này. Nó hoạt động trên các cột có 3 chữ cái và không để lại "$" ở mặt trước:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
Một cách khác có thể là sử dụng một cái gì đó như thế này:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
Trong đó colid
đề cập đến một phạm vi được đặt tên mà bạn sẽ tạo ở nơi khác trong sổ làm việc bao gồm hai cột liền kề có nhiều hàng: cột đầu tiên chứa các số từ 1 đến n tương ứng với COLUMN()
số, cột thứ hai chứa các chữ cái A - ZZ hoặc nhiều cột tham chiếu cho bạn muốn chứa. Điều ROW()
còn lại là tốt vì nó là để trả về số Hàng.
Vì vậy, nếu bạn đã sao chép chuỗi trên vào ô A1 của 'MySheet2', nó sẽ đánh giá là =MySheet1!A1
và trả về giá trị tìm thấy trong ô tương ứng của MySheet1
.
Điều này sẽ cho phép bạn, ví dụ, sử dụng MySheet1
làm vùng làm việc, xóa và chèn lại dữ liệu mới, trong khi mọi định dạng hoặc tính toán trong MySheet2
tham chiếu đến các nội dung đó sẽ tiếp tục hoạt động chính xác với các bộ dữ liệu mới từ bảng tính được nhắm mục tiêu.
Đây là một VBA, công thức do người dùng xác định, giải pháp. Nó hoạt động với các cột 1, 2, & 3 chữ cái.
Đặt các mục sau trong mô-đun mã:
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 () trong bất kỳ ô nào sẽ trả về ký tự cột của ô.
= COLUMNLETTER (B3) trong bất kỳ tế bào sẽ trở lại B .
Hàm do người dùng xác định này hoạt động rất tốt khi tạo các công thức chung bên trong hàm INDIRECT.
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)
Công thức địa chỉ hoạt động bằng cách trả về tên cột và hàng. Định dạng được trả về sẽ luôn là $(Column Letters)$(Row Numbers)
- ví dụ $AA$2
hoặc$XAA$243556
Nếu chúng ta biết rằng $ sẽ luôn xuất hiện ở ký tự đầu tiên, chúng ta có thể sử dụng công thức mid đầu tiên để bắt đầu kéo các ký tự sau dấu $ đầu tiên (tức là ký tự thứ 2).
Sau đó, chúng tôi tìm thấy dấu $ tiếp theo (như chúng tôi biết sẽ chỉ có hai) và chúng tôi biết có bao nhiêu ký tự giữa ký hiệu đô la thứ nhất và thứ hai. Phần còn lại là phép trừ đơn giản.
thử đi:
= IF (COLUMN ()> 26, CHAR (COLUMN () / 26 +64), "") & CHAR (MOD (COLUMN () - 1,26) +65) & ROW ()
chức năng này có hiệu lực cho đến khi "ZY1" hoặc cột = 701
LIN
vàCOL
vấn đề là chúng trả về số và tôi cần ký tự cột choINDIRECT
nó.