Lọc thông tin của linh kiện điện tử

  • Thread starter Thread starter th7
  • Ngày gửi Ngày gửi
Liên hệ QC

th7

Thành viên thường trực
Tham gia
3/3/15
Bài viết
215
Được thích
52
Giới tính
Nam
Chào các Bạn,
Mình cần lấy các thông tin của linh kiện theo một số quy tắc cho từng loại linh kiện trong một chuỗi mô tả của linh kiện đó.
Do dữ liệu rất là nhiều và có tính chất lặp lại nên mình lấy các chuỗi đại diện như trong tập tin đính kèm,
Nhờ các Bạn hỗ trợ mình công thức để xử lý dữ liệu đó.
1648097517450.png
Cảm ơn!
 

File đính kèm

Chào các Bạn,
Mình cần lấy các thông tin của linh kiện theo một số quy tắc cho từng loại linh kiện trong một chuỗi mô tả của linh kiện đó.
Do dữ liệu rất là nhiều và có tính chất lặp lại nên mình lấy các chuỗi đại diện như trong tập tin đính kèm,
Nhờ các Bạn hỗ trợ mình công thức để xử lý dữ liệu đó.
Cảm ơn!
Làm bằng VBA được không?
 
  • Yêu thích
Reactions: th7
Chào các Bạn,
Mình cần lấy các thông tin của linh kiện theo một số quy tắc cho từng loại linh kiện trong một chuỗi mô tả của linh kiện đó.
Do dữ liệu rất là nhiều và có tính chất lặp lại nên mình lấy các chuỗi đại diện như trong tập tin đính kèm,
Nhờ các Bạn hỗ trợ mình công thức để xử lý dữ liệu đó.
View attachment 273512
Cảm ơn!
Công thức hơi dài, nhưng hy vọng là giúp được bác.
 

File đính kèm

Công thức hơi dài, nhưng hy vọng là giúp được bác.
Chào Bạn htin1997,
Cột C là mình đã tự lấy ra bằng tay nên khi mình "&" với cột C thì vẫn chưa giải quyết được vấn đề bạn ơi, mình cũng có làm nhưng mà đang bị rối,
Bạn HUONGHCKT có gợi ý làm bằng VBA, nên để mình gửi tập tin chi tiết hơn nữa và một số các bước nếu kết hợp bằng VBA có thể giải quyết được vấn đề nhanh hơn.
Cảm ơn Bạn.
 

File đính kèm

Hình như đơn vị chưa đủ dữ kiện bác ơi, những dòng dưới dùng có ngoại lệ.
Cho dù có dùng công thức hay vba thì bài này bắt buộc phải đủ điều kiện mới thực hiện được, chứ ví dụ không hết sau này cứ đi sửa là nhọc phết đấy.
 
@Thớt:
Bạn cần ghi rõ là:
- Dữ liệu ban đầu chỉ có duy nhất cột A mà thôi.
- Kết quả mong muốn là cột D.

Cột B, C chỉ là diễn giải trung gian để hiểu cách thức lấy kết quả, không hề có trong dữ liệu ban đầu.

Xem mấy bài trên là biết họ không rành về linh kiện điện tử, tưởng cột B, C có rồi.
 
Nhìn công thức bài #6 ngán hơn ăn cơm nếp nhão. Dành thời gian viết cái UDF, nhét tất cả điều kiện vào trong nó.

Chỉ cần nhập: = TenLinhKien(A2) là có kết quả.

.
 

Tên linh kiện là ở cột A rồi.

Ví dụ: RESISTOR 63.4K OHM 1% 0805 SMD
Nghĩa là: Linh kiện điện trở có giá trị trở kháng là 63.4 ngàn Ohm, sai số trở kháng 1%, kích thước dài x rộng = 0.08 inches x 0.05 inches, loại linh kiện dán (dán lên mặt tấm PCB).

Cái ở cột E có thể gọi là Kí hiệu, tên rút gọn gì đó.
 
