Tách văn bản khỏi số trong công thức Excel

Như với hầu hết các công thức tách hoặc trích xuất văn bản, điều quan trọng là xác định vị trí của thứ bạn đang tìm kiếm. Khi bạn có vị trí, bạn có thể sử dụng các chức năng khác để trích xuất những gì bạn cần

Trong trường hợp này, chúng tôi giả định rằng số và văn bản được kết hợp và số xuất hiện sau văn bản. Từ văn bản gốc xuất hiện trong một ô, bạn muốn tách văn bản và số thành các ô riêng biệt, như thế này

OriginalTextNumberApples30Apples30peaches24peaches24oranges12oranges12peaches0peaches0

Như đã nêu ở trên, chìa khóa trong trường hợp này là xác định vị trí bắt đầu của số, bạn có thể thực hiện điều này với công thức như sau

=MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))

Khi bạn có vị trí, để chỉ trích xuất văn bản, hãy sử dụng

=LEFT(A1,position-1)

Và, để chỉ trích xuất số, hãy sử dụng

=RIGHT(A1,LEN(A1)-position+1)

Trong công thức đầu tiên ở trên, chúng ta đang sử dụng hàm FIND để xác định vị trí bắt đầu của số. Đối với find_text, chúng ta đang sử dụng hằng số mảng {0,1,2,3,4,5,6,7,8,9}, điều này khiến hàm FIND thực hiện tìm kiếm riêng cho từng giá trị trong hằng số mảng. Vì hằng mảng chứa 10 số nên kết quả trả về sẽ là một mảng có 10 giá trị. Ví dụ: nếu văn bản gốc là "apples30" thì mảng kết quả sẽ là

{8,10,11,7,13,14,15,16,17,18}

Mỗi số trong mảng này đại diện cho vị trí của một mục trong hằng số mảng bên trong văn bản gốc

Tiếp theo, hàm MIN trả về giá trị nhỏ nhất trong danh sách, tương ứng với vị trí của số đầu tiên xuất hiện trong văn bản gốc. Về bản chất, hàm FIND nhận tất cả các vị trí số và MIN cho chúng ta vị trí số đầu tiên. lưu ý rằng 7 là giá trị nhỏ nhất trong mảng, tương ứng với vị trí của số 3 trong văn bản gốc

Bạn có thể thắc mắc về cấu trúc kỳ quặc của within_text trong hàm find

B5&"0123456789"

Phần này của công thức nối mọi số có thể có từ 0-9 với văn bản gốc ở B5. Thật không may, TÌM không trả về 0 khi không tìm thấy giá trị, vì vậy đây chỉ là một cách thông minh để tránh lỗi có thể xảy ra khi không tìm thấy số

Trong ví dụ này, vì chúng tôi giả định rằng số sẽ luôn xuất hiện ở vị trí thứ hai trong văn bản gốc, nên nó hoạt động tốt vì MIN chỉ buộc số nhỏ nhất hoặc lần xuất hiện đầu tiên của một số được trả về. Miễn là một số xuất hiện trong văn bản gốc, vị trí đó sẽ được trả lại

Nếu văn bản gốc không chứa bất kỳ số nào, vị trí "không có thật" bằng độ dài của văn bản gốc + 1 sẽ được trả về. Với vị trí không có thật này, công thức LEFT ở trên sẽ vẫn trả về văn bản và công thức RIGHT sẽ trả về một chuỗi rỗng ("")

Tôi đã tìm thấy một công việc xoay quanh việc tôi có thể tách các số trong 'A' thành các ô riêng biệt bằng cách thêm nhiều cột hơn, ví dụ:. (D,E,F,G, v.v.) trong sách giáo khoa 1 và sử dụng. -

