Dò tìm tổng hợp số đa phương thức (2 người xem)

Liên hệ QC

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

vanduynguyen1983

Thành viên hoạt động
Tham gia
21/6/13
Bài viết
101
Được thích
8
Thân chào các anh chị diễn đàn !
Rất mong anh chị giúp em lập công thức hoặc viết VBA cái chương trình dò tìm phức tạp
này với cái này bữa giờ mình viết tay lâu quá
Cho mình trình bày đề tái của mình như sau. Hiện tại mình có 5 cột
Cột A chi là cột ghi chú , Cột B là cột Ký hiệu , cột C là mã tương ứng với cột B ,Cột D là cột dữ liệu đầu vào luôn có chữ cái đầu
Cột E là dữ liệu đầu ra luôn có 12 số 2 số đầu nó lấy từ cột C
còn 10 con số con lại nó lấy từ cột D thêm số 0 nếu cột D không đủ số , Mình cần nhất là dũ liệu đầu ra ở cột E bữa giờ mình làm
tay lâu quá rất mong sự giúp đỡ của các bạn . Mình có gởi file đính kèm và có ghi chú rất mong anh chị xem giúp
Cảm ơn anh chị quan tâm giúp đỡ
 

File đính kèm

MÌnh xin lỗi rồi mà ...

Xin lỗi hay không cũng vậy thôi. Điều bạn cần làm là đọc lại mấy câu hỏi của người khác cho kỹ, và tự đặt câu hỏi tại sao ngừoi ta hỏi vậy? xong giải thích rõ ràng từng bước.

Bài toán của bạn là hàm chiếu từ A sang B; y = f(x). Bạn làm việc quen cho nên nghĩ rằng chúng tự nhiên như vậy. Ngừoi khác thì bắt buộc phải nhỉn thấy tất cả các điều kiện của phép chiếu. Nếu lô gic không đủ thì chiếu sai.
 
Upvote 0
Mình xin đề nghị:

1./ BĐH nên khóa loạt bài đăng này, để tác giả có dịp đăng bài khác 1 cách thận trọng & chăm chút hơn;

2./ Các bạn chúng ta không vì vậy mà fật lòng vì công sức đã bỏ ra để đọc & trả lời trong loạt bài ở đây;

3./ . . . . . . Thân chào!

Tại sao phải khóa, khi nó không vi phạm nội quy gì cả.

Mở chủ đề mới, mà không móc nối những cái cũ (dù trình bày người hỏi có sáng hơn) thì có thể không bằng có móc nối các bài trên vào

