Cách lấy dữ liệu của các cell khác nhau (1 người xem)

Người dùng đang xem chủ đề này

Bảy Dzõ

Ngu Excel nhất GPE
Tham gia
18/11/09
Bài viết
565
Được thích
1,361
Nghề nghiệp
Just for daily's rice
Thân chào các bạn,
Mình đang bí với vấn đề này mong các bạn chỉ giáo giúp giùm. Mình có 1 sheet với toàn bộ thông tin của nhân viên (generated from system) với hàng tên nằm trên và hàng mã số nhân viên nằm dưới. Các bạn chỉ giúp mình có cách nào lấy ra tất cả mã số nhân viên của sheet "First Week" sang sheet "EmpID"? Mình thử nhiều cách mà vẫn chưa tìm ra được. Mong các bạn chỉ giáo. Cảm ơn rất nhiều.
 
Thân chào các bạn,
Mình đang bí với vấn đề này mong các bạn chỉ giáo giúp giùm. Mình có 1 sheet với toàn bộ thông tin của nhân viên (generated from system) với hàng tên nằm trên và hàng mã số nhân viên nằm dưới. Các bạn chỉ giúp mình có cách nào lấy ra tất cả mã số nhân viên của sheet "First Week" sang sheet "EmpID"? Mình thử nhiều cách mà vẫn chưa tìm ra được. Mong các bạn chỉ giáo. Cảm ơn rất nhiều.

Bạn filter cột B với điều kiện là trống, sau đó copy mã số sang sheet kế là ok.
 
Thân chào các bạn,
Mình đang bí với vấn đề này mong các bạn chỉ giáo giúp giùm. Mình có 1 sheet với toàn bộ thông tin của nhân viên (generated from system) với hàng tên nằm trên và hàng mã số nhân viên nằm dưới. Các bạn chỉ giúp mình có cách nào lấy ra tất cả mã số nhân viên của sheet "First Week" sang sheet "EmpID"? Mình thử nhiều cách mà vẫn chưa tìm ra được. Mong các bạn chỉ giáo. Cảm ơn rất nhiều.

bạn xem thử file này
 

File đính kèm

Bạn dùng công thức OFFSET này như file đính kèm nhé:


Nhưng mà sao bạn không làm theo cột cho dễ nhỉ?
STT, mã nhân viên, họ tên,...các thông tin khác. khi bạn sử dụng bảng dữ liệu thì làm gì cũng dễ...
 

File đính kèm

Giải quyết yêu cầu của bạn bằng cả VBA nhé:
Bạn enable macro và bấm vào nút GPE.

Mã:
Public Sub GPE()
Dim sAr(), dAr(), I As Long, K As Long
With Sheets("First week")
    sAr = .Range(.[A6], .[A65536].End(xlUp)).Value
End With
ReDim dAr(1 To UBound(sAr, 1), 1 To 1)
For I = 1 To UBound(sAr, 1) Step 2
    K = K + 1
    dAr(K, 1) = sAr(I, 1)
Next I
With Sheets("EmpID")
    .[B3:B65536].ClearContents
    If K Then .[B3].Resize(K) = dAr
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn filter cột B với điều kiện là trống, sau đó copy mã số sang sheet kế là ok.

Cám ơn bạn, mình đang tìm kiếm cách để làm template chung để dùng cho nhiều lần...

Giải quyết yêu cầu của bạn bằng cả VBA nhé:
Bạn enable macro và bấm vào nút GPE.

Mã:
Public Sub GPE()
Dim sAr(), dAr(), I As Long, K As Long
With Sheets("First week")
    sAr = .Range(.[A6], .[A65536].End(xlUp)).Value
End With
ReDim dAr(1 To UBound(sAr, 1), 1 To 1)
For I = 1 To UBound(sAr, 1) Step 2
    K = K + 1
    dAr(K, 1) = sAr(I, 1)
Next I
With Sheets("EmpID")
    .[B3:B65536].ClearContents
    If K Then .[B3].Resize(K) = dAr
End With
End Sub

Cảm ơn bạn rất nhiều...
 
Chỉnh sửa lần cuối bởi điều hành viên:
stevenvo đã viết:
Chào bạn Xuan Nguyen,
Thật lòng cảm ơn sự giúp đỡ của bạn rất nhiều về đoạn code bạn giúp mình tìm ra được phương cách với topic "Cách lấy dữ liệu ở các cell khác nhau". Mình rất tệ về VBA nên mong bạn giúp mình thêm một lần nữa để tạo thêm một cột bên cạnh dùng hàm mid() để loại bỏ dấu []. Chân thành cảm ơn bạn rất nhiều vì đã bỏ thời gian ra giúp mình.