(D) =TRIM(MID(SUBSTITUTE($A8,CHAR(10),REPT(" ",LEN($A8))),(D$7-1)*LEN($A8)+1,LEN($A8
(E) =TRIM(MID(SUBSTITUTE($A8,CHAR(10),REPT(" ",LEN($A8))),(E$7-1)*LEN($A8)+1,LEN($A8
(F) =TRIM(MID(SUBSTITUTE($A8,CHAR(10),REPT(" ",LEN($A8))),(F$7-1)*LEN($A8)+1,LEN($A8
vân vân

Sau đó tôi có thể thêm các cột mới, vd. (S,T,U,V,W), v.v. trong sổ làm việc 2 và liệt kê tất cả các tham chiếu của cột 'B' so với 'X' bằng cách sử dụng. -

(S) =IFERROR(INDEX($B$8. $B$18,NHỎ(NẾU($P8=$D$8. $M$18,ROW($D$8. $M$18)-ROW($D$8. $M$8)+1),ROW($1). $1))),"")
(T) =IFERROR(INDEX($B$8. $B$18,NHỎ(NẾU($P8=$D$8. $M$18,ROW($D$8. $M$18)-ROW($D$8. $M$8)+1),ROW($2). $2))),"")
(U) =IFERROR(INDEX($B$8. $B$18,NHỎ(NẾU($P8=$D$8. $M$18,ROW($D$8. $M$18)-ROW($D$8. $M$8)+1),ROW($3). $3))),"")
vân vân

Sau đó, tôi nối S,T,U,V & W thành 'Z' và sử dụng ngắt dòng bằng cách sử dụng. -
=S8&CHAR(10)&T8&CHAR(10)&U8&CHAR(10)&V8&CHAR(10)&W8

Nó không thanh lịch và lộn xộn nhưng tôi không thể sử dụng bất kỳ macro nào và tôi thật ngu ngốc khi tìm ra một công thức duy nhất để đạt được kết quả tương tự

Lần nữa,
Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời

Thanks,
Đánh dấu

Trả lời

George nói
6 Tháng Tư, 2022 tại 12. 32 giờ sáng

Không bao giờ có giải pháp tách chuỗi văn bản có 4 phần thành 4 cột riêng biệt. Tôi cũng không thể sử dụng phương pháp chuyển văn bản thành cột. Tôi phải lấy một chuỗi dữ liệu (1234567>xx-093456>DesignedBy>Weller&Sons). Thông tin này phải được chia thành 4 cột riêng biệt trên trang tính. Tôi có thể tìm ra cách sử dụng LEFT và MiD nhưng RIGHT không bao giờ hoạt động. Tôi không thể tìm ra giải pháp để loại bỏ "Weller&Sons" dù tôi có cố gắng thế nào. Cái này mình chắc rất đơn giản với những người dùng excel thông minh hơn - nhưng với mình, mình đang gõ thủ công hàng trăm bản ghi mỗi ngày, khi đó mình chắc chắn phải có một thủ thuật nào đó chưa được công bố. Có vẻ như hầu hết các phần tách đều có văn bản thành cột (tôi không thể sử dụng) và chỉ dành cho tên (họ và tên). Vì vậy, có một giải pháp nào chưa được phát triển hoặc xuất bản hay đây là một nhiệm vụ bất khả thi sẽ yêu cầu tôi tiếp tục nhập lại điểm dữ liệu cuối cùng đó. Mỗi ngày có thêm 100 bản ghi để xuất và thêm chi tiết cho. Cảm ơn vì bất kỳ đề xuất và hỗ trợ nào

Trả lời

Tom Renish nói.
Tháng Một 26, 2021 tại 5. 37 giờ chiều

Sau khi sử dụng Python trong nhiều năm, có vẻ như phạm lỗi khi Excel không bao gồm lệnh "tách" trong giao diện người dùng. Tôi đã tạo hàm do người dùng xác định (UDF) của riêng mình để thực hiện điều này. Trình phân tích cú pháp này có thể lấy phần tử thứ N từ một chuỗi nhất định miễn là có một dấu phân cách nhất quán và nó có thể hoạt động từ trái sang phải hoặc phải sang trái. Mã số

Tùy chọn rõ ràng

Hàm GetLength(a Dưới dạng Biến thể) Dưới dạng Số nguyên
Nếu IsEmpty(a) Thì
Chiều dài = 0
Khác
GetLength = UBound(a) - LBound(a) + 1
kết thúc nếu
chức năng kết thúc

Chức năng FetchElement(RefCell dưới dạng chuỗi, ReturnElementNbr dưới dạng số nguyên, Dấu phân cách dưới dạng chuỗi, Đảo ngược dưới dạng Boolean) dưới dạng chuỗi

Hệ thống phân cấp mờ dưới dạng chuỗi
Làm mờ MyArray dưới dạng biến thể
Dim ArraySize dưới dạng số nguyên

Nếu Reverse = True Then
Nếu Đúng(RefCell, 1) = Dấu phân cách thì
Hierarchy = StrReverse(Left(RefCell, Len(RefCell) - 1)) 'xóa dấu "\" rồi đảo ngược phần còn lại của chuỗi
Khác. Hệ thống phân cấp = StrReverse(RefCell)
kết thúc nếu
Khác. Hệ thống phân cấp = RefCell
kết thúc nếu

MyArray = Split(Phân cấp, Dấu phân cách)

ArraySize = GetLength(MyArray)

Nếu ReturnElementNbr > ArraySize thì
FetchElement = ""
ElseIf Reverse = True Then FetchElement = StrReverse(MyArray(ReturnElementNbr - 1))
Khác. FetchElement = MyArray(ReturnElementNbr - 1)
kết thúc nếu

chức năng kết thúc

dữ liệu mẫu để phân tích cú pháp (giả sử nó nằm trong ô "A1"). prvd00664966\PT00076084\PT00072170\PT00072157\PT00076116

chỉ huy. =FetchElement(A1,3, "\", TRUE)

điều này sẽ đếm các phần tử từ phải sang trái (đã sử dụng cờ TRUE) với giả định rằng dấu phân cách là "\" và chúng tôi muốn phần tử thứ ba (parm = 3, ở trên) trong danh sách

Có, UDF tương đối chậm. Nhưng đây là một thứ dễ đọc và dễ sử dụng hơn rất nhiều so với việc phải sử dụng quá nhiều hàm chuỗi lồng nhau trong Excel

Trả lời

Chai nói.
Tháng Một 8, 2021 tại 11. 26 giờ chiều

Chào bạn,

Làm cách nào để tách văn bản theo mẫu. Tuy nhiên, mẫu có thể thay đổi và không có chuỗi chung nào mà tôi có thể sử dụng để tách ô thành các cột

Ví dụ,

Mình có chữ Mazda CX5 V6 2015 White Bumper. Tôi muốn chia phần này theo Nhãn hiệu, Kiểu máy, Năm, Loại động cơ, Màu sắc, Bộ phận và những thứ khác nếu có. Phần khó ở đây là ở hàng tiếp theo tôi có thể có Toyota Camry 2003 Bonnet Blue. Tôi muốn tất cả các hãng sản xuất vào 1 cột, tất cả các kiểu máy vào 1 cột, tất cả các bộ phận vào 1 cột, v.v. Mô hình cũng có thể thay đổi. Bởi vì đôi khi nó có thể bắt đầu bằng kiểu dáng và kết thúc bằng kiểu dáng hoặc cũng có thể là kiểu khác. Tôi muốn quy trình này được tự động hóa

Bởi vì excel sẽ không hiểu nhà sản xuất, kiểu máy, năm là gì, điều chúng ta có thể làm là có thể thêm một trình đơn thả xuống trên tiêu đề của mỗi cột có danh sách nhà sản xuất và một cột khác sẽ là kiểu máy, v.v. . Vì vậy, bây giờ khi hệ thống xác định nhà sản xuất, nó sẽ phải tìm kiếm trong tất cả các danh sách thả xuống của tất cả các cột và tìm vị trí của nó và đặt nó vào cột đó. Tôi biết nó hơi phức tạp, nhưng tôi chắc chắn rằng nó có thể được thực hiện

Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn bạn

Trả lời

Pamela nói.
Tháng Một 8, 2021 tại 6. 06 giờ chiều

Mục tiêu là chia từng từ tiếng Do Thái trong Kinh thánh thành các chữ cái riêng lẻ. Tuy nhiên, Text-to-Column làm cho nikkud/dấu trọng âm tách khỏi chữ cái cơ sở

Tôi đã phát hiện ra rằng việc đặt một dấu gạch nối giữa mỗi chữ cái của từ tiếng Do Thái sẽ khiến Văn bản thành Cột phân tách nguyên vẹn các ký tự riêng lẻ

Vì vậy, tôi đã tìm kiếm một công thức để chèn dấu gạch ngang giữa các chữ cái và tìm thấy một công thức hiệu quả. nhưng chỉ dành cho các chữ cái/số tiếng Anh. Với tiếng Hê-bơ-rơ, công thức này tách ra các dấu nikkud/accents

https. // siêu người dùng. com/câu hỏi/1371473/how-can-i-format-a-character-string-in-excel-to-insert-hyphens

Ký tự chèn phụ()

Dim Rng As Range
Làm mờ InputRng theo phạm vi, OutRng theo phạm vi
Dim xRow dưới dạng số nguyên
Dim xChar dưới dạng chuỗi
Chỉ số mờ dưới dạng số nguyên
Mảng mờ dưới dạng biến thể
Dim xValue dưới dạng chuỗi
Làm mờ giá trị dưới dạng chuỗi
Dim xNum dưới dạng số nguyên

xTitleId = "Đặt dấu gạch ngang"
Đặt InputRng = Ứng dụng. Lựa chọn
Đặt InputRng = Ứng dụng. Hộp đầu vào ("Phạm vi. ", xTitleId, InputRng. Địa chỉ, Loại. =8)

xRow = Ứng dụng. InputBox("Số ký tự. ", xTitleId, Loại. =1)
xChar = Ứng dụng. InputBox("Chỉ định một ký tự. ", xTitleId, Loại. =2)

Đặt OutRng = Ứng dụng. InputBox("Xuất ra (một ô). ", xTitleId, Loại. =8)
Đặt OutRng = OutRng. Phạm vi ("A1")

xNum = 1
Đối với mỗi Rng trong InputRng
xValue = Rng. Giá trị
outValue = ""
Đối với chỉ mục = 1 Đến VBA. Len(xValue)
Nếu chỉ mục Mod xRow = 0 Và chỉ mục VBA. Len(xValue) Sau đó
outValue = outValue + VBA. Giữa(xValue, chỉ số, 1) + xChar
Khác
outValue = outValue + VBA. Giữa(xValue, chỉ mục, 1)
kết thúc nếu
Kế tiếp
RaRng. Ô(xNum, 1). Giá trị = outValue
xNum = xNum + 1
Kế tiếp
kết thúc phụ

Câu hỏi. Có cách nào để điều chỉnh công thức này để nó nhận ra 'ký tự hoàn chỉnh' của tiếng Do Thái không?

Cám ơn rất nhiều

Trả lời

saiph nói.
Tháng Bảy 28, 2021 tại 1. 47 giờ sáng

Tôi đã tìm ra một cách để thêm một macro nhỏ (mà bạn không cần phải giữ lại)

ALT + F11
Tạo một mô-đun và thêm đoạn mã sau
Hàm IS_DATE(rng) dưới dạng Boolean
IS_DATE = IsDate(rng)
chức năng kết thúc

Điều này sẽ cho bạn biết liệu một ngày có hợp lệ hay không (đúng/sai)
Sau đó, chúng tôi kiểm tra tiêu đề phim của bạn bằng cách cố gắng tìm ngày ở cuối
Sẽ luôn có 4 chữ số cho năm, 1 cho dấu phẩy, 1 dấu cách, ít nhất một chữ số cho ngày và sau đó là tháng. Một khoảng 7 độ dài có thể. x tháng 5 – xx tháng 9
Giả sử tiêu đề/ngày của bạn ở A1
Trong B1 đặt
=IF(is_date(RIGHT(A1,11))=TRUE,11,IF(is_date(RIGHT(A1,12))=TRUE,12,IF(is_date(RIGHT(A1,13))=TRUE,13,IF

Công thức thử cắt chuỗi dài 11 ký tự thành 18 ký tự và kiểm tra từng ký tự để xem đó có phải là ngày thực hay không. Tháng là yếu tố quyết định nên các ký tự được đánh vần ngắn hoặc bổ sung làm cho đây là một ngày sai. Chỉ độ dài phù hợp mới thực sự tạo ngày hợp lệ và trả về độ dài cắt
Kết quả là số ký tự cần cắt chuỗi tại

Tiêu đề phim đi vào C1
=trái(A1,len(A1)-B1)

Ngày đi vào D1
=phải(A1,B1)

Trả lời

Sara nói.
28 Tháng Tư, 2020 tại 3. 44 giờ sáng

Tôi có kết quả từ cuộc khảo sát Qualtrics cho câu hỏi "chọn tất cả những câu hỏi phù hợp". Tôi cần nhập nó vào gói thống kê để phân tích (SPSS). Dữ liệu hiện có mã số cho các lựa chọn trả lời, nhưng khi được nhập vào gói thống kê được đọc dưới dạng chuỗi (alpha) và được phân tách bằng dấu phẩy. Tôi đang cố gắng sử dụng Exsel để tách các giá trị này thành các cột, nhưng cần một cột khác cho mỗi giá trị. Một số câu hỏi có tới 5 giá trị nhưng người dùng có thể chỉ đánh dấu 1, 2 hoặc thậm chí 4 hoặc 5 tùy chọn nên giá trị của chúng khác nhau

Dữ liệu gốc. -> Mảng mới, ở đâu. . chỉ ra một cột riêng biệt
1, 2, 5 trở thành. 1. 2. . . 5. (tôi. e. các cột cho các giá trị 3 và 4 được để trống)
2, 3, trở thành. . 2. 3. . . (tôi. e. các cột cho các giá trị 1, 4 và 5 được để trống)
4 trở thành. . . . 4. . (tôi. e. các cột cho các giá trị, 1, 2, 3 và 5 được để trống)

Văn bản thành cột phân tách chúng, nhưng sau đó tôi có một cột có hỗn hợp các câu trả lời (e. g. 1, 2, 4 dựa trên ví dụ trên) nhưng tôi cần tạo một biến nhị phân cho lựa chọn trả lời 1, một biến riêng biệt cho 2, v.v. Bất kỳ ý tưởng?