Tách chuỗi ký tự từ file khác

Liên hệ QC

THANHTRUNGT

Thành viên chính thức
Tham gia
11/5/14
Bài viết
57
Được thích
17
Giới tính
Nam
Nghề nghiệp
Lang Thang
Chào các bạn,
Mình cần tách chuỗi để lấy các ký tự file "abc" sang file "tonghop". Trong file abc chỉ cần lấy cột C và các ký tự trong chuỗi ở cột H. Chi tiết mình gửi trong file đính kèm. Nhờ các bạn giúp đỡ.
 

File đính kèm

  • hoigpe.rar
    206.2 KB · Đọc: 38
Chào các bạn,
Mình cần tách chuỗi để lấy các ký tự file "abc" sang file "tonghop". Trong file abc chỉ cần lấy cột C và các ký tự trong chuỗi ở cột H. Chi tiết mình gửi trong file đính kèm. Nhờ các bạn giúp đỡ.

Dùng VBA:
* đưa toàn bộ dữ liệu từ file ABC vào 1 mảng
* Rồi xử lý các chuỗi trên mảng tương ứng thôi !
--> bạn đang loay hoay tìm giải pháp ? hay còn vướng mắc ở điểm nào ?
 
Dùng VBA:
* đưa toàn bộ dữ liệu từ file ABC vào 1 mảng
* Rồi xử lý các chuỗi trên mảng tương ứng thôi !
--> bạn đang loay hoay tìm giải pháp ? hay còn vướng mắc ở điểm nào ?

đang buồn "tự sướng" vậy :
copy toàn bộ code này vào file tonghop.xlsx , run và thưởng thức:
Mã:
Option Explicit
Sub GPE()
Dim cnn As Object, rst As Object, regx As Object
Dim sFilename As String, Arr(), Arrresult(), i As Long, tmp$
    sFilename = Application.GetOpenFilename()
    If sFilename <> "False" Then
        Set cnn = CreateObject("ADODB.connection")
        Set rst = CreateObject("ADODB.recordset")
        With cnn
            .provider = "Microsoft.ACE.OLEDB.12.0"
            .Properties("Data source") = sFilename
            .Properties("Extended properties") = "Excel 12.0;HDR=NO;IMEX=1"
            .Open
        End With
        rst.Open "SELECT f8,f3 FROM [Data (1)$A4:H65536]", cnn, 3, 3, 1
        Arr = TransArr(rst.getrows): ReDim Arrresult(0 To UBound(Arr, 1), 0 To 3)
'--------------------------------------------------------------------------------
        Set regx = CreateObject("VBscript.regexp")
        regx.Pattern = "SYSTEMID=(.+):-:RACKID=\d+:-:SELFID=\d+:-:SLOT=(\d+):-:PORT=(\d+):-:"
        For i = 0 To UBound(Arr, 1)
            Arrresult(i, 3) = Arr(i, 1)
            tmp = Arr(i, 0)
            With regx.Execute(tmp)(0)
                Arrresult(i, 0) = .submatches(0)
                Arrresult(i, 1) = .submatches(1)
                Arrresult(i, 2) = .submatches(2)
            End With
        Next
        Range("C2").Resize(i + 1, 4) = Arrresult
'---------------------------------------------------------------------------------------
        Set regx = Nothing
        Set rst = Nothing
        cnn.Close: Set cnn = Nothing
    End If
End Sub
'============================================================
Function TransArr(sArr As Variant) As Variant
    Dim cllX As Long, cllY As Long, tmpX As Long, tmpY As Long, tmparr As Variant
    tmpX = UBound(sArr, 2):    tmpY = UBound(sArr, 1)
    ReDim tmparr(tmpX, tmpY)
    For cllX = 0 To tmpX
        For cllY = 0 To tmpY
            tmparr(cllX, cllY) = sArr(cllY, cllX)
        Next cllY
    Next cllX
    TransArr = tmparr