Chào các Bạn,
Mình cần lấy các thông tin của linh kiện theo một số quy tắc cho từng loại linh kiện trong một chuỗi mô tả của linh kiện đó.
Do dữ liệu rất là nhiều và có tính chất lặp lại nên mình lấy các chuỗi đại diện như trong tập tin đính kèm,
Nhờ các Bạn hỗ trợ mình công thức để xử lý dữ liệu đó.
View attachment 273512
Cảm ơn!
Dùng hàm tự tạo
Mã:
Function MaLinhKien(ByVal str As String) As String
  Dim S, aUni, tmp$, N&, j&, c&
  If InStr(1, str, "INDUCTOR") Then
    aUni = Array("UH", "MH")
    For j = 0 To 1
      N = InStr(1, str, aUni(j))
      If N > 0 Then
        S = Split(Mid(str, 1, N + 1), " ")
        MaLinhKien = "IND " & S(UBound(S))
        Exit Function
      End If
    Next j
  ElseIf InStr(1, str, "DIODE") Then
    S = Split(str, " ")
    MaLinhKien = "D " & S(UBound(S))
    Exit Function
  ElseIf InStr(1, str, "RES") Then
    S = Split(str, " ")
    For c = 0 To UBound(S)
      tmp = Right(S(c), 1)
      If tmp = "K" Or tmp = "M" Then
        If IsNumeric(Mid(S(c), Len(S(c)) - 1, 1)) Then
          MaLinhKien = "R " & S(c)
          Exit Function
        End If
      ElseIf c < UBound(S) Then
        If S(c + 1) = "OHM" Then
          MaLinhKien = "R " & S(c) & "R" '*****
          Exit Function
        End If
      End If
    Next c
  ElseIf InStr(1, str, "SOT") Or InStr(1, str, "TRANS") Then
    S = Split(str, " ")
    MaLinhKien = "T " & S(UBound(S))
    Exit Function
  ElseIf InStr(1, str, "VARISTOR") Then
    S = Split(str, " ")
    For c = 0 To UBound(S)
      If Right(S(c), 1) = "V" Then
        If IsNumeric(Mid(S(c), Len(S(c)) - 1, 1)) Then
          MaLinhKien = "VAR " & S(c)
          Exit Function
        End If
      End If
    Next c
  Else
    aUni = Array("UF", "PF", "NF")
    str = "Z " & str
    For j = 0 To 2
      N = InStr(1, str, aUni(j))
      If N > 0 Then
        S = Split(Mid(str, 1, N + 1), " ")
        tmp = S(UBound(S))
        For c = UBound(S) - 1 To 0 Step -1
          If IsNumeric(S(c)) Or S(c) = "-" Then tmp = S(c) & " " & tmp Else Exit For
        Next
        MaLinhKien = "C " & tmp
        Exit Function
      End If
    Next j
  End If
End Function
Có thể nhập công thức trực tiếp trên sheet hoặc chạy sub Main lấy giá trị kết quả
Mã:
Sub Main()
  Dim sArr(), res$(), sRow&, i&
  With Sheets("Sheet6")
    sArr = .Range("A2", .Range("A999999").End(xlUp)).Value
    sRow = UBound(sArr)
    ReDim res(1 To sRow, 1 To 1)
    For i = 1 To sRow
      res(i, 1) = MaLinhKien(sArr(i, 1))
    Next i
    .Range("C2").Resize(sRow) = res
  End With
End Sub
 

File đính kèm

GPE vừa là nơi tìm ra giải pháp, vừa là nơi hoạt động của các nhà thám tử. ;)
 
Làm bằng VBA được không?
Chào Bạn HUONGHCKT,
Từ hôm bạn nói có sử dụng VBA được không, mình đã lấy hết dữ liệu lại và mô tả lại cách lấy dữ liệu để phù hợp hơn với công việc,
Mình vừa thấy bài của Bạn đăng dựa theo mong muốn của bài #1, mình sẽ xem bài của Bạn để chỉnh sửa thêm.
Các Bạn khác có hỏi nêu cụ thể hơn nên mình có mô tả chi tiết hơn, mình lỡ đưa ra rồi, nên mình vẫn gửi lên nha, mình để chi tiết trong tập tin đính kèm.
(Mình chia sẻ thêm là mình đang làm chương trình cho máy gắn linh kiện, mình cần tạo một Database của linh kiện, dựa theo tên part và tên mô tả, việc mình trích xuất các thông tin cần lấy kết hợp với part linh kiện quan trọng và sẽ cố định cái tên này để làm Database)
Cảm ơn.
 