Nhắn người hỏi: hãy ngồi xuống trau truốt câu hỏi, tự lường trước nếu làm tay nhập thường thì dựa vào đâu, các trường hợp xảy ra, rồi post lại file trình bày chi tiết (nhớ đọc lại toàn bộ các nội dung mọi người hỏi lại và khuyến nghị trên.
 
Upvote 0
[thongbao]Tại sao phải khóa, khi nó không vi phạm nội quy gì cả.[/thongbao]

Vấn đề là ở chỗ ni:

Đã hai chục bài rồi mà chưa đến đâu;

Ở đây, trong trường hợp đến bài 30 sẽ giải quyết xong. Vậy thị chỉ có 10/30 bài chất lượng mà thôi;

Người khác trong cộng đồng có tham khảo thì cũng tốn thời gian do bài loãng.

Mình đề nghị thà làm vậy (xóa đi làm lại) vì cộng đồng chúng ta là chủ iếu thôi; & khi ấy bản thân tác giả bài đăng cũng nên trân trọng với những người có nhã í giúp mình nhiều hơn.

Chứ tại thời điểm này, bản thân người đăng bài chưa có biểu hiện để thấy điều đó;
Chủ iếu là học vấn về Excel, nhưng cũng cần xây dựng nếp văn hóa cho mượt thêm!

Chúc vui!
 
Upvote 0
MÌnh xin bổ sung thêm thông tin chưa rõ ràng .
Mình xin trinh bày lại như sau:
Cột A chỉ là cột ghi chú ta không quan tâm . Ta có 4 cột cần quan tâm B,C,D,E . Cột B là cột có các chữ cái và mỗi hàng chữ cái
của cột B tương ứng với mã số ở cột C VD: hàng thứ 4 cột B có chữ là WET thì hàng thứ 4 cột C có số 3 ,giống như WET=3 vậy
Cột C,D là 2 cột luôn cố định . Cột D là dữ liệu đầu vào nó không theo thứ tự gì hết và nó luôn luôn có các chữ cái ở đầu sau đó tới số và chữ cái
đầu cột D luôn luôn tương ứng với cột B nhưng không biêt nó nằm
ở hàng nào của cột B , vậy ta dung ccong thức gì đê lấy chữ cái
của cột D đem so sánh với cột B tìm ra chữ cái giống nhau nằm ở hàng thứ mấy của cột B từ đó ta lấy mã tương ứng với cột C, nếu mã cột C là 1 thì ta thêm số 0 đằng trước số 1 neu mã cột C la 14 thi ok vì cột E luôn yêu cầu phải 2 số đầu, dấu chấm 4 số tiếp theo
4 số tiếp theo , 4 số tiếp theo và cột E luôn có 14 số VD:hàng 9 cột D dữ liệu đầu vào là W450x2450 vậy chữ cái W cột D được dò tìm
ở cột B và ta thấy chữ cái W ở cột B nằm ở hàng thứ 2 có mã tương ứng với cột C là số 1 vậy ở hàng 9 cột E cho ra kết quả 01.0450.2450.0000 tại sao phai 01 vì mã cua mình chỉ có số 1 thôi
nên ta thêm số 0 đăng trước ,0450 tai sao 0450 vì hàng 9 cột D mình có W450x2450 vậy 450 ta có 3 số chưa đủ vậy
ta thêm số 0 trước 450 nên ta có 0450, và 2450 vì nó có đủ 4 số nên ta không thêm bớt gì hết .4 số 0 cuôi ta thêm vào vì W450x450 hàng 9 cột D có 2 cặp số nên ta thêm cho đủ 3 cặp 4 số phía đàng sau mã
Mình đang tim đương link gởi lại file mà chưa được
 
Lần chỉnh sửa cuối:
Upvote 0
Nhận ra rồi xin lỗi tự nhiên người ta hiểu? Không giải thích thì ai biết gì mà tính:



Cần giải thích:
- Những chỗ đo đỏ lấy ở đâu ra?
- Những chỗ xanh xanh sẽ có tác dụng gì?
Mình xin lỗi cái 0001 đuôi minh nhập nhầm đúng là 0000
K700x200--1 thì cái gạch --1 bạn không cần tâm chi cần quan tâm K700x200 thôi vì K700x200--1 cũng giống như K700x200 cái --1 bạn loại nó ra
CÁ(50+63.5)x700 hoặc CÁ(63.5+63.5)x700 thì 23 la mã còn (50+63.5) và (63.5+63.5) xem như 0000.0000 số sau là 0700 thêm 0 trước 700 cho đủ 4 số
 
Upvote 0
màu xanh-màu xanh
màu đỏ-màu đỏ
???
Màuxanh CA(63.5+63.5) cái nào có (63.5+63.5) hoặc (50+63.5) thì nó luôn luôn cho ra .0000.0000
Màu đỏ
IC(100+100)x3210 cái nào khác (63.5+63.5) hoặc (50+63.5) thì ta lấy 100 thêm số 0 đằng trước cho đủ 4 số 0100.0100
VD:
IC(100+150)x210 cho kết quả 19.0100.0150.0210
 
Upvote 0
Nói đến file tại #1 & chỉ đề cập đến 2 kí số đầu của cột [E:E]

Mà cụ thể ta xét đến các dòng [37:39]

Tại cột [D] của các dòng này có các giá trị SIA(250+250)x250 , SIA(250+150)x290 & SIA(250+350)x270 tương ứng;

Theo như bạn nói, ta fải dò 2 kí tự SI của trị này trên cột [B:B]

Trong cột này có 2 dòng có trị đó;
Đó là dòng 17: SIDE | 16
& dòng 22: SIJ/SIA | 21
Sao bạn lại lấy số 21 mà không lấy số 16?
 
Upvote 0
Nói đến file tại #1 & chỉ đề cập đến 2 kí số đầu của cột [E:E]

Mà cụ thể ta xét đến các dòng [37:39]


Theo như bạn nói, ta fải dò 2 kí tự SI của trị này trên cột [B:B]

Trong cột này có 2 dòng có trị đó;
Đó là dòng 17: SIDE | 16
& dòng 22: SIJ/SIA | 21
Sao bạn lại lấy số 21 mà không lấy số 16?

Tại cột [D] của các dòng này có các giá trị SIA(250+250)x250 , SIA(250+150)x290 & SIA(250+350)x270 tương ứng;
Tại vì cột D có text là SIA (250+250)x250 vậy chữ SIA trùng text với cột B dòng 22 có text là SIA . nói chính xác hơn la lấy toàn bộ text cột D đem so sánh với cột B đẻ lấy mã tương ứng bên cột C
 
Upvote 0
Cái này K(100+100)x200, sao bạn xét là 12, không phải 11 vậy bạn (K là 11, K+ là 12)!!
 
Upvote 0
Cái này K(100+100)x200, sao bạn xét là 12, không phải 11 vậy bạn (K là 11, K+ là 12)!!

bài này để tác giả sửa lại và trình bày lại dữ liệu, không thể kiểu không nhất quán rồi đi xử lý mớ bòng bong đó

người hỏi cần chú ý
+ nên chèn cột trống giữa cột C và D - vì 2 cột cuối không liên quan theo dòng với 3 cột đầu, để chỉ làm rối
+ nên thống nhất kiểu là 1 hay 2 hay 3 chữ cái (số liệu đầu vào), cột Ký hiệu cũng nên độc lập ra không để có / như thế nữa,

đơn giản, khoa học cách bố trí dữ liệu thì sẽ nhàn cho công thức kết quả
 
Upvote 0
Cái này K(100+100)x200, sao bạn xét là 12, không phải 11 vậy bạn (K là 11, K+ là 12)!!

Cái này mình biết & có thể trả lời cho bạn nè:

/-(ễ có mở đóng ngoặt trong nhóm từ, thì tìm chữ cái trước ngoặt với thêm dấu cộng;
Trong trường hợp này, nhóm từ để đi tìm ở cột [C] sẽ fải là 'K+' (chứ không fải 'K' như mấy cái trước nữa) !$@!!
 
Upvote 0
bài này để tác giả sửa lại và trình bày lại dữ liệu, không thể kiểu không nhất quán rồi đi xử lý mớ bòng bong đó

người hỏi cần chú ý
+ nên thống nhất kiểu là 1 hay 2 hay 3 chữ cái (số liệu đầu vào)
Số liêu đầu vào mình lấy hết tấc cả text trước số và tấc cả text trước dấu ngoặc đem đi so sánh với cột B để tìm ra mã ký hiệu.Hay mình bỏ cột C đi mình làm dạng B=C VD: WS =02 , DS=07 như vậy lập công dể hơn không anh chị ,vì Cột B và cột C luôn cố định chữ cái và mã
 
Upvote 0
Mình xin tặng tác giả bài đăng macro & bức ảnh kết quả, tạm biệt!

PHP:
Option Explicit
Sub DuLieuDauRa()
 Dim Cls As Range, Arr()
 Dim Tmp As String, fC As String, DLRa As String
 Dim Rws As Long, J As Long
 Const Ch As String = "."
 
 Rws = [d2].CurrentRegion.Rows.Count
 Arr() = [b2].Resize(Rws).Value
 Application.ScreenUpdating = False
 For Each Cls In Range([d2], [d2].End(xlDown))
    Tmp = Cls.Value
    If Tmp = "" Then Exit For
    If IsNumeric(Mid(Tmp, 2, 1)) Then
        fC = Left(Tmp, 1)
    ElseIf Asc(Mid(Tmp, 2, 1)) < 65 Then
        fC = Left(Tmp, 1) & "+"
    Else
        fC = Left(Tmp, 2)
        If Asc(Mid(Tmp, 3, 1)) > 64 Then
            fC = fC & Mid(Tmp, 3, 1)
            If Asc(Mid(Tmp, 4, 1)) > 64 Then
                MsgBox "GPE.COM Xin Thua!"
            End If
        End If
    End If
    Tmp = Mid(Tmp, 1 + Len(fC), Len(Tmp))
    For J = 1 To UBound(Arr())
        DLRa = "'" & Right("0" & CStr(Cells(J + 1, "c").Value), 2) & Ch
        If Mid(Arr(J, 1), 1, Len(fC)) = fC Then
            Cls.Offset(, 1).Value = DLRa & DlDRa(Tmp)
            Exit For
        ElseIf Len(fC) >= 3 Then    '?'
        
        Else
        End If
    Next J
 Next Cls
 Application.ScreenUpdating = True
End Sub
Mã:
[SIZE=3][B]Function DlDRa(StrC As String) As String[/B][/SIZE]
 Const DN As String = ")":      Const Nh As String = "x"
 Dim VT1 As Byte, VT2 As Byte
 
 VT1 = InStr(StrC, DN)
 VT2 = InStr(StrC, "x")
 If VT1 Then
    DlDRa = "000.000." & Right("000" & Mid(StrC, VT2 + 1, 4), 4)
 Else
    DlDRa = Right("0" & Left(StrC, VT2 - 1), 4) & "." & Right("0" & Mid(StrC, VT2 + 1), 4) & ".0000"

 End If
[SIZE=3][B]End Function[/B][/SIZE]
 

File đính kèm

  • SL Dau Ra.JPG
    SL Dau Ra.JPG
    87.8 KB · Đọc: 18
Upvote 0
+ nên thống nhất kiểu là 1 hay 2 hay 3 chữ cái (số liệu đầu vào)
Số liêu đầu vào mình lấy hết tấc cả text trước số và tấc cả text trước dấu ngoặc đem đi so sánh với cột B để tìm ra mã ký hiệu.Hay mình bỏ cột C đi mình làm dạng B=C VD: WS =02 , DS=07 như vậy lập công dể hơn không anh chị ,vì Cột B và cột C luôn cố định chữ cái và mã

Bạn xem kết quả trong file, những ô tô màu nếu sai bạn phải giải thích rõ là "đúng nó như thế nào, vì sao lạiphải như thế"
 

File đính kèm

Upvote 0
Bạn xem kết quả trong file, những ô tô màu nếu sai bạn phải giải thích rõ là "đúng nó như thế nào, vì sao lạiphải như thế"
Cảm ơn bạn rất nhiều . Để mình copy past thử xem nó sai chổ nào không , tại nó nhiều số quá làm mình rối không biêt sai chổ nào
 
Upvote 0
Đây là đề tài có thể thử luyện nghề RegEx. Quý vị nào thích thử thì tôi gợi ý:

Chuỗi dữ liệu gồm 3 phần
phần 1 gồm các ký tự không phải là số và dấu ngoặc mở d và \(
phần 2 gồm các ký tự số d, hoặc nhóm ký tự nằm giữa 2 ngoặc \(.*\)
phần 3 gồm các lý tự số đi sau ký tự x

Chuỗi mẫu của bạn cần bắt (capture) 3 phần đó.
Sau khi có 3 phần đó rồi thì diễn chúng ra và gộp thành chuỗi kết quả không có gì khó.
 
Upvote 0
Web KT

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

Back
Top Bottom