Làm cách nào để có được tên cột hiện tại trong Excel?


30

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ì?


1
Tôi chỉ tìm ra các hàm LINCOLvấn đề là chúng trả về số và tôi cần ký tự cột cho INDIRECTnó.
Jader Dias

2
bạn có thể sử dụng OFFSEThàm kết hợp với hoặc thay vì INDIRECTcô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.
Đột phá

Nhân tiện, INDIRECT là một hàm dễ bay hơi, vì vậy hãy sử dụng nó một cách tiết kiệm. Có vẻ như OFFSET có thể là một lựa chọn tốt hơn ở đây nếu bạn đang dựa trên tài liệu tham khảo mà bạn muốn dựa trên một số tính toán về vị trí.
AdamV

Câu trả lời:


33

Bạn có thể sử dụng ROWvà các COLUMNchứ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 OFFSETchứ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 CHARhà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 CODEcô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 COLUMNluô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 ZZ99khô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).


Nó sẽ chỉ hoạt động cho 26 cột đầu tiên. Nhưng điều đó sẽ làm.
Jader Dias

1
@Jader Dias đó là lý do tại sao tôi khuyên bạn nên sử dụng OFFSETthay 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.
Đột phá

2
Tôi không biết tại sao câu trả lời này lại nhận được nhiều phiếu như vậy khi câu trả lời của Scot tốt hơn nhiều, ngoại trừ việc anh ta không giải thích nó. Không có công thức phức tạp cần thiết. Tôi đã thêm một bình luận để giải thích tại sao / làm thế nào nó hoạt động.
Gerhard Powell

Điều này hoạt động cho đến khi bạn chuyển sang AA, vv thì nó sẽ không hoạt động.
kirtan vinh dự

@kstallanhonour sử dụng công thức cuối cùng từ câu trả lời của tôi trong trường hợp đó ...However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
Đột phá

34

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', ADDRESSsẽ trả về 'AB1'. Thay thế loại bỏ '1'.


5

Thử đi

=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")

Điều này cung cấp cho bạn tiêu đề cột chính xác, không có bất kỳ $ nào, v.v.


2

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.


2

Để 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),"")

2

Hơi thủ công nhưng ít VBA và công thức đơn giản hơn:

  • Trong một hàng của Excel, ví dụ ô A1, nhập số cột =column()
  • Trong hàng bên dưới, nhập =Address(1,A1)
  • Điều này sẽ cung cấp kết quả $A$1

Khi các giá trị được sao chép, tìm và thay thế $1trống.


2

Điều này cũng sẽ làm việc

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)

Bạn có thể thêm một số lời giải thích cho điều này.
ChrisF

1

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!A1và 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 MySheet1là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 MySheet2tham 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.


1

Giải pháp đánh bóng phiên bản Excel:

  • cho một ô cụ thể:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
  • cho ô hiện tại:
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")

0

Đâ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.


0
=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$2hoặ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.


0

Đây là cách bạn có thể tìm tiêu đề cột (tức là chữ cái):

=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)

0

thử đi:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)

0

Công thức sau đây hoạt động bất kể bạn đặt nó ở đâu (nó sẽ trả lại cho bạn tên cột).

=SUBSTITUTE(SUBSTITUTE(ADDRESS(ROW(),COLUMN()),"$",""),ROW(),"")

-1

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


4
Vui lòng mở rộng câu trả lời này bằng cách giải thích những chức năng này là gì.
Kevin Panko

lấy tên cột hiện tại trong Excel, chẳng hạn như "A1", "B1", ... thậm chí lên như "AA1", "BA1", "CA1", ...
ayus

-1
=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)))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.