File đính kèm

Dùng hàm tự tạo
Mã:
Function MaLinhKien(ByVal str As String) As String
  Dim S, aUni, tmp$, N&, j&, c&
  If InStr(1, str, "INDUCTOR") Then
    aUni = Array("UH", "MH")
    For j = 0 To 1
      N = InStr(1, str, aUni(j))
      If N > 0 Then
        S = Split(Mid(str, 1, N + 1), " ")
        MaLinhKien = "IND " & S(UBound(S))
        Exit Function
      End If
    Next j
  ElseIf InStr(1, str, "DIODE") Then
    S = Split(str, " ")
    MaLinhKien = "D " & S(UBound(S))
    Exit Function
  ElseIf InStr(1, str, "RES") Then
    S = Split(str, " ")
    For c = 0 To UBound(S)
      tmp = Right(S(c), 1)
      If tmp = "K" Or tmp = "M" Then
        If IsNumeric(Mid(S(c), Len(S(c)) - 1, 1)) Then
          MaLinhKien = "R " & S(c)
          Exit Function
        End If
      ElseIf c < UBound(S) Then
        If S(c + 1) = "OHM" Then
          MaLinhKien = "R " & S(c) & "R" '*****
          Exit Function
        End If
      End If
    Next c
  ElseIf InStr(1, str, "SOT") Or InStr(1, str, "TRANS") Then
    S = Split(str, " ")
    MaLinhKien = "T " & S(UBound(S))
    Exit Function
  ElseIf InStr(1, str, "VARISTOR") Then
    S = Split(str, " ")
    For c = 0 To UBound(S)
      If Right(S(c), 1) = "V" Then
        If IsNumeric(Mid(S(c), Len(S(c)) - 1, 1)) Then
          MaLinhKien = "VAR " & S(c)
          Exit Function
        End If
      End If
    Next c
  Else
    aUni = Array("UF", "PF", "NF")
    str = "Z " & str
    For j = 0 To 2
      N = InStr(1, str, aUni(j))
      If N > 0 Then
        S = Split(Mid(str, 1, N + 1), " ")
        tmp = S(UBound(S))
        For c = UBound(S) - 1 To 0 Step -1
          If IsNumeric(S(c)) Or S(c) = "-" Then tmp = S(c) & " " & tmp Else Exit For
        Next
        MaLinhKien = "C " & tmp
        Exit Function
      End If
    Next j
  End If
End Function
Có thể nhập công thức trực tiếp trên sheet hoặc chạy sub Main lấy giá trị kết quả
Mã:
Sub Main()
  Dim sArr(), res$(), sRow&, i&
  With Sheets("Sheet6")
    sArr = .Range("A2", .Range("A999999").End(xlUp)).Value
    sRow = UBound(sArr)
    ReDim res(1 To sRow, 1 To 1)
    For i = 1 To sRow
      res(i, 1) = MaLinhKien(sArr(i, 1))
    Next i
    .Range("C2").Resize(sRow) = res
  End With
End Sub
Em chào Anh HieuCD,
Em cảm ơn CODE của Anh nha, kết quả như mong đợi của bài #1 ạ.
 