End Function
'SYSTEMID=NAN.HNN.HNN.L2S.FU14:-:RACKID=0:-:SELFID=0:-:SLOT=0:-:PORT=5:-:VPI=8:-:VCI=35
 
Dùng VBA:
* đưa toàn bộ dữ liệu từ file ABC vào 1 mảng
* Rồi xử lý các chuỗi trên mảng tương ứng thôi !
--> bạn đang loay hoay tìm giải pháp ? hay còn vướng mắc ở điểm nào ?
Mình đang loay hay mãi, chưa kịp trả lời thì bạn đã "tự sướng" làm mình cũng sướng theo.
 
đang buồn "tự sướng" vậy :
copy toàn bộ code này vào file tonghop.xlsx , run và thưởng thức:
Mình đã run và thưởng thức, cảm giác rất tuyệt vời. Cho mình hỏi thêm nếu tùy chỉnh để thêm cột:
PHP:
        regx.Pattern = "SYSTEMID=(.+):-:RACKID=\d+:-:SELFID=\d+:-:SLOT=(\d+):-:PORT=(\d+):-:"
VPI=(\d+):-:VCI=(\d+)
Có đúng không? Mới tìm hiểu chưa đến nơi đến chốn mong bạn thông cảm.
Một lần nữa cảm ơn bạn rất nhiều, file chạy rất tốt.
 
Mình đã run và thưởng thức, cảm giác rất tuyệt vời. Cho mình hỏi thêm nếu tùy chỉnh để thêm cột:
PHP:
        regx.Pattern = "SYSTEMID=(.+):-:RACKID=\d+:-:SELFID=\d+:-:SLOT=(\d+):-:PORT=(\d+):-:"
VPI=(\d+):-:VCI=(\d+)
Có đúng không? Mới tìm hiểu chưa đến nơi đến chốn mong bạn thông cảm.
Một lần nữa cảm ơn bạn rất nhiều, file chạy rất tốt.
về cú pháp regx.pattern thì có lẽ vẫn ok!
tuy nhiên bạn phải khai báo mảng kết quả có kích thước lớn hợn: ví dụ
Redim Arrresult ( 0 to ubound(Arr,1), 0 to 4) <--- mảng kết quả sẽ có 5 cột
tương đương với việc bạn sẽ gán số liệu vào mảng như sau :
............. Arrresult(i,3) = .submatches(3) :Arrresult(i,4) = .submatches(4)
 
Mình xin góp 1 cách dùng hàm như sau:
Trên file abc.xlsx / Sheet "Data(1), đặt các tiêu đề cho dễ quan sát:
Mã:
O3 = "tentram" 
P3 = "slot" 
Q3 = "port" 
R3 = "goicuoc"
Tiếp đến xử lý theo yêu cầu:
Mã:
O4 = MID(H4,FIND("=",H4,1)+1,FIND(":-:",H4,1)-FIND("=",H4,1)-1)
P4 = MID(H4,FIND("SLOT=",H4,1)+LEN("SLOT="),FIND(":-:PORT",H4,1)-FIND("SLOT",H4,1)-LEN("SLOT="))
Q4 = MID(H4,FIND("PORT=",H4,1)+LEN("PORT="),FIND(":-:VPI",H4,1)-FIND("PORT",H4,1)-LEN("PORT="))
R4 = C4
 
Mình xin góp 1 cách dùng hàm như sau:
Trên file abc.xlsx / Sheet "Data(1), đặt các tiêu đề cho dễ quan sát:
Cảm ơn bạn đã góp ý. Nhưng trên file abc.xlsx số liệu luôn biến động và file thay đổi thường xuyên. Mình chỉ tác động trên file tổng hợp để lấy kết quả mong muốn.
 
