Cách dò tìm ký tự trong chuỗi??? (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

dongsongxanh2002

Thành viên mới
Tham gia
15/6/12
Bài viết
13
Được thích
1
Mình có các cột như sau:

Cột A1: Nhập mã cuồn giấy
Cột A2: Xuất ra loại giấy chạy tương ứng

VD: Mã cuồn --> Loại giấy
2M1919 --> PT
2YBB1856 --> DL
1X1123 --> X
2XTL1256 --> CA
2N1568 --> PT
10KBB235 --> TL
2TXD1256 --> DUP
1TTL2368 --> DUP
2DL21568 --> GDL

Ở cột Loại giấy mình muốn sử dụng công thức, chỉ cần nhập dữ liệu ở cột Mã cuồn có các ký tự sau là sẽ cột Loại giấy tự cho ra loại giấy tương ứng:
M --> PT
N --> PT
X --> X
XTL --> CA
TXD --> DUP
TTL --> DUP
YBB --> DL
KBB --> TL
DL2 --> GDL​

Các bạn giúp mình với!!!!!!!!
 
Bạn gửi file lên đi.

- Bạn đã liệt kê hết các mã chưa?

- Các số phía trước các chữ là bao nhiêu con số? VD: 10KBB235 (2 ký số) và 2M1919 (1 ký số)

- Cấu trúc mã có nguyên tắc nào không?
 
Lần chỉnh sửa cuối:
Mình gửi file kèm theo.

Các ký số trước và sau các mã không cố định, tùy theo nhà sản xuất giấy.

Các mã hiện tại mình đã liệt kê hết, nhưng sau này có thể sẽ có thêm các mã khác tùy thuộc vào nhà cung cấp giấy.
 

File đính kèm

Mình gửi file kèm theo.

Các ký số trước và sau các mã không cố định, tùy theo nhà sản xuất giấy.

Các mã hiện tại mình đã liệt kê hết, nhưng sau này có thể sẽ có thêm các mã khác tùy thuộc vào nhà cung cấp giấy.
Bạn post bài vào box HÀM VÀ CÔNG THỨC EXCEL, chứng tỏ bạn muốn giải quyết bằng công thức, đúng không? Vậy xin hỏi: Công thức sẽ đặt ở cell nào?
Còn như bạn muốn nhập liệu tại cột B (bằng các mã viết tắt) rồi ra kết quả luôn tại cột B thì chỉ có cách lập trình VBA thôi, không có công thức nào có thể làm được điều này cả
 
Mình gửi file kèm theo.

Các ký số trước và sau các mã không cố định, tùy theo nhà sản xuất giấy.

Các mã hiện tại mình đã liệt kê hết, nhưng sau này có thể sẽ có thêm các mã khác tùy thuộc vào nhà cung cấp giấy.
Nếu chịu tạo 1 bảng dò, dùng hàm tự tạo thì xem thử file này.
 

File đính kèm

Mình châm chân rồi. Thôi cứ up lên góp bài. Bên sheet DK nếu có bổ sung các điều kiện thì đem dk ít ký tự của cột A lên phía trên nha, nếu không nó chạy loạn cào cào đấy
 

File đính kèm

Lần chỉnh sửa cuối:
Mình đã xem hai file của Ba te va Quanghai1969. Nhưng nó không ra được kết quả mình cần.

Công thức sẽ đặt ở cột B. KHi nhập dữ liệu vào cột A (Mã cuồn) thì ở cột B sẽ cho ra các loại giấy tương ứng với từng ký tự M, N, YBB, DL2, KBB, X, XTL, TXD, TTL được nhập ở cột A.

Hiện tại mình đang sử dụng công thức:

=IF(ISERR(FIND("KBB",$A6)),IF(ISERR(FIND("TXD",$A6)),IF(ISERR(FIND("YBB",$A6)),IF(ISERR(FIND("DL2",$A6)),IF(ISERR(FIND("M",$A6)),IF(ISERR(FIND("X",$A6)),"","X"),"PT"),"GDL"),"DL"),"DUP"),"TL")

Công thức này nó cho ra kết quả như mình cần, nhưng nó chỉ có tối đa 6 mã, không thêm được nữa.

Mình muốn sử dụng hàm Vlookup để tham chiếu nguồn dữ liệu, để sau này có thêm mã mới thì vẫn không thay đổi công thức, chỉ cần thay đổi vùng dữ liệu tham chiếu là được.
 
M --> PT
N --> PT
X --> X
XTL --> CA
TXD --> DUP
TTL --> DUP
YBB --> DL
KBB --> TL
DL2 --> GDL

nếu không có phần số trong viết tắt (như DL2 có số 2), thì có thể sao bạn không thêm cột phụ trước bảng tra cột này chưa các VIẾT TẮT MÃ (tạm gọi là MÃ NGẮN) đó, rồi tra cứu theo MÃ NGẮN này -- dĩ nhiên lưu ý MÃ NGẮN phải là duy nhất cho mỗi mã hàng

Có phần số thêm sẽ phức tập lên nhiều - vậy bạn xem lại có thể không có số (ví như DL2 chỉ để DL), thì sẽ có giải pháp
 
Mình đã xem hai file của Ba te va Quanghai1969. Nhưng nó không ra được kết quả mình cần.

Công thức sẽ đặt ở cột B. KHi nhập dữ liệu vào cột A (Mã cuồn) thì ở cột B sẽ cho ra các loại giấy tương ứng với từng ký tự M, N, YBB, DL2, KBB, X, XTL, TXD, TTL được nhập ở cột A.

Hiện tại mình đang sử dụng công thức:

=IF(ISERR(FIND("KBB",$A6)),IF(ISERR(FIND("TXD",$A6)),IF(ISERR(FIND("YBB",$A6)),IF(ISERR(FIND("DL2",$A6)),IF(ISERR(FIND("M",$A6)),IF(ISERR(FIND("X",$A6)),"","X"),"PT"),"GDL"),"DL"),"DUP"),"TL")

Công thức này nó cho ra kết quả như mình cần, nhưng nó chỉ có tối đa 6 mã, không thêm được nữa.

Mình muốn sử dụng hàm Vlookup để tham chiếu nguồn dữ liệu, để sau này có thêm mã mới thì vẫn không thay đổi công thức, chỉ cần thay đổi vùng dữ liệu tham chiếu là được.
Híc! Hình như bạn không biết xài hàm tự tạo?
Vậy thì bài #5 "tèo" rồi.
Khi nhập vào cột A thì kết quả cột B như vầy không phải sao?
|
A​
|
B​
|
5​
|
2x345​
|
X​
|
6​
|
7N654A​
|
PT​
|
7​
| | |
8​
| | |
9​
| | |
 
Lần chỉnh sửa cuối:
Bạn dùng công thức sau cho ô B1 rồi fill xuống, bạn có thể thêm bao nhiêu cặp mã cũng được

=CHOOSE(MATCH(A1,{"X","M","DL2","YBB","TXD","KBB"},0),"X","PT","GDL","DL","DUP","TL")
 
Mình đã xem hai file của Ba te va Quanghai1969. Nhưng nó không ra được kết quả mình cần.

Công thức sẽ đặt ở cột B. KHi nhập dữ liệu vào cột A (Mã cuồn) thì ở cột B sẽ cho ra các loại giấy tương ứng với từng ký tự M, N, YBB, DL2, KBB, X, XTL, TXD, TTL được nhập ở cột
.

Thật tiếc thay, đáng tiếc thay. Có lẽ bạn không thích xài VBA. Bác nào xem hộ bài mình có ra kết quả không vậy. Mới tập xài mảng nên không biết thế nào nữa
 
Mình không biết sử dụng hàm tự tạo. Bạn Ba Tê có thể chỉ giúp mình không?

Mình sử dụng công thức này của bạn Seeland thì kết quả cho ra là #N/A.

=CHOOSE(MATCH(A1,{"X","M","DL2","YBB","TXD","KBB"} ,0),"X","PT","GDL","DL","DUP","TL")

Mình cũng không biết sử dụng VBA luôn. Hihihi!!!

Về các hàm và công thức trong excel mình cũng không rành cho lắm. Mong các bạn chỉ giúp mình với.
 
Mình không biết sử dụng hàm tự tạo. Bạn Ba Tê có thể chỉ giúp mình không?

Mình sử dụng công thức này của bạn Seeland thì kết quả cho ra là #N/A.

=CHOOSE(MATCH(A1,{"X","M","DL2","YBB","TXD","KBB"} ,0),"X","PT","GDL","DL","DUP","TL")

Mình cũng không biết sử dụng VBA luôn. Hihihi!!!

Về các hàm và công thức trong excel mình cũng không rành cho lắm. Mong các bạn chỉ giúp mình với.
1. Mở Excel - Tools - Macro - Security... Chọn mức Medium - OK
2. Đóng Excel.
3. Mở File ở bài #5, Gặp hộp thoại - Chọn Enable Macros.
Nhập mã gì đó vào cột A - Kết quả ở cột B.
--------------
Ấn Alt-F11 sẽ thấy cái này:
PHP:
Public Function Loai(Rng As Range, Bang As Range) As String
Dim Tem As String, L As Long, I As Long, J As Long, Arr(), Kq As String, Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
    L = Len(Rng): Arr = Bang.Value
For I = 1 To UBound(Arr, 1)
    Dic.Add (UCase(Arr(I, 1))), UCase(Arr(I, 2))
Next I
        For I = 1 To L
            If Not IsNumeric(Mid(Rng, I, 1)) Then
                Tem = Tem & UCase(Mid(Rng, I, 1))
            End If
                If Dic.exists(Tem) Then Kq = Dic.Item(Tem)
        Next I
Loai = Kq
Set Dic = Nothing
End Function
Nó là hàm tự viết, hổng phải của Anh Bill.
Cấu trúc hàm:
= Loại(ô dữ liệu, Bảng dò)
Híc!
 
Lần chỉnh sửa cuối:
Mình không biết sử dụng hàm tự tạo. Bạn Ba Tê có thể chỉ giúp mình không?

Mình sử dụng công thức này của bạn Seeland thì kết quả cho ra là #N/A.

=CHOOSE(MATCH(A1,{"X","M","DL2","YBB","TXD","KBB"} ,0),"X","PT","GDL","DL","DUP","TL")

Mình cũng không biết sử dụng VBA luôn. Hihihi!!!
Về các hàm và công thức trong excel mình cũng không rành cho lắm. Mong các bạn chỉ giúp mình với.

bàn phải tách từ mã dài về mã ngắn trước khi dùng CHOOSE hay VLOOKUP ....
làm được

NHƯNG, hình như bạn làm ngược đã quy định mã (mã ngắn) sao lại còn gõ vào mã cuộn loạn lên thế, thêm số thêm ký tự sau nữa???
Cách này là cách làm ngược,
Nên Gõ mã ngắn vào --> rồi tự động tra ra loại giấy, còn mã cuộn thì thêm theo quy luật nào đó
 
Híc! Hình như bạn không biết xài hàm tự tạo?
Vậy thì bài #5 "tèo" rồi.
Khi nhập vào cột A thì kết quả cột B như vầy không phải sao?
|
A​
|
B​
|
5​
|
2x345​
|
X​
|
6​
|
7N654A​
|
PT​
|
7​
| | |
8​
| | |
9​
| | |

Nếu gõ ở cột A là 2X256TL thì kết quả bị sai bác bate ah
chưa check kỹ nhưng rõ là sai giá trị đó
 
Bạn chỉ cách tạo Macro luôn đi, để mình tạo ra cho file báo cáo của mình.

Mã cuồn gồm có số và ký tự được viết chung như thế, mình phải nhập đầy đủ. Nó không có một nguyên tắc chung nào hết. Chỉ cân cứ vào ký tự phía trước thì cho ra loại giấy, ký tự ở phía sau cùng không quan trọng.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Mã cuồn gồm có số và ký tự được viết chung như thế, mình phải nhập đầy đủ. Nó không có một nguyên tắc chung nào hết. Chỉ cân cứ vào ký tự phía trước thì cho ra loại giấy, ký tự ở phía sau cùng không quan trọng.

vẫn muốn thích ngược thế thì theo giải pháp này

dùng NAME :
- 2 name a_kt và a_ktk - xem kỹ trong file - để tách MÃ NGẮN ra
- Vlookup để tra bảng theo mã tìm được từ name a_ktk (bảng ở cột H I -- bạn có thể thay đổi nó thành name động được - chắc cái này nằm trong khả năng)
// có thể dùng hàm khác để tra bảng hay tra trực tiếp như CHoose trên của bạn - bạn thích thì thay đổi

-xem công thức tại cột B, và vùng xám - tạm thử các trường hợp đặc biệt

lưu ý name liên kết tham chiếu (link) tới ô data ngay bên trái (cùng dòng) nó - nếu thích chỗ khác thì thay đổi tham chiếu tương ứng trong name a_kt

chưa có điều kiện kiểm tra hết, - bạn kiểm tra kỹ và đọc kỹ những lưu ý trước khi ứng dụng
 

File đính kèm

Nếu gõ ở cột A là 2X256TL thì kết quả bị sai bác bate ah
chưa check kỹ nhưng rõ là sai giá trị đó
Đúng là dữ liệu không có quy luật gì cả làm loạn cả lên.
Chỉnh Code lại một chút hy vọng khá hơn:
PHP:
Public Function Loai(Rng As Range, Bang As Range) As String
Dim Tem As String, L As Long, I As Long, J As Long, Arr(), Dic As Object
Set Dic = CreateObject("Scripting.Dictionary")
    L = Len(Rng): Arr = Bang.Value
For I = 1 To UBound(Arr, 1)
    Dic.Add (UCase(Arr(I, 1))), UCase(Arr(I, 2))
Next I
        For I = 1 To L
            If Not IsNumeric(Mid(Rng, I, 1)) Then
                J = J + 1
                Tem = Tem & UCase(Mid(Rng, I, 1))
            Else
                If J >= 1 Then Exit For
            End If
        Next I
    If Dic.exists(Tem) Then Loai = Dic.Item(Tem)
Set Dic = Nothing
End Function
|
A​
|
B​
|
5​
|
2X256TL​
|
X​
|
6​
|
2X2031T​
|
X​
|
7​
|
2X1293L​
|
X​
|
8​
|
2X1736​
|
X​
|
9​
|
2KBB1158​
|
TL​
|
10​
|
2M2471​
|
PT​
|
11​
|
2KBB2451A​
|
TL​
|
 
vẫn muốn thích ngược thế thì theo giải pháp này

dùng NAME :
- 2 name a_kt và a_ktk - xem kỹ trong file - để tách MÃ NGẮN ra
- Vlookup để tra bảng theo mã tìm được từ name a_ktk (bảng ở cột H I -- bạn có thể thay đổi nó thành name động được - chắc cái này nằm trong khả năng)
// có thể dùng hàm khác để tra bảng hay tra trực tiếp như CHoose trên của bạn - bạn thích thì thay đổi

-xem công thức tại cột B, và vùng xám - tạm thử các trường hợp đặc biệt

lưu ý name liên kết tham chiếu (link) tới ô data ngay bên trái (cùng dòng) nó - nếu thích chỗ khác thì thay đổi tham chiếu tương ứng trong name a_kt

chưa có điều kiện kiểm tra hết, - bạn kiểm tra kỹ và đọc kỹ những lưu ý trước khi ứng dụng
hàm a_kt và a_ktk là gì vậy ban?
 
Web KT

Bài viết mới nhất

Back
Top Bottom