Chào Bạn HUONGHCKT,
Từ hôm bạn nói có sử dụng VBA được không, mình đã lấy hết dữ liệu lại và mô tả lại cách lấy dữ liệu để phù hợp hơn với công việc,
Mình vừa thấy bài của Bạn đăng dựa theo mong muốn của bài #1, mình sẽ xem bài của Bạn để chỉnh sửa thêm.
Các Bạn khác có hỏi nêu cụ thể hơn nên mình có mô tả chi tiết hơn, mình lỡ đưa ra rồi, nên mình vẫn gửi lên nha, mình để chi tiết trong tập tin đính kèm.
(Mình chia sẻ thêm là mình đang làm chương trình cho máy gắn linh kiện, mình cần tạo một Database của linh kiện, dựa theo tên part và tên mô tả, việc mình trích xuất các thông tin cần lấy kết hợp với part linh kiện quan trọng và sẽ cố định cái tên này để làm Database)
Cảm ơn.
Ai có hiểu được bạn đó muốn gì thì thông não cho tôi với, chứ thực sự là tôi căng não ra để hiểu bạn muốn gì mà vẫn không thể biết được?
Bạn phải mô tả kỹ đóng gói linh kiện thì lấy dữ liệu của Dòng nào cột nào? tiêu chí nào để lấy? lấy những gì? ... lấy được kết quả rồi thì để vào đâu? Làm thủ công vài chục trường hợp tiêu biểu? Làm chương trình cho máy gắn linh kiện mà mô tả thì tù mù thế này thì code sao nổi===> máy sao hiểu được để chạy đúng.
Từ chỗ rõ ràng, dành mạch như vậy thì có thể sẽ có nhiều người họ biết họ code cho bạn, hoặc họ có thể sửa code khi có code sai hướng.
 
  • Yêu thích
Reactions: th7
Ai có hiểu được bạn đó muốn gì

Dễ hiểu vậy mà bác.
----
Từ thông tin mô tả chi tiết của linh kiện (bên sheet Data)
tạo thành mã rút gọn, với cấu trúc
[ Nhận dạng phụ cho linh kiện Capacitor ]+ Tên kí tự đại diện linh kiện + [Giá trị của linh kiện (chỉ áp dụng cho Resistor và Capacitor, Inductor, Varistor)] + Đóng gói linh kiện.

Tức là:
* Nhận dạng phụ cho linh kiện Capacitor: The mô tả cột A:B
* Tên kí tự đại diện linh kiện: Theo mô tả cột C: D
* Giá trị của linh kiện: Theo mô tả ở file bài #1 (ở cột C và cột F)
* Đóng gói linh kiện: Theo mô tả cột E:H
+ Tất cả căn cứ vào thông tin mô tả chi tiết của linh kiện đã cho.
+ Ngoặc vuông [ ] không bắt buộc phải có.

------
@Thớt: Kiểm tra lại mấy chỗ có phải nhầm nhọt gì không?

1/ Màu vàng

1648201314288.png

2/ Inductor -> IND, vậy sao ví dụ lại là IN?

1648201374123.png
 
Dễ hiểu vậy mà bác.
----
Từ thông tin mô tả chi tiết của linh kiện (bên sheet Data)
tạo thành mã rút gọn, với cấu trúc
[ Nhận dạng phụ cho linh kiện Capacitor ]+ Tên kí tự đại diện linh kiện + [Giá trị của linh kiện (chỉ áp dụng cho Resistor và Capacitor, Inductor, Varistor)] + Đóng gói linh kiện.
Cảm ơn anh đã xem bài.
Như tôi đã trình bày là : Tôi muốn bạn ấy( chủ thớt) phân tích rõ cái kết quả mong muốn ấy có được từ đâu? Ví dụ: mã IC16MSOP được cấu thành từ đâu ở Sheet DATA, cách thức tìm ra nó để lấy? Lấy được rồi thì ghi lại các kết quả ấy vào đâu?
Như bài #1 thì .0022UF 50V SM1206 10% sẽ được mổ xẻ là
.0022UF=C
50V=??
SM=??
1260=thấy có trong E7 nghĩa là gì?
10% =là trị số gì?
 
Dễ hiểu vậy mà bác.
----
Từ thông tin mô tả chi tiết của linh kiện (bên sheet Data)
tạo thành mã rút gọn, với cấu trúc
[ Nhận dạng phụ cho linh kiện Capacitor ]+ Tên kí tự đại diện linh kiện + [Giá trị của linh kiện (chỉ áp dụng cho Resistor và Capacitor, Inductor, Varistor)] + Đóng gói linh kiện.

