Lấy số liệu từ nhiều file (format giống nhau) tổng hợp thành 1 file

Liên hệ QC

Nguyenlethanh1912

Thành viên mới
Tham gia
26/6/21
Bài viết
3
Được thích
0

Mọi người cho mình hỏi là giờ mình muốn lấy số liệu từ file P43 (và P4) sang file HH4_ (phần tô màu vàng) thì có cách nào làm nhanh được không ạ. Em có tất cả khoảng 500 file (giống P43), giờ mở từng file lên link thủ công thì thôi rồi luôn. File HH4_ là file tổng hợp.
Cảm ơn mọi người!
z2575681845905_060b3a327beb8a4eec40c80af8222a03.jpg
 

File đính kèm

  • P4.xlsx
    4.3 MB · Đọc: 12
  • P43.xlsx
    4.3 MB · Đọc: 7
  • HH4_HOAN CONG_DW.xlsx
    4.1 MB · Đọc: 6
Lần chỉnh sửa cuối:
Câu trả lời là: CÓ
 
Đang chờ câu lặp lại:
"Maika8008 đã viết:
Câu trả lời là: CÓ"
Câu trả lời là: CHỜ CÂU TRẢ LỜI CỦA CÁC THÀNH VIÊN KHÁC @!>><
Bài đã được tự động gộp:

Đối với bạn là "CÓ" chứ đối với tôi là "hơi khó".
Cứ thấy bảng tính có merged cells là tôi chạy trước.
Thớt hỏi "có cách nào" không thì tôi trả lời là CÓ thôi bác à --=0
 
Lần chỉnh sửa cuối:
Anh có thể giúp được không
Tổng hợp:
1/ Các file nguồn phải ở cùng thư mục (không lấy trong thư mục con). Sửa đường dẫn thư mục tại đầu sub LayDATA
2/ Sheet nguồn, địa chỉ vùng dữ liệu nguồn phải giống nhau ở các file nguồn [00 - Report$F21:G24] như trong code. Nếu khác đi thì chỉnh sửa cho phù hợp.
 

File đính kèm

  • LaySLNhieuFile_Nguyenlethanh1912.xlsm
    53.5 KB · Đọc: 26
Rốt cuộc cũng phải gãi ngứa, không chờ được :p
Cũng phải thử thêm về SQL bác à. Đã có kết quả rồi mà không đưa lên thì phí công.

Nhưng cũng nhờ đó mà biết được vụ dùng VBA đặt lại dấu phân cách thập phân của Control Panel từ dấu phẩy sang dấu chấm để khắc phục lỗi kết quả truy vấn SQL đối với dữ liệu có số thập phân.
 
Cũng phải thử thêm về SQL bác à. Đã có kết quả rồi mà không đưa lên thì phí công.

Nhưng cũng nhờ đó mà biết được vụ dùng VBA đặt lại dấu phân cách thập phân của Control Panel từ dấu phẩy sang dấu chấm để khắc phục lỗi kết quả truy vấn SQL đối với dữ liệu có số thập phân.
Kiểu làm việc ấy xưa rồi.
GPE này có tật thấy mấy cái ấy cho là của lạ nên cứ giữ mãi mà không chịu cập nhật các phương pháp mới.

Truy vấn hằng trăm files dữ liệu không phải là công việc của Excel-VBA.
 
Kiểu làm việc ấy xưa rồi.
GPE này có tật thấy mấy cái ấy cho là của lạ nên cứ giữ mãi mà không chịu cập nhật các phương pháp mới.

Truy vấn hằng trăm files dữ liệu không phải là công việc của Excel-VBA.
Ngay như em đây, không có nhu cầu làm việc với dữ liệu lớn nên không học sử dụng Power Pivote hoặc các ứng dụng Data Model khác làm gì. Cứ có nhu cầu đến đâu thì lao vào học và thực hành. Còn bi chừ thì cứ có gì xài nấy thôi à --=0
 
Ngay như em đây, không có nhu cầu làm việc với dữ liệu lớn nên không học sử dụng Power Pivote hoặc các ứng dụng Data Model khác làm gì. Cứ có nhu cầu đến đâu thì lao vào học và thực hành. Còn bi chừ thì cứ có gì xài nấy thôi à --=0
Tại sao bà con ăn cơm mãi rồi chán, thèm phở. Ăn phở rắc rối và nguy hiểm bỏ bố mà người ta vẫn thử.
Chơi mấy cái công cụ mới đâu có gì nguy hiểm. Hay là do vậy mà không hào hứng ? :p
 
Tại sao bà con ăn cơm mãi rồi chán, thèm phở. Ăn phở rắc rối và nguy hiểm bỏ bố mà người ta vẫn thử.
Chơi mấy cái công cụ mới đâu có gì nguy hiểm. Hay là do vậy mà không hào hứng ? :p
Không vấn đề gì nhưng tính em khác mọi người, không có động cơ thì không nuốt được kiến thức mới. Em thử học vài thứ như Google Sheets script, Python mà nuốt không vô vì thực sự không có nhu cầu, học chơi học không được.
 
Không vấn đề gì nhưng tính em khác mọi người, không có động cơ thì không nuốt được kiến thức mới. Em thử học vài thứ như Google Sheets script, Python mà nuốt không vô vì thực sự không có nhu cầu, học chơi học không được.
Đó là tính chung chứ đâu phải khác mọi người.

Khác mọi người là tính chủ quan và thành kiến như tôi nè: cứ thấy mấy con số đưa lên "hằng trăm hằng nghin files; hằng chục hằng trăm nghìn dòng phát sinh" là tôi cho ngay rằng người ta đã thêm vài con số 0's.
 
Tổng hợp:
1/ Các file nguồn phải ở cùng thư mục (không lấy trong thư mục con). Sửa đường dẫn thư mục tại đầu sub LayDATA
2/ Sheet nguồn, địa chỉ vùng dữ liệu nguồn phải giống nhau ở các file nguồn [00 - Report$F21:G24] như trong code. Nếu khác đi thì chỉnh sửa cho phù hợp.
Mở file thì bị lổi1624770059628.png
 
Vụ này mới học nên không rành. Tôi dùng Win 10 64bit, office 32bit. Bác nghiên cứu sửa, bổ sung giúp.
Đại khái thì với kiểu cũ, các API dùng con trỏ Long và hàm dùng con trỏ căn bản; qua phiên bản VBA7 và Win64 thì con trỏ dùng kiểu Long Long, và con trỏ hàm dùng PtrSafe để kết nối.

cóp từ trang quép của Microsoft:

1624774373841.png
 
Đại khái thì với kiểu cũ, các API dùng con trỏ Long và hàm dùng con trỏ căn bản; qua phiên bản VBA7 và Win64 thì con trỏ dùng kiểu Long Long, và con trỏ hàm dùng PtrSafe để kết nối.

cóp từ trang quép của Microsoft:

View attachment 261384
Theo hướng dẫn của bác thì em làm đại đoạn khai báo đó thành như thế này (máy em chạy ra kết quả bình thường, không la mắng gì):
Rich (BB code):
#If Win64 Then
    Private Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As LongLong, _
      ByVal LCType As LongLong, _
      ByVal lpLCData As String) As Boolean
#Else
    Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As Long, _
      ByVal LCType As Long, _
      ByVal lpLCData As String) As Boolean
#End If

#If VBA7 Then
    Private Declare PtrSafe Function GetUserDefaultLCID% Lib "kernel32" ()
#Else
    Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
#End If

Private Const LOCALE_SDECIMAL = &HE
Không biết máy dùng Office 64 thế nào?

Mới tìm hiểu thêm thì viết thế này để dùng cho Office 64
Rich (BB code):
#If VBA7 Then
    Private Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As LongPtr, _
      ByVal LCType As LongPtr, _
      ByVal lpLCData As String) As Boolean
    Private Declare PtrSafe Function GetUserDefaultLCID% Lib "kernel32" ()
#Else
    Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As Long, _
      ByVal LCType As Long, _
      ByVal lpLCData As String) As Boolean
    Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
#End If

Private Const LOCALE_SDECIMAL = &HE
 
Lần chỉnh sửa cuối:
Mới tìm hiểu thêm thì viết thế này để dùng cho Office 64
Rich (BB code):
#If VBA7 Then
    Private Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As LongPtr, _
      ByVal LCType As LongPtr, _
      ByVal lpLCData As String) As Boolean
    Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
#Else
    Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" ( _
      ByVal Locale As Long, _
      ByVal LCType As Long, _
      ByVal lpLCData As String) As Boolean
    Private Declare PtrSafe Function GetUserDefaultLCID% Lib "kernel32" ()
#End If

Private Const LOCALE_SDECIMAL = &HE
Cách khai báo của bác chưa đúng, vba6 không có ptrsafe. Đối với vba7 (excel 2010+), nếu là excel 64 bit (win64=true, win64 ở đây là excel chứ không phải windows) thì cần thêm ptrsafe vào khai báo và các địa chỉ phải khai báo kiểu LongLong. Với vba7+win32 (excel 32 bit, windows 32 hoặc 64) thì có khai báo ptrsafe hoặc không cũng như nhau và các địa chỉ kiểu Long. Ta có thể gộp chung 2 khai báo vab7 thành declare ptrsafe + LongPtr, LongPtr là alias của Long trong win32 và LongLong trong win64. VBA6 (excel 2007-) thì không có ptrsafe và longptr.
 
Web KT
Back
Top Bottom