Mình làm lại theo yêu cầu của bạn nhé. Viết code. Sau khi lấy mã nhân viên, bỏ luôn dấu [].

Nhưng sao bạn không lập dữ liệu theo cột nhỉ? khi đó bạn muốn lấy mã nhân viên bằng công thức cũng dễ hoặc bất kỳ dữ liệu nào bạn muốn lấy. Quản lý dữ liệu về nhân viên cũng dễ hơn.

Bạn xem file đính kèm nhé, mình sửa lại theo ý bạn.
 

File đính kèm

Mình làm lại theo yêu cầu của bạn nhé. Viết code. Sau khi lấy mã nhân viên, bỏ luôn dấu [].

Nhưng sao bạn không lập dữ liệu theo cột nhỉ? khi đó bạn muốn lấy mã nhân viên bằng công thức cũng dễ hoặc bất kỳ dữ liệu nào bạn muốn lấy. Quản lý dữ liệu về nhân viên cũng dễ hơn.

Bạn xem file đính kèm nhé, mình sửa lại theo ý bạn.

Cám ơn bạn rất nhiều. Để mình giải thích cho các bạn hiểu rõ hơn tại sao mình làm như the nha. File excel mà mình upload lên đó là file trích xuất từ hệ thống Virtual Roster (chương trình hỗ trợ làm schedule và bố trí công việc cho nhân viên). Mỗi lần trích xuất ra là có 4 tuần riêng biệt, thật ra ý của mình là muốn Insert cột kế bên cột Tên nhân viên để lấy mã số nhân viên ra sau đó loại bỏ dòng trắng bên dưới và dùng hàm vlookup để link 4 tuần lại với nhau để có được một bảng lịch làm việc cho 1 tháng. Thật ra mình và nhân viên mình có thể làm từng bước (manual) bằng cách dùng filter..... nhưng vì muốn thuận tiên cho nên mình muốn tạo ra một template để có thể sử dụng nhiều lần bằng cách chỉ cần copy và paste các tuần từ file trích xuất từ hệ thống. Cảm ơn các bạn rất nhiều và hy vọng chỉ giáo....
 
Để tiện minh hoạ cho những gì mình đề cập phía trên, mình upload nguyên file cho các bạn thấy rõ hơn vấn đề mình đang gặp. Ý mình muốn là từ 4 sheets (4 tuần lịch) sẽ được xác nhập chung với nhau trong sheet "Combined Roster" theo mã số của nhân viên. Xin chỉ giáo và học hỏi ý kiến của các bạn.

Xin cho hỏi là mình không upload file lên được, mong Admin chỉ giúp (file .zip size 846Kb). Xin cảm ơn.

Đã tự mò mẫm và tìm ra được nguyên nhân không upload được. Thông cảm mình "chuối" lắm...
 
Lần chỉnh sửa cuối:
Để tiện minh hoạ cho những gì mình đề cập phía trên, mình upload nguyên file cho các bạn thấy rõ hơn vấn đề mình đang gặp. Ý mình muốn là từ 4 sheets (4 tuần lịch) sẽ được xác nhập chung với nhau trong sheet "Combined Roster" theo mã số của nhân viên. Xin chỉ giáo và học hỏi ý kiến của các bạn.

Xin cho hỏi là mình không upload file lên được, mong Admin chỉ giúp (file .zip size 846Kb). Xin cảm ơn.

Đã tự mò mẫm và tìm ra được nguyên nhân không upload được. Thông cảm mình "chuối" lắm...
Làm cho bạn = ADO nhé

