Sắp xếp các cell

Liên hệ QC

duysangvgs

Thành viên chính thức
Tham gia
10/10/07
Bài viết
80
Được thích
27
Các bác giúp em file này với ạ, cũng là vấn đề sắp xếp nhưng mà dữ liệu lại không độc lập, lẫn lộn vào trong một cell, VBA thì em không rành, còn các công thức excel thì em chưa tìm được cách nào. Em có gửi file đính kèm và ghi rõ yêu cầu trong file. Các pác có thể dùng cách nào cũng được, nếu mà dùng VB thì cho em xem code để em học hỏi với ạ, đừng khóa project lại nhé. Em cũng thích nghiên cứu VB mà. Em xin chân thành cảm ơn các bác

File PDF liên quan tới Book1:
BCGD phien 1744 - SGDCK TPHCM - 12-03-2008.pdf
 

File đính kèm

Lần chỉnh sửa cuối:
duysangvgs đã viết:
?????????? sao chả thấy bác nào giúp em thế này ............... alô alô, bác anhtuan, bác kangoro, bác bab đang bận rì mà để thằng em này đợi lâu quá

Dữ liệu kiểu này e . . chết mất.

Nếu File gốc là .pdf thì bạn phải convert sang .xls, sắp xếp lại dữ liệu sau đó mới truy xuất được.
Bạn có thể gửi File gố lên (mấy cái file pdf về báo cáo bên chứng khoán thì nhiều lắm phải không)

Thân!
 
Upvote 0
duysangvgs đã viết:
Các bác giúp em file này với ạ, cũng là vấn đề sắp xếp nhưng mà dữ liệu lại không độc lập, lẫn lộn vào trong một cell, VBA thì em không rành, còn các công thức excel thì em chưa tìm được cách nào. Em có gửi file đính kèm và ghi rõ yêu cầu trong file. Các pác có thể dùng cách nào cũng được, nếu mà dùng VB thì cho em xem code để em học hỏi với ạ, đừng khóa project lại nhé. Em cũng thích nghiên cứu VB mà. Em xin chân thành cảm ơn các bác
...
Bạn xem file đính kèm.
Nhấn Alt+F8 để chạy macro TongHop.
(Tạm thời thôi vì vẫn còn 1 lỗi nhỏ xíu....)

P/S:
Bạn nói rõ xem quy định của việc đặt để xử lý được tốt hơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mr Okebab đã viết:
Dữ liệu kiểu này e . . chết mất.

Nếu File gốc là .pdf thì bạn phải convert sang .xls, sắp xếp lại dữ liệu sau đó mới truy xuất được.
Bạn có thể gửi File gố lên (mấy cái file pdf về báo cáo bên chứng khoán thì nhiều lắm phải không)

Thân!
File gốc là file pdf em có gửi đường linh đó bác, còn khi convert rồi thì nó có dạng lộn xộn cũng chẳng kém bác ạ:
 

File đính kèm

Upvote 0
nvson đã viết:
Bạn xem file đính kèm.
Nhấn Alt+F8 để chạy macro TongHop.
(Tạm thời thôi vì vẫn còn 1 lỗi nhỏ xíu....)

P/S:
Bạn nói rõ xem quy định của việc đặt để xử lý được tốt hơn!
Bác làm được thế em cũng thấy hơi choáng
Lỗi nhỏ xíu có phải là tại B55và C55 không phải là giá và khối lượng mà trả kết quả là "GiáDư" và "mua" phải không ạ?.
Nguyên tắc đặt mã là các mã phải được tách riêng ra, ở đây bác mới chỉ lấy được số liệu của ABT có giá là 58.000, còn ACL có giá là 54.500 thì vẫn chưa lấy được.
Hay bác thử xem giúp em file excel mà đã convert từ pdf sang xem có cách nào không ạ (file em gửi bên trên đó ạ)
 
Upvote 0
Trong file Book1_GPE.xls mà bạn đã download về ở bài #10.
Mở file đó ra, vào VBA, xóa hết Code trong Module1, và Paste đoạn code sau vào:
Mã:
Option Explicit
'
Public Sub TongHop()
On Error Resume Next
Application.ScreenUpdating = False
Dim shtTH As Worksheet
Dim Row_i, Row_i2, i, j
Dim strText() As String, subText As String, strMa() As String
 
Set shtTH = Worksheets("Tonghop")
Row_i = 3
Row_i2 = 3
 