Tức là:
* Nhận dạng phụ cho linh kiện Capacitor: The mô tả cột A:B
* Tên kí tự đại diện linh kiện: Theo mô tả cột C: D
* Giá trị của linh kiện: Theo mô tả ở file bài #1 (ở cột C và cột F)
* Đóng gói linh kiện: Theo mô tả cột E:H
+ Tất cả căn cứ vào thông tin mô tả chi tiết của linh kiện đã cho.
+ Ngoặc vuông [ ] không bắt buộc phải có.

------
@Thớt: Kiểm tra lại mấy chỗ có phải nhầm nhọt gì không?

1/ Màu vàng

View attachment 273562

2/ Inductor -> IND, vậy sao ví dụ lại là IN?

View attachment 273563
Chào Bạn befaint,
Màu vàng mình quy định nó là ALU luôn Bạn, còn chỗ IND là mình ghi thiếu chữ D.
Các diễn giải của ban hoàn toàn đúng rồi Bạn ah.
Cảm ơn Bạn.
 
Cảm ơn anh đã xem bài.
Như tôi đã trình bày là : Tôi muốn bạn ấy( chủ thớt) phân tích rõ cái kết quả mong muốn ấy có được từ đâu? Ví dụ: mã IC16MSOP được cấu thành từ đâu ở Sheet DATA, cách thức tìm ra nó để lấy? Lấy được rồi thì ghi lại các kết quả ấy vào đâu?
Như bài #1 thì .0022UF 50V SM1206 10% sẽ được mổ xẻ là
.0022UF=C
50V=??
SM=??
1260=thấy có trong E7 nghĩa là gì?
10% =là trị số gì?
Chào bạn HUONGHCKT,
Mình diễn giải thêm thông tin:
Dữ liệu mình đưa là các linh kiện SMD (linh kiện dán bề mặt)
Các linh kiện Điện trở, tụ điện thì sẽ được đóng gói theo dạng băng (mình hay gọi là Reel) các linh kiện này thường có kích thước hình chữ nhật nên sẽ có một loại đóng gói cho nó, các con số 0201, 0805, 1206, 2512,..nó là mô tả kích thước như hình dưới,
1648284151511.png
Thường thì hơn 95% linh kiện tụ điện (CAP) sẽ có mô tả chữ CAPACITOR hoặc CAP, nhưng như ví dụ này, .0022UF 50V SM1206 10% , không có để nên mình dựa vào đơn vị UF,( microfara) hoặc PF ( picofara) hoặc NF ( nanofara) để đặt cho nó cái tên đại điện để nhận dạng nó là "C"
các thông số 50V mình không lấy nó, 10% là sai số, SM1206 là đóng gói linh kiện,
Đơn vị của tụ, mình chỉ lấy UF, PF, NF, chứ V mình không có lấy.
Đơn vị của điện trở, mình chỉ lấy, K (kilo om), M, (mega om), R (om)
Tương tự cho Inductor, varistor, mình cũng có để trong diễn giải sheet "requirement"

Để rõ .0022UF 50V SM1206 10% thì sẽ có một mã MPN (manufacturing part number) từ nhà sản xuất, sẽ có datasheet chi tiết nói vè các con số này,
Mình đưa mã MPN cho bạn tham khảo thêm "C1206C222K5RACTU" https://www.mouser.vn/ProductDetail/KEMET/C1206C222K5RACTU?qs=8786zKh2EOwEPvtogAbwBg==

Như bạn befaint có diễn giải:
1648284684071.png
Đúng mong muốn,
Mình có làm mẫu thêm một số các ví dụ ở cột E, bạn tham khảo để biết thêm,
Cái sheet "Requirement-v1" nó giống như database để so sánh tìm kiếm dữ liệu giống để hỗ trợ cho sheet "data-v1"
mình sẽ tải dữ liệu về và sẽ có 4 cột thông tin (part number, description, location, qty.) kết quả mình mong muốn là nhận được ở cột E.
(sau khi làm xong bước này, mình còn một bước nữa đó là Vlookup thông tin Location (trong file tọa độ linh kiện, nhưng bước này, mình làm sau.)
1648287435772.png

Còn thông tin nào chưa rõ, Bạn chia sẻ thêm, mình bổ xung nha.
Cảm ơn.
 

File đính kèm

Web KT

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

Back
Top Bottom