về cú pháp regx.pattern thì có lẽ vẫn ok!
tuy nhiên bạn phải khai báo mảng kết quả có kích thước lớn hợn: ví dụ
Redim Arrresult ( 0 to ubound(Arr,1), 0 to 4) <--- mảng kết quả sẽ có 5 cột
tương đương với việc bạn sẽ gán số liệu vào mảng như sau :
............. Arrresult(i,3) = .submatches(3) :Arrresult(i,4) = .submatches(4)
Cho mình hỏi bạn thêm một vấn đề nữa mà lúc đầu hỏi bài không dám đưa lên vì sợ làm phức tạp thêm.
Mình muốn ánh xạ từ goicuoc sang phần ghi chú các mã goicuoc, thì giải quyết bằng hàm gì?
Capture.jpg
như hình trên, hoặc ví vụ từ file sau:
 

File đính kèm

  • vidu1.xlsx
    8.5 KB · Đọc: 7
Tức là mình có thể tạo một hàm định nghĩa các goicuoc theo mã. Và khi run code của bạn lên. Các goicuoc xuất hiện ở cột F thì cùng lúc các mã do mình định nghĩa sẽ xuất hiện ở cột G bên cạnh. Kiểu như abc=1; aac=2; abb=3 đại loại là như vậy.
 
Vì có rất nhiều goicuoc khác nhau, và chung một mã, nếu mình định nghĩa và tạo một hàm để nó nhận biết rằng aaa=1 và aab=1; abb=2 và abc=2 thì đơn giản hơn
 
Vì có rất nhiều goicuoc khác nhau, và chung một mã, nếu mình định nghĩa và tạo một hàm để nó nhận biết rằng aaa=1 và aab=1; abb=2 và abc=2 thì đơn giản hơn

gửi lại file mà bạn đã gán code + bảng mã định nghĩa , để mình có cách làm tổng quát hơn!
 
gửi lại file mà bạn đã gán code + bảng mã định nghĩa , để mình có cách làm tổng quát hơn!
Cảm ơn bạn đã giúp đỡ. Mình đang mải tìm kiếm các dạng ở forum mà không giải được bài toán của mình nên trả lời hơi chậm chạp. Mình gửi bạn file gán code + bảng định nghĩa. Nhờ bạn giúp đỡ, code của bạn mình chỉ biết dùng chứ không biết sửa thế nào cả. Có gì nhờ bạn giảng giải giúp mình với nhé!
 

File đính kèm

  • code.xlsx
    8.8 KB · Đọc: 4
Cảm ơn bạn đã giúp đỡ. Mình đang mải tìm kiếm các dạng ở forum mà không giải được bài toán của mình nên trả lời hơi chậm chạp. Mình gửi bạn file gán code + bảng định nghĩa. Nhờ bạn giúp đỡ, code của bạn mình chỉ biết dùng chứ không biết sửa thế nào cả. Có gì nhờ bạn giảng giải giúp mình với nhé!

Xem thử file đính kèm,
( mở file lên, ấn vào nút "Click Here" , check thông tin gói cước - mã, ấn vào nút "execute" tìm đường dẫn đến file abc.xlsx,.......)
 

File đính kèm

  • tonghop.xlsm
    34.7 KB · Đọc: 9
Xem thử file đính kèm,
( mở file lên, ấn vào nút "Click Here" , check thông tin gói cước - mã, ấn vào nút "execute" tìm đường dẫn đến file abc.xlsx,.......)
Cảm ơn bạn rất nhiều. Code này của bạn mình thấy "khủng" quá. Mục thêm thông tin goicuoc + mã rất cơ động.
 
Tách chuỗi ký tự từ file khác (File 2)

Xem thử file đính kèm,
( mở file lên, ấn vào nút "Click Here" , check thông tin gói cước - mã, ấn vào nút "execute" tìm đường dẫn đến file abc.xlsx,.......)
Mình có một file cần tách và lọc tương tự nhưng cấu trúc có thay đổi một tý. Do không hiểu về code nên mình không biết cách sửa như thế nào. Nhờ bạn giúp mình với nhé, cảm ơn bạn!
 
Mong mọi người đi qua cho mình đôi lời gợi ý. Xin cảm ơn!
 
Web KT
Back
Top Bottom