[GPECODE=sql]Sub GetID_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And Left(tbl.Name, 4) <> "Combined Roster" Then
str = str & " union all SELECT F1, " & tbl.Name & _
" from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A7:B7000]" & _
" where f1 is not null and f2 is null"
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open str1
End With
With Sheets("Combined Roster")
.[A2:B65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub

[/GPECODE]
 

File đính kèm

Làm cho bạn = ADO nhé

[GPECODE=sql]Sub GetID_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And Left(tbl.Name, 4) <> "Combined Roster" Then
str = str & " union all SELECT F1, " & tbl.Name & _
" from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A7:B7000]" & _
" where f1 is not null and f2 is null"
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open str1
End With
With Sheets("Combined Roster")
.[A2:B65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub

[/GPECODE]

Cám ơn Bác Hai Lúa, nhưng code bị lỗi không chạy được. Mong bác coi lại giúp mình
 
Cám ơn Bác Hai Lúa, nhưng code bị lỗi không chạy được. Mong bác coi lại giúp mình

Bạn có thể nói rõ hơn code của anh Hai Lúa báo lỗi như thế nào khi bạn chạy code thì anh ấy mới có thể xem lại giúp bạn được.
Mà không hiểu sao mình không tải được file của bạn.
 
Bạn có thể nói rõ hơn code của anh Hai Lúa báo lỗi như thế nào khi bạn chạy code thì anh ấy mới có thể xem lại giúp bạn được.
Mà không hiểu sao mình không tải được file của bạn.

Bác Hai Lúa: VBA báo lỗi: "External Table is not in the expected format"

Bạn xuan.nguyen82: mình không biết tại sao bạn ko download được file luôn.

Hy vọng được mọi người chỉ giáo và học hỏi thêm.
 
Bác Hai Lúa: VBA báo lỗi: "External Table is not in the expected format"

Bạn xuan.nguyen82: mình không biết tại sao bạn ko download được file luôn.

Hy vọng được mọi người chỉ giáo và học hỏi thêm.

Bạn thử test lại với code sau:

[GPECODE=sql]Sub GetID_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1"""
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And tbl.Name <> "'Combined Roster$'" Then

str = str & " union all SELECT F1, " & tbl.Name & _
" from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A7:B7000]" & _
" where f1 is not null and f2 is null"
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open str1
End With
With Sheets("Combined Roster")
.[A2:B65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub[/GPECODE]
 
Bạn thử test lại với code sau:

[GPECODE=sql]Sub GetID_HLMT()
Dim cn As Object, rst As Object, cat As Object, tbl As Object, str$, str1 As String
Set cn = CreateObject("ADODB.Connection")
Set cat = CreateObject("ADOX.Catalog")
Set tbl = CreateObject("ADOX.Table")
Set rst = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 12.0 Macro;HDR=NO;IMEX=1"""
.Open
End With
cat.ActiveConnection = cn
For Each tbl In cat.Tables
If Right(Replace(tbl.Name, "'", ""), 1) = "$" And tbl.Name <> "'Combined Roster$'" Then

str = str & " union all SELECT F1, " & tbl.Name & _
" from [" & Replace(Replace(tbl.Name, "$", ""), "'", "") & "$A7:B7000]" & _
" where f1 is not null and f2 is null"
str1 = Right(str, Len(str) - 10)
End If
Next
With rst
.ActiveConnection = cn
.Open str1
End With
With Sheets("Combined Roster")
.[A2:B65000].ClearContents
.[A2].CopyFromRecordset rst
End With
rst.Close: Set rst = Nothing
cn.Close: Set cn = Nothing
Set cat = Nothing: Set tbl = Nothing

End Sub[/GPECODE]

Bác Hai Lúa, macro thì đã không còn báo lỗi nhưng kết quả thì ra như bên dưới mà thôi

Cột A Cột B
[001058] 1st week$
[001138] 1st week$
.....

Cảm ơn bác.
 
Thì đúng thế rồi. Nó chỉ ra 1 cột ID và cột tên sheet. Ý bạn muốn nó ra cái gì nữa?

Có lẽ do mình nói không rõ nên bác Hai Lúa hiểu lầm. Thành thật xin lỗi, ý mình muốn link 4 tuần (4 sheets) với nhau dựa trên mã số nhân viên đã có trong sheet "1st week" để có được một sheet "Combined Roster" với 4 tuần lịch làm việc của mọi nhân viên. Một lần nữa xin lỗi vì đã làm mất thời gian của bác.
 
Có lẽ do mình nói không rõ nên bác Hai Lúa hiểu lầm. Thành thật xin lỗi, ý mình muốn link 4 tuần (4 sheets) với nhau dựa trên mã số nhân viên đã có trong sheet "1st week" để có được một sheet "Combined Roster" với 4 tuần lịch làm việc của mọi nhân viên. Một lần nữa xin lỗi vì đã làm mất thời gian của bác.

Bạn nên tạo kết quả bạn mong muốn ra sheet Combined Roster rồi đưa lên đây xem thử nhé.
 
Mình đã tạo sẵn 2 kết quả mà mình mong muốn có được ở sheet "Combined Roster". Mong bác Hai Lúa và mọi người giúp đỡ. Cảm ơn rất nhiều.

Dữ liệu của bạn nằm khác dòng, với trình độ hiểu biết thấp kém về ado của mình thì không thể dùng ado để ra kết quả chính xác. Bạn có muốn lấy tên thay vì lấy mã số?
 
Dữ liệu của bạn nằm khác dòng, với trình độ hiểu biết thấp kém về ado của mình thì không thể dùng ado để ra kết quả chính xác. Bạn có muốn lấy tên thay vì lấy mã số?

Tên nhân viên có thể sẽ bị trùng, mã nhân viên là mỗi người 1 mã duy nhất. Không biết dữ liệu trên máy bạn ấy khi nhân viên nghỉ việc mã tự động biến mất hay không?
Anh thử xem có cách nào khác giúp bạn ấy nữa không?
 
Thử cách này xem sao:

File này luôn giữ nguyên sheet Combined Roster, hàng tháng, nếu kết xuất dữ liệu từ máy có 4 sheet con thì cập nhật 4 sheet con vào file này. Thay đổi lại ngày trong ô F1, bấm Roster. Những mã nhân viên mới trong các sheet sẽ tự động cập nhật phía dưới cùng của sheet Combined Roster.
 

File đính kèm

Lần chỉnh sửa cuối:
Thử với code này xem sao
Nhìn dữ liệu muốn....té xỉu
Cấu trúc các sheet phải giống như trong file của bạn nhé
Cách làm: phang "dzô" đầu con mèo một phát
Thân
 

File đính kèm

Dữ liệu của bạn nằm khác dòng, với trình độ hiểu biết thấp kém về ado của mình thì không thể dùng ado để ra kết quả chính xác. Bạn có muốn lấy tên thay vì lấy mã số?

Anh Hai Lúa đã quá khiêm tốn, thông qua Xuan.nguyen82 em biết được anh là cao thủ của ADO. Cám ơn anh đã nhọc tâm với project này. Vì tên nhân viên có thể trùng nhau cho nên mã số nhân viên là hoàn toàn không thể trùng lặp. Nếu có người nghỉ việc thì system tự động loại trừ mã số nhân viên đó ra và sẽ không dùng lại nó nữa.
Em có nghĩ đến vần đề này mà ko biết có thể giúp làm được hay không? Đầu tiên mình mang ô mã số nhân viên lên nằm ngang với tên và lịch làm việc của từng sheet. Dựa vào đó mình se trích xuất được lịch làm việc của cả 4 tuần dựa trên mã số nhân viên. Vì em ko co kiến thức về ADO cho nên nếu điều em nói ra là không tưởng mong anh bỏ qua.
 
Thử với code này xem sao
Nhìn dữ liệu muốn....té xỉu
Cấu trúc các sheet phải giống như trong file của bạn nhé
Cách làm: phang "dzô" đầu con mèo một phát
Thân

Thanks anh concogia... vì hiện tại mình quản lý hơn 16k nhân viên (file mình gửi lên chỉ là số nhân viên của một bộ phận thôi) cho nên database thật sự là khủng... Vì lý do đó nên muốn tìm cách để làm một template dùng cho nhiều lần. Sẵn tiện cho mình hỏi thêm anh concogia là có thể loại bỏ dấu [ ] và chèn thêm cột tên nhân viên vào không thưa anh? Code của anh chạy good nhưng để mình test và so sánh dữ liệu để thử coi có bị lệch hay không...
 
Xin lỗi nói chuyện hơi lạc đề một chút. Quản lý hơn 16k nhân viên mà không có phần mềm chuyên nghiệp, phải dùng Excel thì bạn nghĩ có quá đáng không?

Cỡ hơn 1k nhân viên thì người ta đã có phòng nhân sự riêng rồi. Cỡ quản lý 5k trở lên là cán bộ rất cao cấp. Phần mềm hổ trợ trị giá hàng chục ngàn đô la.

Excel chỉ là một bảng tính mở rộng. Các công cụ và VBA chỉ giúp cho nó làm việc thôi. Muốn nó hoạt động hiệu quả thì phải do kỹ thuật thiết kế dữ liệu, không phải code hay hàm. Nếu bạn thấy rắc rối quá là do thiết kế cơ cấu không hiệu quả.

Nếu file trên do phần mềm nào đó export ra thì bạn cần gặp lại người export để nhất ý với nhau một dạng export hiệu quả hơn.
 
Lần chỉnh sửa cuối:
Xin lỗi nói chuyện hơi lạc đề một chút. Quản lý hơn 16k nhân viên mà không có phần mềm chuyên nghiệp, phải dùng Excel thì bạn nghĩ có quá đáng không?

Cỡ hơn 1k nhân viên thì người ta đã có phòng nhân sự riêng rồi. Cỡ quản lý 5k trở lên là cán bộ rất cao cấp. Phần mềm hổ trợ trị giá hàng chục ngàn đô la.

Excel chỉ là một bảng tính mở rộng. Các công cụ và VBA chỉ giúp cho nó làm việc thôi. Muốn nó hoạt động hiệu quả thì phải do kỹ thuật thiết kế dữ liệu, không phải code hay hàm. Nếu bạn thấy rắc rối quá là do thiết kế cơ cấu không hiệu quả.

Nếu file trên do phần mềm nào đó export ra thì bạn cần gặp lại người export để nhất ý với nhau một dạng export hiệu quả hơn.

Thật ra mình thấy, dùng phần mềm đôi khi làm cho con người ta thụ động, sẽ chỉ biết gõ và nhập dữ liệu, vì đã có người viết sẵn theo yêu cầu. Nhưng dùng phần mềm dù chi tiết đến đâu cũng sẽ có 1 số việc phải thao tác nhờ công cụ Excel hỗ trợ.

Nếu dùng excel, mà thiết kế dữ liệu hợp lý, khoa học giúp hàm hoặc code làm việc hiệu quả, ít tốn tài nguyên và tốc độ xử lý cũng rất nhanh.
 
Xin lỗi nói chuyện hơi lạc đề một chút. Quản lý hơn 16k nhân viên mà không có phần mềm chuyên nghiệp, phải dùng Excel thì bạn nghĩ có quá đáng không?

Cỡ hơn 1k nhân viên thì người ta đã có phòng nhân sự riêng rồi. Cỡ quản lý 5k trở lên là cán bộ rất cao cấp. Phần mềm hổ trợ trị giá hàng chục ngàn đô la.

Excel chỉ là một bảng tính mở rộng. Các công cụ và VBA chỉ giúp cho nó làm việc thôi. Muốn nó hoạt động hiệu quả thì phải do kỹ thuật thiết kế dữ liệu, không phải code hay hàm. Nếu bạn thấy rắc rối quá là do thiết kế cơ cấu không hiệu quả.

Nếu file trên do phần mềm nào đó export ra thì bạn cần gặp lại người export để nhất ý với nhau một dạng export hiệu quả hơn.

VetMini nói đúng, không thể nào không có phần mềm hỗ trợ cho 16k nhân viên. Cty mình hiện đang dùng phần mềm Virtual Roster của Úc trị giá hơn 800k USD nhưng ko nhất thiết là có phần mềm hỗ trợ thì mọi thứ đều tốt cả. Mình dùng excel và VBA để hỗ trợ một số vấn đề trên hệ thống giúp công việc trôi chảy hơn và tiết kiệm thời gian hơn. Chứ nếu làm bằng tay thì 16k nhân viên về lịch làm việc, phép hay bố trí công việc chắc chết ko kịp nhắm mắt. Còn về bàn thảo với cty cung cấp chương trình thì phía mình đã làm điều đó nhưng vì phần mềm hỗ trợ họ cung cấp không phải chỉ dành cho một công ty của mình không nên họ phải cần tổng hợp các ý kiến của các user và nếu mọi user có cùng ý tưởng thì họ se modify chương trình lại. Về vấn đề này thì thời gian la yếu tố tối cần thiết. Hiện tại để phục vụ công việc hiện tại mình đành nhờ excel trợ lực thôi.
 
Thanks anh concogia... vì hiện tại mình quản lý hơn 16k nhân viên (file mình gửi lên chỉ là số nhân viên của một bộ phận thôi) cho nên database thật sự là khủng... Vì lý do đó nên muốn tìm cách để làm một template dùng cho nhiều lần. Sẵn tiện cho mình hỏi thêm anh concogia là có thể loại bỏ dấu [ ] và chèn thêm cột tên nhân viên vào không thưa anh? Code của anh chạy good nhưng để mình test và so sánh dữ liệu để thử coi có bị lệch hay không...
Việc bỏ dấu [ & ] chắc không khó, chèn cột thêm tên nhân viên hay thêm cái gì nữa thì bạn cứ thiết kế mẫu vào file, cái quan trọng là bạn kiểm tra xem code chạy "hổng trúng" hay "trật lấc" rồi tính tiếp
Bạn cũng nên xem qua ý kiến của bạn VetMini, mình chẳng biết quái gì về mấy cái "quản lý" với "quản tình", chỉ nhìn đề bài thấy giải quyết được là......phang. Híc
Thân
 
Thật ra mình thấy, dùng phần mềm đôi khi làm cho con người ta thụ động, sẽ chỉ biết gõ và nhập dữ liệu, vì đã có người viết sẵn theo yêu cầu. Nhưng dùng phần mềm dù chi tiết đến đâu cũng sẽ có 1 số việc phải thao tác nhờ công cụ Excel hỗ trợ.

Nếu dùng excel, mà thiết kế dữ liệu hợp lý, khoa học giúp hàm hoặc code làm việc hiệu quả, ít tốn tài nguyên và tốc độ xử lý cũng rất nhanh.

Cỡ 100 nhân viên thì Excel được rồi. Ở đây là 16.000, người quản lý không thể nói chuyện thụ động hay chủ động mà phải đặt vấn đề chủ quan và khách quan. Chủ quan là "làm thế nào cho đúng và hiệu quả", khách quan là "làm thế nào đạt chuẩn và quy trình của công ty, và có thể bảo đảm kiểm toán (auditable) được"

Vả lại tôi có bảo không dùng đâu? Chủ yếu của tôi là chủ thớt đang chú trọng vào cái ngọn, tìm cách khắc phục cách trình bày dữ liệu trong khi trên thực tế Excel quan trọng ở cái gốc, tức là nguồn và cơ cấu dữ liệu.

 
Lần chỉnh sửa cuối:
Cỡ 100 nhân viên thì Excel được rồi. Ở đây là 16.000, người quản lý không thể nói chuyện thụ động hay chủ động mà phải đặt vấn đề chủ quan và khách quan. Chủ quan là "làm thế nào cho đúng và hiệu quả", khách quan là "làm thế nào đạt chuẩn và quy trình của công ty, và có thể bảo đảm kiểm toán (auditable) được"

Vả lại tôi có bảo không dùng đâu? Chủ yếu của tôi là chủ thớt đang chú trọng vào cái gốc, tìm cách khắc phục dữ liệu


Toi hiều ý của bạn VetMini, tính về chiến lược lâu dài cũng như sự hữu dụng của công cụ hỗ trợ đều rất quan trọng cho một người quản lý. Cho nên mọi phương hướng đã được đặt ra và lựa chọn. Như tôi đã nói trên phần trả lời trước là vấn đề về thời gian. Cho nên nếu hiện tại mình có thể dựa vào excel và VBA để giúp đỡ thì mình sẽ tiết kiệm được quỹ thời gian hiện tại. P/S: vì chương trình mình đang sử dụng là của Úc mà phía Úc thì họ luôn thích lịch hoặc trả lương theo tuần cho nên đây là vấn đề mấu chốt vì công ty mình lại áp dụng chính sách từng tháng. Thân
 
... Cho nên mọi phương hướng đã được đặt ra và lựa chọn. Như tôi đã nói trên phần trả lời trước là vấn đề về thời gian. Cho nên nếu hiện tại mình có thể dựa vào excel và VBA để giúp đỡ thì mình sẽ tiết kiệm được quỹ thời gian hiện tại. P/S: vì chương trình mình đang sử dụng là của Úc mà phía Úc thì họ luôn thích lịch hoặc trả lương theo tuần cho nên đây là vấn đề mấu chốt vì công ty mình lại áp dụng chính sách từng tháng. Thân

Cái vấn đề nó trả lương như thế nào không quan trọng. Điểm quan trọng là bạn cần thiết kế lại bảng tính của mình và đưa yêu cầu cho bên CSDL nó export cho đúng đắn. Ví dụ thay vì tên và mã số nằm cùng cột thì bạn đòi hỏi 2 cột, vv... Theo như dạng file trên thì có lẽ nó được export từ một grid table của phần mềm nào đó. Nếu bạn nói chuyện thẳng với người quản lý DBase thì có thể nguời ta có cách dễ dàng hơn nhiều.
 
Tên nhân viên có thể sẽ bị trùng, mã nhân viên là mỗi người 1 mã duy nhất. Không biết dữ liệu trên máy bạn ấy khi nhân viên nghỉ việc mã tự động biến mất hay không?
Anh thử xem có cách nào khác giúp bạn ấy nữa không?

Như mình đã nói

Dữ liệu của bạn nằm khác dòng, với trình độ hiểu biết thấp kém về ado của mình thì không thể dùng ado để ra kết quả chính xác.

Ra thì vẫn ra nhưng phải tốn thời gian để duyệt ngược từng record lấy dữ liệu trước update vào dữ liệu sau, rất mất thời gian... Thôi thì đành nhờ cao thủ khác giải quyết =VBA vậy.
 
Mình đã test và chạy thử code của anh concogia va xuan.nguyen82, cả hai bộ code chạy rất êm. Chân thành cảm ơn hai cao thủ đã giúp đỡ nhiều. Riêng anh Hai Lúa thì cũng đa tạ anh vì đã nhọc tâm thử ADO để giúp mình dù biết rằng rất khó.

Anh concogia: nếu bộ code của anh có thể chỉnh giúp mình loại bỏ dấu [ ] và chèn thêm cột tên nữa thì hoàn chỉnh hơn.

Xuan.nguyen82: cám ơn xuân đã giúp mình. Bộ code của xuân đã hoàn thành được 95% ý nguyện của mình rồi đó....

Một lần nữa cám ơn tất cả các cao thủ GPE đã chia sẽ và giúp đỡ
 
Cái vấn đề nó trả lương như thế nào không quan trọng. Điểm quan trọng là bạn cần thiết kế lại bảng tính của mình và đưa yêu cầu cho bên CSDL nó export cho đúng đắn. Ví dụ thay vì tên và mã số nằm cùng cột thì bạn đòi hỏi 2 cột, vv... Theo như dạng file trên thì có lẽ nó được export từ một grid table của phần mềm nào đó. Nếu bạn nói chuyện thẳng với người quản lý DBase thì có thể nguời ta có cách dễ dàng hơn nhiều.

Đúng như bạn nói, file trên được export từ grid table của phần mêm Virtual Roster. Mình sẽ cố gắng liên lạc với bên cty họ để đề xuất ý kiến trên nhưng ít nhất để có được nó sẽ phải chờ ít nhất 6 tháng để có được update version. Thôi thì trong thời gian này mình đành sử dụng những gì có thể hỗ trợ được vậy.
 
Mình đã test và chạy thử code của anh concogia va xuan.nguyen82, cả hai bộ code chạy rất êm. Chân thành cảm ơn hai cao thủ đã giúp đỡ nhiều. Riêng anh Hai Lúa thì cũng đa tạ anh vì đã nhọc tâm thử ADO để giúp mình dù biết rằng rất khó.

Anh concogia: nếu bộ code của anh có thể chỉnh giúp mình loại bỏ dấu [ ] và chèn thêm cột tên nữa thì hoàn chỉnh hơn.

Xuan.nguyen82: cám ơn xuân đã giúp mình. Bộ code của xuân đã hoàn thành được 95% ý nguyện của mình rồi đó....

Một lần nữa cám ơn tất cả các cao thủ GPE đã chia sẽ và giúp đỡ
"Con gà đen", muốn chơi tiếp thì chơi
Kiểm tra lại nhé bạn, cái này dễ lệch cột lắm đấy
Thân
 

File đính kèm

Mình đã test và chạy thử code của anh concogia va xuan.nguyen82, cả hai bộ code chạy rất êm. Chân thành cảm ơn hai cao thủ đã giúp đỡ nhiều. Riêng anh Hai Lúa thì cũng đa tạ anh vì đã nhọc tâm thử ADO để giúp mình dù biết rằng rất khó.

Anh concogia: nếu bộ code của anh có thể chỉnh giúp mình loại bỏ dấu [ ] và chèn thêm cột tên nữa thì hoàn chỉnh hơn.

Xuan.nguyen82: cám ơn xuân đã giúp mình. Bộ code của xuân đã hoàn thành được 95% ý nguyện của mình rồi đó....

Một lần nữa cám ơn tất cả các cao thủ GPE đã chia sẽ và giúp đỡ

95% là chưa hoàn toàn như mong muốn. Thầy mình dạy mình là: Làm thế nào để khi run, code nó không "cự" lại mình, và khi nó không cự lại mình thì cần hoàn thiện nó cho đúng với yêu cầu công việc.
Vậy có còn chỗ nào cần cho nó hoàn thiện, C có thể đưa lên, rất nhiều thành viên như bác concogia, bác ndu, anh Hai Lúa, thầy Ba Tê....có thể sẽ giúp C tìm được cách giải quyết tốt nhất.

Mình gửi lại file rút ngắn 1 chút. code chạy nhanh hơn (Vẫn file 95% đạt yêu cầu đó nhé..--=0)
 

File đính kèm

"Con gà đen", muốn chơi tiếp thì chơi
Kiểm tra lại nhé bạn, cái này dễ lệch cột lắm đấy
Thân

Anh concogia ơi, sao mình chạy macro nó báo lỗi là all macro may disable or file is locked. Chạy mấy file khác vẫn bình thường.
 
95% là chưa hoàn toàn như mong muốn. Thầy mình dạy mình là: Làm thế nào để khi run, code nó không "cự" lại mình, và khi nó không cự lại mình thì cần hoàn thiện nó cho đúng với yêu cầu công việc.
Vậy có còn chỗ nào cần cho nó hoàn thiện, C có thể đưa lên, rất nhiều thành viên như bác concogia, bác ndu, anh Hai Lúa, thầy Ba Tê....có thể sẽ giúp C tìm được cách giải quyết tốt nhất.

Mình gửi lại file rút ngắn 1 chút. code chạy nhanh hơn (Vẫn file 95% đạt yêu cầu đó nhé..--=0)

X ơi, thật ra là file chạy rất hoàn chỉnh rồi. Chỉ 5% còn lại là do C mới suy nghĩ ra và muốn template mình đẹp hơn mà thôi giống như thêm một cột Chức vụ nữa sẽ là hoàn hảo. Cảm ơn mọi người rất nhiều vì đã giúp đỡ cũng như học thêm được nhiều điều hay.
 
Anh concogia ơi, sao mình chạy macro nó báo lỗi là all macro may disable or file is locked. Chạy mấy file khác vẫn bình thường.
Hông biết, mình down về, chạy thử cái vù, nó chẳng nói năng, cự cãi chi, thậm chí nó chẳng thèm dòm mặt mình nữa
Híc
Thân
 
Hông biết, mình down về, chạy thử cái vù, nó chẳng nói năng, cự cãi chi, thậm chí nó chẳng thèm dòm mặt mình nữa
Híc
Thân

Híc thật sự nó làm khó mình không anh concogia ơi... Warning: Cannot run the Macro "C:\Documents and Settings\steven.vo\Local Settings\Temporary Internet Files\Content.IE5\40WO94E\roster[1].xlsm'!GomGom'. The macro may not be available in this workbook or all macros may be disable.

Cảm ơn bác concogia... Cuối cùng cũng dụ được nó chạy rồi bác ơi... thanks bác để mình test cái database xem sao nhé
 
Lần chỉnh sửa cuối:
X ơi, thật ra là file chạy rất hoàn chỉnh rồi. Chỉ 5% còn lại là do C mới suy nghĩ ra và muốn template mình đẹp hơn mà thôi giống như thêm một cột Chức vụ nữa sẽ là hoàn hảo. Cảm ơn mọi người rất nhiều vì đã giúp đỡ cũng như học thêm được nhiều điều hay.

Thêm cột "chức vụ" rồi có cần thêm cột "địa điểm làm việc" nữa không? vì có thể C cần theo dõi nhân viên đó làm việc ở đâu và kế hoạch trong tuần ra sao?
Code bác Cò chạy rất tốc độ, C có thể áp dụng vào công việc.
 
Thêm cột "chức vụ" rồi có cần thêm cột "địa điểm làm việc" nữa không? vì có thể C cần theo dõi nhân viên đó làm việc ở đâu và kế hoạch trong tuần ra sao?
Code bác Cò chạy rất tốc độ, C có thể áp dụng vào công việc.

Chỉ cần thêm cột chức vụ nữa là đầy đủ thông tin vì "địa điểm làm việc" thay đổi theo từng ngày. Giống như file C upload lên đây. Cám ơn mọi người nhiều lắm
 
Chỉ cần thêm cột chức vụ nữa là đầy đủ thông tin vì "địa điểm làm việc" thay đổi theo từng ngày. Giống như file C upload lên đây. Cám ơn mọi người nhiều lắm

Phần này mình phải hỏi thầy hướng giải quyết như thế nào cho phù hợp và tốc độ nhanh.
Thêm cột chức vụ sau cột tên, nhưng mình thấy tên nhân viên trong sheet position đầy đủ hơn là tên ở các sheet con, không muốn C muốn lấy tên theo sheet nào?

Tạm thời mình vẫn lấy tên theo các sheet con nhé.
Xem file đính kèm.
 

File đính kèm

Cám ơn X nhiều lắm. Về cột tên cứ lấy theo sheet con là được vì nó được trích xuất từ hệ thống.
 

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

Back
Top Bottom