Sheet1.Select
Do Until IsEmpty(Cells(Row_i, 1))
    If Len(Cells(Row_i, 1)) = 7 Then 'Can kiem tra Ma
        strMa = Split(SuperTrim(Cells(Row_i, 1)), Space(1))
        Row_i = Row_i + 2
        For i = 0 To UBound(strMa)
            shtTH.Cells(Row_i2, 1) = strMa(i)
 
            For j = 1 To 3
                'Lay so lieu cua 3 dot
                subText = Cells(Row_i, 1)
                subText = Replace(subText, "-", Space(1))
                subText = SuperTrim(subText)
                subText = Mid(subText, WorksheetFunction.Search("??t", subText, i + 1))
 
                strText = Split(subText, Space(1))
                shtTH.Cells(Row_i2, 2 + (j - 1) * 2) = Val(strText(2) & strText(3))
                If i < 1 Then
                    shtTH.Cells(Row_i2, 3 + (j - 1) * 2) = Val(strText(4))
                Else
                    shtTH.Cells(Row_i2, 3 + (j - 1) * 2) = Val(strText(4) & strText(5))
                End If
                Row_i = Row_i + 1
 
            Next j
            Row_i2 = Row_i2 + 1
            If i < UBound(strMa) Then Row_i = Row_i - 3
        Next i
    End If
    Row_i = Row_i + 1
Loop
shtTH.Select
Application.ScreenUpdating = True
End Sub
 
Public Function SuperTrim(TheStr As String)
Dim Temp As String, DoubleSpase As String
DoubleSpase = Chr(32) & Chr(32)
Temp = Trim(TheStr)
Temp = Replace(Temp, DoubleSpase, Chr(32))
Do Until InStr(Temp, DoubleSpase) = 0
    Temp = Replace(Temp, DoubleSpase, Chr(32))
Loop
SuperTrim = Temp
End Function
Chạy Macro TongHop.
 
Lần chỉnh sửa cuối:
Upvote 0
Thanks bác nvson nhiều lắm.
Em mạn phép sửa phần code của bác như sau:
Đổi đoạn:
If Len(Cells(Row_i, 1)) <= 7 Then 'Can kiem tra Ma
thành:
If Len(Cells(Row_i, 1)) <= 13 Then 'Can kiem tra Ma
vì có những chỗ mã lại là MAFPF1 PRUBF1 hoặc một trong mã đó kết hợp với 1 mã chỉ có độ dài =3 chẳng hạn như MAFPF1 ACL
Còn phần giá và số lượng thì vẫn còn vấn đề nhưng mà dựa vào phần code của bác chắc em cũng sẽ phát triển thêm được hoặc xử lý vấn đề tương tự như thế này thông qua file đã được convert từ pdf sang excel, các điều kiện không phức tạp như file mà bác đã xử lý. Một ngày khác em xin được báo cáo kết quả cho bác sau.
Xin phép được gọi bác là thầy của em nhé
 
Lần chỉnh sửa cuối:
Upvote 0
duysangvgs đã viết:
Thanks bác nvson nhiều lắm.
Em mạn phép sửa phần code của bác như sau:
Đổi đoạn:
If Len(Cells(Row_i, 1)) <= 7 Then 'Can kiem tra Ma
thành:
If Len(Cells(Row_i, 1)) <= 13 Then 'Can kiem tra Ma
vì có những chỗ mã lại là MAFPF1 PRUBF1 hoặc một trong mã đó kết hợp với 1 mã chỉ có độ dài =3 chẳng hạn như MAFPF1 ACL
...

Mình có ghi chú chữ "Can kiem tra Ma" là muốn bạn thay đổi câu lệnh đó cho phù hợp với bài toán của bạn mà!
Mình viết thêm cho bạn 1 đoạn code nữa để kiểm tra Mã có phù hợp không? Code như sau:
Mã:
Public Function KtraMa(strText As String) As Boolean
Dim i As Integer
For i = 1 To Len(strText)
    Select Case Asc(Mid(strText, i, 1))
    Case Is = 32, 48 To 57, 65 To 90
        KtraMa = True
    Case Else
        KtraMa = False
        Exit For
    End Select
Next i
End Function
Như vậy bạn thay câu lệnh:
Mã:
If Len(Cells(Row_i, 1)) = 7 Then
bằng câu lệnh:
Mã:
If KtraMa(Cells(Row_i, 1)) Then
Còn phần giá và số lượng thì vẫn còn vấn đề nhưng mà dựa vào phần code của bác chắc em cũng sẽ phát triển thêm được hoặc xử lý vấn đề tương tự như thế này thông qua file đã được convert từ pdf sang excel, các điều kiện không phức tạp như file mà bác đã xử lý. Một ngày khác em xin được báo cáo kết quả cho bác sau.
Rất vui khi bạn đã hoàn thành được công việc của mình!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom