Code lấy dữ liệu đa năng

rdxls

Thành viên mới
Tham gia ngày
6 Tháng một 2019
Bài viết
6
Điểm
15
Code lấy dữ liệu từ file a sang file b thì trong GPE đã có (rất nhiều). Đặc điểm của các đoạn code đó là:

- Phải xác định tên đầy đủ
- Chỉ dùng cho đuôi xls* hoặc csv/txt
- Phải xác định vị trí vùng dữ liệu
- Chỉ Đè dữ liệu hoặc Nối tiếp dữ liệu (Không có tùy chọn)

Em ao ước có một đoạn code có thể:

- Tự tìm dựa vào đặc điểm của tên (Ví dụ: *a*, *b*)
- Không ràng buộc đuôi (xls* hoặc csv/txt đều dùng được)
- Tự xác định vị trí vùng dữ liệu
- Tùy chọn: Ghi đè hoặc Nối tiếp hoặc cả 2.

Giả sử, trong cùng thư mục, có 2 nhóm tệp dữ liệu là: a1, a2, a3, b1, b2, b3
Yêu cầu: tệp c phải lấy dữ liệu của nhóm a đưa vào sheet a, nhóm b đưa vào sheet b.

Em xin code có thể làm được như vậy ạ. Em xin cảm ơn.
 

tam888

Thành viên tích cực
Tham gia ngày
22 Tháng tám 2013
Bài viết
641
Điểm
435
Code lấy dữ liệu từ file a sang file b thì trong GPE đã có (rất nhiều). Đặc điểm của các đoạn code đó là:

- Phải xác định tên đầy đủ
- Chỉ dùng cho đuôi xls* hoặc csv/txt
- Phải xác định vị trí vùng dữ liệu
- Chỉ Đè dữ liệu hoặc Nối tiếp dữ liệu (Không có tùy chọn)

Em ao ước có một đoạn code có thể:

- Tự tìm dựa vào đặc điểm của tên (Ví dụ: *a*, *b*)
- Không ràng buộc đuôi (xls* hoặc csv/txt đều dùng được)
- Tự xác định vị trí vùng dữ liệu
- Tùy chọn: Ghi đè hoặc Nối tiếp hoặc cả 2.

Giả sử, trong cùng thư mục, có 2 nhóm tệp dữ liệu là: a1, a2, a3, b1, b2, b3
Yêu cầu: tệp c phải lấy dữ liệu của nhóm a đưa vào sheet a, nhóm b đưa vào sheet b.

Em xin code có thể làm được như vậy ạ. Em xin cảm ơn.
Bạn nên tự tổng hợp các code hiện có, và thêm form main chính cho người dùng chọn thì sẽ có kết quả thôi,
Và hỏi thì phải chuẩn bị dữ liệu cho chuẩn đã thì mọi người mới có bột để hy vọng gột thành hồ
Còn kiểu này thì chỉ là tay trắng
 

rdxls

Thành viên mới
Tham gia ngày
6 Tháng một 2019
Bài viết
6
Điểm
15
Bạn nên tự tổng hợp các code hiện có, và thêm form main chính cho người dùng chọn thì sẽ có kết quả thôi,
Và hỏi thì phải chuẩn bị dữ liệu cho chuẩn đã thì mọi người mới có bột để hy vọng gột thành hồ
Còn kiểu này thì chỉ là tay trắng
Nếu có khả năng tổng hợp được thì em đã không hỏi.

Tưởng thớt chia sẻ code nên vào lấy. Hóa ra...
Tưởng cho code. Hóa ra ...

===================================================
Sửa code giúp em, thay phương pháp mở hộp chọn tệp thành tự động chọn ạ.

PHP:
Sub MergeExcelFiles()
    Dim FilesToOpen
    Dim x As Integer
    Dim wb As Workbook
    Dim nrow As Long

    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    FilesToOpen = Application.GetOpenFilename _
      (FileFilter:="Microsoft Excel Files (*.xlsx), *.xlsx", MultiSelect:=True, Title:="Files to Merge")

    If TypeName(FilesToOpen) = "Boolean" Then
        MsgBox "No Files were selected"
        GoTo ExitHandler
    End If

    x = 1
    While x <= UBound(FilesToOpen)
        Set wb = Workbooks.Open(Filename:=FilesToOpen(x))
        
        If x = 1 Then
            wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(1).Range("A1")
        Else
            lr = ThisWorkbook.Sheets(1).UsedRange.Rows.Count
            wb.Sheets(1).UsedRange.Offset(1).Copy ThisWorkbook.Sheets(1).Range("A" & lr + 1)
        End If
        
        wb.Close False
        x = x + 1
    Wend

ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub
 

File đính kèm

tam888

Thành viên tích cực
Tham gia ngày
22 Tháng tám 2013
Bài viết
641
Điểm
435
Nếu có khả năng tổng hợp được thì em đã không hỏi.
Chưa có khả năng, thì bắt tay vào làm thì có khả năng, mắc đâu hỏi đó
Nhưng tôi thấy người ta chuyên môn hóa từng loại file, ai lại gộp các file vào
Excel nói riêng và máy tính nói chung là cứng nhắc, muốn uyển chuyển thì người ta thường đẩy cho người dùng chọn lựa (thông qua hộp thoại), không phải cứ tự động hết (tự động hết đợi bao giờ có thuật toán đoán suy nghĩ người muốn gì đã... mà ngay bản thân người còn bao năm tìm bản ngã còn khó)
 

VetMini

Thành viên gạo cội
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
6,144
Điểm
560
Những điều kiện "đa năng" mà bạn nêu ra ở trên chúng chỉ "đa năng" trong mục đích hiện tại của bạn.
Code như vậy không khó nhưng dài lắm. Mất công viết mà chỉ có tác dụng nhất thời.

Nếu bạn vẫn muốn làm thì tự viết đi rồi nhờ bà con giải quyết giùm những chỗ bí.
Gợi ý: tìm một Sub làm từ đầu đến cuối hơi khó. Bạn có thể tự phân tách yêu cầu của mình ra nhiều phần thì mỗi phần nhỏ sẽ có code sẵn. Công việc của bạn chỉ là viết một Sub chính gọi các Sub kia thôi.
 

batman1

Thành viên tích cực
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,599
Điểm
360
Nếu bạn đã có những code mà từng code làm từng việc cụ thể thì bây giờ cho tùy chọn có gì là khó.
Vd.
Mã:
- Chỉ Đè dữ liệu hoặc Nối tiếp dữ liệu (Không có tùy chọn)
Thì mở hộp thoại cho họ chọn cách - method thôi. Hoặc qui định nhập method ở A1 (chỉ là vd. có thể ô khác). Sau đó
Mã:
Sub test()
Dim method
    method = Range("A1").Value
    If method = "ghi de" Then
'        gọi code đã có sẵn để ghi đè
    Else
'        gọi code đã có sẵn để nối tiếp
    End If
End Sub
Tưởng là code đã đa năng nhưng thực chất chỉ đa năng cho bạn. Vì sẽ có ngày ông XYZ lại lên đây đòi code đa năng nhưng không ghi đè mà là gộp. Tức vd. Nếu Tên hiện hành trong cột A của tập tinn đang xét đã có trong cột A của tập tin Tổng Hợp thì cộng dồn ô ở cột B tương ứng với Tên đó trong tập tin Tổng Hợp, ngược lại thì thêm dòng mới. Bây giờ lại phải viết đa năng mới cho ông XYZ? Mà viết thế nào? Bởi cách gộp có thể rất khác nhau tùy nhu cầu của mỗi người. Dù viết đa năng thế nào thì cũng có anh XYZ muốn gộp kiểu khác. Làm gì có chuyện viết đa năng được. Viết thì chỉ viết cụ thể cho bạn mà thôi. Kiểu đa năng như thế ít ai bỏ công viết.
- Tự xác định vị trí vùng dữ liệu
Thì tương tự thôi. Hoặc code mở RefEdit (hoặc RefEdit nhái) cho user chọn vị trí hoặc ghi tên vị trí vào B1 (chỉ là vd.) rồi code đọc ra.
Yêu cầu: tệp c phải lấy dữ liệu của nhóm a đưa vào sheet a, nhóm b đưa vào sheet b.
Trước tiên code phải biết "nhóm a" là gì, "nhóm b" là gì. Dựa vào đâu để biết là nhóm a hay nhóm b? Tức phải có định nghĩa, qui định. Nhưng code đa năng cũng bó tay vì qui định thế nào là nhóm a hay nhóm b rất khó. Vì mỗi người có thể có nhu cầu khác nhau. Vd. bạn cho *a* là nhóm a còn *b* là nhóm b? Thế anh XYZ còn có nhóm c, nhóm d thì sao? Hoặc khái niệm nhóm của anh XYZ là hoàn toàn khác. Vd. với anh ta thì những tập tin có A1 = "Thua lô đề" là nhóm a, còn A1 = "Thua cá độ bóng đá" là nhóm b. Khái niệm nhóm của 1000 người có thể khác nhau từng đôi một, tức có thể có 1000 khái niệm.

Ít ai bỏ công ra viết đa năng chỉ dùng cho bạn. Bạn có thể xét từng điều kiện, tiêu chí của riêng mình rồi gọi code đã có sẵn thích hợp. Chỉ hỏi các chi tiết cụ thể. Vd. "Làm sao hiển thị hộp thoại chọn tên tập tin mà có thể dùng ký tự * và ?". Hoặc: "Tôi muốn cho người dùng chọn vị trí trên sheet thì viết code như thế nào?". Nếu chỉ là những khúc mắc cụ thể, các chi tiết kỹ thuật thì cơ hội nhận được câu trả lời sẽ cao. Còn làm từ A tới Z mà lại đa năng thì ít ai rỗi hơi.
 

rdxls

Thành viên mới
Tham gia ngày
6 Tháng một 2019
Bài viết
6
Điểm
15
Dường như có một sự nhầm lẫn. Ý của em không phải muốn tạo một bảng điều khiển có nút này nút kia, mà là gom chung code của các trường hợp a, b, c, ... thì sẽ dùng được cho tất cả, người sử dụng muốn/không muốn cách nào thì thêm/bỏ dấu nháy trước dòng lệnh. Để ghép các code lại với nhau bắt buộc phải sự chỉnh sửa gì đó. Chỉ là ước mơ của em thôi ạ. Em xin phép dừng ạ.

Có lẽ vì tiêu đề đã làm mọi người quan ngại. Cảm ơn mọi người đã nhắc nhở. Em sẽ rút kinh nghiệm.
Em đã tạo chủ đề mới, mong mọi người qua giúp ạ GopFileExcel
 

batman1

Thành viên tích cực
Tham gia ngày
8 Tháng chín 2014
Bài viết
1,599
Điểm
360
Dường như có một sự nhầm lẫn. Ý của em không phải muốn tạo một bảng điều khiển có nút này nút kia, mà là gom chung code của các trường hợp a, b, c, ... thì sẽ dùng được cho tất cả, người sử dụng muốn/không muốn cách nào thì thêm/bỏ dấu nháy trước dòng lệnh. Để ghép các code lại với nhau bắt buộc phải sự chỉnh sửa gì đó. Chỉ là ước mơ của em thôi ạ.
Tôi không hiểu sai đâu. Tôi viết có thể kém nên bạn không hiểu.
1. Không có code đa năng để ai ai cũng dùng cho nhu cầu của mình được. Dù code nào thì cũng sẽ có anh XYZ không sử dụng được vì các tiêu chí, các cách ghi đè, nối tiếp, gộp của anh ta sẽ không được lường trong code đa năng bất kỳ.
2. Chỉ có thể viết code đa năng cho riêng bạn. Nhưng viết code đa năng cho riêng bạn thì ít ai muốn viết. Nếu bạn muốn thì tự bạn viết và xét các trường hợp. Tôi viết rất rõ là xét tiêu chí chứ không phải thêm 100 nút như bạn hiểu. Đấy là nói code đa năng cụ thể với tiêu chí cụ thể của bạn.
3. Có thể viết code đa năng cho bạn và nhóm người có tiêu chí giống bạn. Nhưng rút cục thì code đó cũng chỉ xét tiêu chí rồi gọi code thích hợp mà bạn đã có, bạn đã sưu tầm và lưu. Cũng có thể có người bỏ công làm hộ bạn, còn tôi chỉ nêu hướng đi. Nếu bạn tự đi thì khi "vấp" chỗ nào tôi sẽ giúp. Nhưng tôi không làm hoàn chỉnh từ A đến Z cho bạn.
Dĩ nhiên các tiêu chí cụ thể một khi đã chọn lựa như bạn thì nó sẽ là bất di bất dịch, và bạn có thể ghi trên sheet rồi code đọc ra hoặc có thể ghi trực tiếp trong code. Code đó sẽ đa năng theo cách hiểu là lường được 3, 4, 5 trường hợp tùy chọn, nhưng không phải đa năng theo cách hiểu là ai cũng vác về và sử dụng được bất chấp tiêu chí riêng của mình thế nào.
 
Top