Tách tên hàng hóa hóa- Mã hàng hóa?

Liên hệ QC

xuantham

Thành viên thường trực
Thành viên danh dự
Tham gia
20/6/06
Bài viết
213
Được thích
737
Tôi có côt dữ liêu như sau: Air Light Foundation (156100001)- gồm cả tên và mã hàng. Nay tôi muốn từ cột này tạo ra được Cột mã và tên thì làm sao?
Nhờ các bạn giúp cho. Cảm ơn nhiều
 

File đính kèm

  • Tach ma-ten.xls
    14 KB · Đọc: 94
Chị xem lại file này xem sao nhé !
 

File đính kèm

  • Tach ma-ten (Ver01).rar
    6.5 KB · Đọc: 117
Trong vấn đề cụ thể này có thể dùng,
mã hàng=MID(D7,FIND("(",D7,1)+1,9)
còn nếu độ dài mã hàng không bằng nhau thì dùng right() kết hợp len().
 
Copy vùng dữ liệu (cột D) sang cột Ten (cột E)
Chọn vùng ở cột E.
Nhấn Data/ Text to columns (Excel 11) hoặc Data/ Data tools/ Text to columns (Excel 12).
Step 1: Chọn Delimited, nhấn Next
Step 2: Bỏ hết các tuỳ chọn, chọn tuỳ chọn Other rồi đánh ký tự "(" vào ô bên cạnh.
Nhấn Finish để kết thúc.
Chọn vùng cột Ma (cột F)
Nhấn tiếp Ctrl+H để thay thế hết các ký tự ")"
Find what: đánh )
Replace with: bỏ trống
Nhấn Replace All
----------
Nếu bạn thích lập công thức:
Lấy tên:
=TRIM(LEFT(TRIM(D7),FIND("(",D7,1)-1))
Lấy Mã:
=MID(D7,FIND("(",TRIM(D7),1)+1,LEN(TRIM(D7))-FIND("(",TRIM(D7),1)-1)
 
Cảm ơn VuNgoc,ThuNghi va nvson nhiều. mình sẽ thử hết các cách

To ThuNghi: Đã dùng kiểu này nhưng mình chuă tách được tên ra. Post lên nhờ mọi người xem giúp sai chổ nào.

To Vu Ngoc: chị cần điều chỉnh gì ở code khi vung dữ liệu lơn hơn không em?
Cảm ơn em nhiều
 
Dear chị xuantham !

Chị không cần phải điều chỉnh code (Kể cả khi vùng dữ liệu lớn hơn) !
(À trong file đó em có giấu 1 cột F, chị unhide để xem luôn)

Chúc chị luôn vui, khỏe !
 
Tên hàng=trim(left(D7,FIND("(",D7,1)-1))
 
Tôi không biết trong thực tế chỗ chị xuantham có xảy ra những trường hợp này không, vì:

- Nếu trong phần Diễn giải có nhiều hơn 1 dấu "(" thì cách của ThuNghi chưa ổn.
- Nếu người nhập liệu lỡ nhập 1 khoảng trắng trước dấu "(" ví dụ như ( 156100001) thì cách của vungoc cũng chưa ổn.

Tôi chỉ nghĩ những "rủi ro" mà người dùng có thể gặp phải khi ứng dụng vào thực tế thôi, các bạn góp ý thêm nhé.

Chúc các bạn vui, khỏe.
 
tht đã viết:
Tôi không biết trong thực tế chỗ chị xuantham có xảy ra những trường hợp này không, vì:

- Nếu trong phần Diễn giải có nhiều hơn 1 dấu "(" thì cách của ThuNghi chưa ổn.
- Nếu người nhập liệu lỡ nhập 1 khoảng trắng trước dấu "(" ví dụ như ( 156100001) thì cách của vungoc cũng chưa ổn.

Tôi chỉ nghĩ những "rủi ro" mà người dùng có thể gặp phải khi ứng dụng vào thực tế thôi, các bạn góp ý thêm nhé.

Chúc các bạn vui, khỏe.

Bạn thân mến !

Tất cả các công thức, tất cả các giải thuật lập trình đều phải dựa trên những qui luật do con người tạo ra. Không có qui luật thì không có lập trình. Mà không có lập trình thì cũng chỉ có ta với ta ngồi cầm viết mà gạch, mà tẩy xóa thôi
Để giải quyết vấn đề ta cần phải tuân thủ :
-Nhập liệu theo qui định
-Dựa vào những qui luật, những trường hợp có thể có để giải quyết trọn vẹn một vấn đề.

Ở bài này, nếu cứ giả sử các trường hợp này trường hợp nọ xảy ra thì có mà . . chết.

Vì vậy yêu cầu đặt ra là phải nhập liệu theo đúng qui định. Nếu không đúng thì nó sẽ "gào" lên ngay. Mà điều này thì trên diễn đàn đã bàn khá nhiều rồi đấy.

Thân!
 
Nhưng trường hợp Tht đưa ra cũng phải nghĩ tới thật đấy. Thông thường những cái đó trước khi làm là phải vét cạn các tình huống. Dĩ nhiên ko thể tính hết mọi trường hợp được nhưng đã là ... (hay ứng dụng excel) thì thường họ phải tính đến khá nhiều. Ví dụ: 0 bản ghi thì thế nào, 1tr hay 100tr bản ghi thì ra sao. Nhập date sai thì thế nào, nhập số sai thì ra sao, giá trị từ ngày > đến ngày thì thế nào, Quy trình thực hiện từ A--> B nhưng họ thực hiện B trước A thì sao, Ứng dụng trên excel sẽ xử lý thế nào? v.v...

Những trường hợp tht đưa ra có vẻ như tht đã từng gặp & xử lý những vụ đó rồi thì phải.
 
Lần chỉnh sửa cuối:
hai2hai đã viết:
Nhưng trường hợp Tht đưa ra cũng phải nghĩ tới thật đấy. Thông thường những cái đó trước khi làm là phải vét cạn các tình huống. Dĩ nhiên ko thể tính hết mọi trường hợp được nhưng đã là ... (hay ứng dụng excel) thì thường họ phải tính đến khá nhiều. Ví dụ: 0 bản ghi thì thế nào, 1tr hay 100tr bản ghi thì ra sao. Nhập date sai thì thế nào, nhập số sai thì ra sao, giá trị từ ngày > đến ngày thì thế nào, Quy trình thực hiện từ A--> B nhưng họ thực hiện B trước A thì sao, Ứng dụng trên excel sẽ xử lý thế nào? v.v...

Những trường hợp tht đưa ra có vẻ như tht đã từng gặp & xử lý những vụ đó rồi thì phải.

Chính vì không lường hết các trường hợp nên em mới đề nghị khi nhập liệu phải tuân thủ một trật tự cho trước (Dùng CF, dùng Validation, dùng công thức, dùng VBA để kiểm tra . . . Cái này trên Diễn đàn đã bàn nhiều)

Vì nếu giả sử :
- Giả sử có hơn 1 ký tự "(" : Ai(r Light Fou(ndation (156100001) . . .
- Giả sử có nhiều hơn các khoảng trắng : Air Light Foundation ( 15 610 000 1) . . .
- Giả sử có kèm theo các ký tự khác : Air Light Foundation (# 156 100001) . . .
- Giả sử có hơn một dãy chuỗi số khác :Air Light (123) Foundation (#156 10(0001) . . .

............................

Đấy, đã gọi là nhập liệu sai thì làm sao mà lường hết các hậu quả của nó được.

Thân!
 
Mr Okebab đã viết:
Chính vì không lường hết các trường hợp nên em mới đề nghị khi nhập liệu phải tuân thủ một trật tự cho trước (Dùng CF, dùng Validation, dùng công thức, dùng VBA để kiểm tra . . . Cái này trên Diễn đàn đã bàn nhiều)

Vì nếu giả sử :
- Giả sử có hơn 1 ký tự "(" : Ai(r Light Fou(ndation (156100001) . . .
- Giả sử có nhiều hơn các khoảng trắng : Air Light Foundation ( 15 610 000 1) . . .
- Giả sử có kèm theo các ký tự khác : Air Light Foundation (# 156 100001) . . .
- Giả sử có hơn một dãy chuỗi số khác :Air Light (123) Foundation (#156 10(0001) . . .

............................

Đấy, đã gọi là nhập liệu sai thì làm sao mà lường hết các hậu quả của nó được.

Thân!

Định thôi ko tham gia nữa nhưng sợ ko trả lời mọi người lại bảo ko làm được (gần 15 năm để làm những việc liên quan tới coding, kể cả viết về quy trình lập trình, cho gần trăm loại khách hàng cho gần 10 công ty rồi)

Nếu đã tính trước những trường hợp đó và biết kết quả là có định dạng như thế nào thì việc viết tương đối đơn giản. Dùng Replace và hàm cắt khoảng trống. Về bản chất, khi đã định nghĩa được cách nhập mã rồi thì họ sẽ ngăn chặn ngay từ khi gõ. Gõ xong họ sẽ validate lại dữ liệu. Quan trọng nhất là thế nào là Code (bộ mã), hay bất cứ loại dữ liệu nào như: số điện thoại, email, số tiền, ngày tháng, và ngay cả mã số thuế nếu có rule, v.v... theo đúng quy định mà mình đặt ra, mình sẽ bắt được hết các trường hợp gõ sai.

Trong mấy trường hợp "đặc biệt" trên thì làm rất đơn giản với mấy việc liên quan tới xử lý chuỗi.

Ví dụ 1 trường hợp mà nếu mọi người làm CSDL sẽ thấy kiểu nhập sở hữu cách kiểu "hai2hai' house" thì khi update sẽ rất dễ bị lỗi. Nhưng để nhập được như vậy thì sẽ phải chuyển thành "hai2hai" house". Khi đó tự Database sẽ chuyển thành "hai2hai' house".

Chắc chắn nếu mọi người đưa ra quy định về mã. Mình sẽ tạo 1 ô nhập mà bắt được mọi lỗi khách hàng cố tình nhập. Cho dù gõ thừa, thiếu, gõ ký tự đặc biệt, gõ dài quá, v.v...

Thêm nữa, khi đã có quy định từ đầu, cái edit control đó có thể được thiết lập sẵn chỉ có thể gõ được những giá trị được phép nhập thôi. (Xem ví dụ về Mask Edit Control hoặc TextBox Control trong bộ vnuniXPEditSuite do VNUNI tự phát triển)

vnuniVietDate Control chính là control cho phép gõ date time độc lập với Regional settings đó.

Về Data process validation có rất nhiều mức:

- Limitation characters on control (like mask edit, vnuniEditSuite, vnuniVietDate, v.v...)
- Validation on control (normally validate on even Validate())
- Validation on form (normally validate when click save button)
- Validation on Business (in business layer)
- Validation on Data layer
- Validation in Database (Constrains, Triggers, Store procedure,...)

Đó, trải qua ngần đó thứ validation thì dữ liệu mới được ghi vào CSDL.

Ở mỗi mức validation thì có thông báo được raise lên theo những mức độ khác nhau. (Giống như lọt cửa 1 thì vào cửa 2 bị chặn lại ấy, cửa 1 thông báo 1 kiểu, cửa 2 thông báo kiểu khác, v.v...). Phần mềm phải có tác dụng hạn chế được KH nhập sai, mà giả sử nhập sai rồi thì cảnh báo KH (với nhiều mức cảnh báo khác nhau ở trên) nhập lại chứ ko lưu vào Database. Chỉ lưu vào DB khi dữ liệu đã được validated mà thôi. Dĩ nhiên thế nào gọi là validated, tức là phải có rules cho việc thiết lập validation đó: gọi là validation rules)

Thôi, có lẽ đây là bài cuối cùng về technical. Hiện mình cũng thực sự bận quá, KH thúc vào lưng rồi nên chỉ có thể đọc và viết bài ngắn ngắn được ở thời điểm này thôi.

Cheers!

PS: Thậm chí mọi người có tin là với chức năng Auditing trong phần mềm, có thể người sử dụng vào hẳn MS SQL (chứ ko phải xóa từ phần mềm) để xóa các bản ghi trong DB đi cũng có thể khôi phục lại được hoàn toàn hoặc truy tìm ra thủ phạm là ai thực hiện công việc đó. Tuy nhiên tính năng này hơi tốn tiền của (vì dữ liệu nó lớn lắm) nên ít sản phẩm tích hợp sẵn vào trong chương trình.
 
Lần chỉnh sửa cuối:
Anh ơi... Mình phải giã sử rằng chương trình tạo ra cho một người ko biết đi. Vì ko thể ép họ nhập liệu đúng yêu cầu dc. Mục đích cuối cùng vẫn là ngày 1 hoàn thiện chương trình hơn trước mà. Cái "giã sử" mà bạn ấy đưa ra cũng đáng đễ suy nghĩ lắm chứ!
Với anh hai2hai: Nếu có thể dc thì anh hướng dẩn cụ thể luôn đi. Chứ anh viết dài quá, em đọc nhức mắt mà chẳng hiểu gi
Hiii
Miss TT
 
thanhtri đã viết:
Anh ơi... Mình phải giã sử rằng chương trình tạo ra cho một người ko biết đi. Vì ko thể ép họ nhập liệu đúng yêu cầu dc. Mục đích cuối cùng vẫn là ngày 1 hoàn thiện chương trình hơn trước mà. Cái "giã sử" mà bạn ấy đưa ra cũng đáng đễ suy nghĩ lắm chứ!
Với anh hai2hai: Nếu có thể dc thì anh hướng dẩn cụ thể luôn đi. Chứ anh viết dài quá, em đọc nhức mắt mà chẳng hiểu gi
Hiii
Miss TT

Tạo ra cho một người không biết thì tạo làm gì hả em ??
Vậy thì gọi hướng dẫn sử dụng là cái gì nhỉ ??

Em có khi nào làm 1 File Excel cho một người không biết gì về M$ Office không nhỉ ???

Ở đây không có 1 giải pháp nào cụ thể cả, vì các TH xảy ra quá nhiều, không kể hết được. Ngay thủ công cũng khó có thể làm việc hết được.

VD với chuỗi : Air Light (156123) Foundation (#156 10(0001) thì biết lấy cái nào đây nhỉ ????

Anh hai2hai chỉ đưa ra khái niệm chung thôi.

Thân!
 
Theo tôi nghĩ khi lập trình thì ai cũng viết cách xử lý cái dữ liệu chuẩn trước. Rồi sau đó mới tìm cách sử lý các dữ liệu không chuẩn.
Như vậy sẽ có 2 giải pháp:
1. Làm sao để các dữ liệu nhập vào chỉ là những dữ liệu chuẩn
2. Làm sao để đuă dữ liệu không chuẩn về thành dữ liệu chuẩn

Như vậy cái khác nhau thủ tục xử lý ở giai đọan nào sẽ phù hợp với giai đọan đó thôi
 
VD với chuỗi : Air Light (156123) Foundation (#156 10(0001) thì biết lấy cái nào đây nhỉ ????

Anh hai2hai chỉ đưa ra khái niệm chung thôi.

5 phút để viết 1 cái code nhỏ nhỏ compiled rồi để trả lời Mr Okebab nhưng mạng chậm đến mức chả thể làm được gì. Bực phát điên người. Ngay cả cái Firefox giờ cũng dở chứng, ko cho sử dụng nút nào trên editor nên phải gõ cái tag manual vào. Nút attach thì ko thấy đâu. Loay hoay tiếng đồng hồ với internet trong khi phải làm cái gọi là "không phải là khái niệm chung chung". Nếu cứ tốc độ thế này thì chắc mai ko vào diễn đàn mất thôi. Mạng VDC này lởm nhất trong các loại mạng Internet được biết đến.

here, test it: http://www.uploadjar.com/405320
 
Lần chỉnh sửa cuối:
Anh Hiếu ơi. Em dùng từ "ko biết" có nghĩa là dành cho những người chậm hiểu đấy! Giã sử chỉ họ rồi mà họ cứ làm sai thì sao? Cũng phải nghĩ đến chuyện sai ở mức độ nào thì chấp nhận dc. Chẳng hạn giữa text và số có 2 khoảng trắng thì chương trình cũng nên "thông minh" và đoán ra dc chứ nhỉ... Rồi chẳng hạn quên đóng dấu ngoặc () , cái này có thể xãy ra lắm chứ.
Em chưa tìm ra dc giãi pháp nào tối ưu nhưng em thấy chương trình trên dtdd nó thừa sức làm việc này đấy. VD: có ai đó gữi em tin nhắn: "Số dt cua toi la 0982xxxxxx" thì nó tách lấy sô ra cái rụp, dù giữa text và số có bao nhiêu khoảng trắng cũng mặc kệ.
Anh Hiếu ơi, càng nghĩ thêm nhiều trường hợp có thể xãy ra thì càng làm cho chương trình hoàn thiện thêm mà. Còn nếu như mình có thể tạo dc chương trình cho cả người chưa biết gì về Microsoft cũng có thể dùng dc thì càng tốt chứ sao! Tóm lại "ĐƠN GIÃN VÀ HIỆU QUẢ, NHÌN SƠ CŨNG BIẾT" thì tuyệt! Chẵng phải đây cũng là 1 trong những tiêu chí của các hãng phần mềm đó sao?
Còn riêng với anh Hai2hai: anh có cách nào ko dùng code gì đó ko? Chứ người mới dùng Excel như em thì dù có đọc bài của anh cũng bằng ko
Hiiiiii
Miss TT
 
Chào Xuantham,

Đây là cái mà bạn đang cần.

Khi nhập tên và mã số ở cột D xong (bao nhiêu dòng không thành vấn đề), bấm nút tách tên thì XL sẽ tách tên hàng và mã số qua cột E & F.

Bạn tải cái file nầy về xài nha.

Mến
 

File đính kèm

  • Tach ma-ten.xls
    22.5 KB · Đọc: 50
Mình cũng gặp phải bài toán như của bạn và cách giải quyết của mình là dùng công thức chứ không dùng lập trình bạn xem thử file của mình nhé. Chúc bạn thành công
 

File đính kèm

  • Tach ma-ten.xls
    14.5 KB · Đọc: 32
giải pháp excell

Nếu mình dùng các Hàm hay Lenh cua NVSon thi neu chuỗii nay thi sao: AAAA-2/2-(2)-X-YYBBB-2/2-(1)-X-YY nếu muốn tách lấy: AAAA-2/2-(2)BBB -2/2-1(1) mà chỉ dùng 1 công thức cho 2 chuỗi đó thì làm sao? cùng công thức của NVSon, chưa chuẩn lắm, vậy giúp mình được ko?
 

File đính kèm

  • tach ma hang.xls
    16.5 KB · Đọc: 16
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom