PDA

View Full Version : Cách chuyển những dòng không liên tục từ dưới lên trên trong cùng 1 sheet nhanh nhất.



xuan.nguyen82
13-10-10, 03:50 PM
Chào tất cả các bạn!
Mình muốn nhờ GPE 1 việc như sau: Mình có 1 sheet tổng hợp, trong đó có phân chia các nhân viên thuộc loại hợp đồng lao động: hđ 1 năm, thời vụ....Hàng tháng khi làm gia hạn hợp đồng, có những nhân viên chuyển từ hợp đồng thời vụ lên hợp đồng 1 năm, mình muốn cắt từ "nhóm" thời vụ lên "nhóm" 1 năm, như trong file đính kèm mình muốn cắt cả dòng 16,19 lên dòng 10,11. Đây là bảng tổng hợp có tất cả các thông tin của nhân viên, trong đó có cột số hợp đồng, và mình phân chia từng loại hợp đồng cho dễ nhìn, dễ quản lý. Vậy các bạn chỉ giúp mình cách chuyển nhanh nhất những dòng không liên tục ở dưới lên trên như vậy nhé.
Mình cảm ơn các bạn rất nhiều!

Ếch Xanh
13-10-10, 04:06 PM
Nếu bạn để thành 2 sheet, 1 sheet là hợp đồng 1 năm, sheet còn lại là thời vụ, và trong sheet thời vụ, làm thêm 1 cột phụ để chọn nhân viên được lên hợp đồng 1 năm, thì mình rất dễ dàng để chuyển dữ liệu cho bạn, ý tôi là thế, bạn thấy thế nào?

Ếch Xanh
13-10-10, 07:36 PM
Thôi, để tôi làm theo cách của tôi, bạn xem thử có được không nhé, tôi viết một đoạn code của nút lệnh trong Sheet thời vụ. Bạn chỉ cần nhấp vào nó là xong!

Code như thế này:


Private Sub CommandButton1_Click()
Dim c As Long, r As Long
c = WorksheetFunction.CountIf(Range(HD_ThoiVu.[H3], HD_ThoiVu.[H5000].End(xlUp)), 1)
If c = 0 Then Exit Sub
With Application
.ScreenUpdating = False: .DisplayAlerts = False

With Range(HD_ThoiVu.[B3], HD_ThoiVu.[B5000].End(xlUp)).Resize(, 7)
.AutoFilter 7, "1"
With Range(HD_ThoiVu.[B4], HD_ThoiVu.[B5000].End(xlUp)).Resize(, 6)
r = HD_Nam.[B5000].End(xlUp).Row + 1
.SpecialCells(12).Copy
HD_Nam.Cells(r, 2).PasteSpecial 3
.Delete
End With
.AutoFilter
End With

HD_Nam.Range("A4:A" & HD_Nam.Range("B5000").End(xlUp).Row) = Evaluate("ROW(R:R)")
HD_ThoiVu.Range("A4:A" & HD_ThoiVu.Range("B5000").End(xlUp).Row) = Evaluate("ROW(R:R)")

.DisplayAlerts = True: .ScreenUpdating = True
End With
End Sub


Chờ ý kiến của bạn!

xuan.nguyen82
14-10-10, 02:34 PM
Cảm ơn bạn đã trả lời giúp mình. Nhưng ở đây mình muốn cắt những dòng trong cùng 1 sheet thôi, mình đã có những file các loại hợp đồng thời vụ, 1 năm riêng rồi, trong bảng đó có những sheet dữ liệu liên quan. BẢng tổng hợp này của mình cần thể hiện tất cả các thông tin từ các file khác. Và mình chỉ cần làm cách nào cắt những dòng không liên tục như yêu cầu ở file đính kèm. Ý của bạn cũng rất hay nhưng chưa đúng với ý mình muốn.
Các bạn giúp đỡ mình nhé.
Cảm ơn rất nhiều!

Ếch Xanh
14-10-10, 04:36 PM
Khó, bởi không thể xác định được hàng để thêm, bớt trong 1 sheet có 2 bảng liền nhau. Bạn cứ làm như tôi đi, rồi copy từng phần qua sheet tổng hợp, vậy là ổn rồi đó.

le tin
14-10-10, 04:49 PM
Chào tất cả các bạn!
Mình muốn nhờ GPE 1 việc như sau: Mình có 1 sheet tổng hợp, trong đó có phân chia các nhân viên thuộc loại hợp đồng lao động: hđ 1 năm, thời vụ....Hàng tháng khi làm gia hạn hợp đồng, có những nhân viên chuyển từ hợp đồng thời vụ lên hợp đồng 1 năm, mình muốn cắt từ "nhóm" thời vụ lên "nhóm" 1 năm, như trong file đính kèm mình muốn cắt cả dòng 16,19 lên dòng 10,11. Đây là bảng tổng hợp có tất cả các thông tin của nhân viên, trong đó có cột số hợp đồng, và mình phân chia từng loại hợp đồng cho dễ nhìn, dễ quản lý. Vậy các bạn chỉ giúp mình cách chuyển nhanh nhất những dòng không liên tục ở dưới lên trên như vậy nhé.
Mình cảm ơn các bạn rất nhiều!
Bạn chuyển qua E.2003 sẽ có người giúp,yêu cầu bạn đặt ra tôi nghĩ có thể không khó

Ếch Xanh
14-10-10, 04:55 PM
Bạn chuyển qua E.2003 sẽ có người giúp,yêu cầu bạn đặt ra tôi nghĩ có thể không khó

Để mình chuyển luôn cho. Sẳn học hỏi thêm luôn.

ChanhTQ@
15-10-10, 05:34 AM
Cảm ơn Learning_E đã chuyển file sang 2003 giúp mình.
được chuyển, mà bốn người còn lại lại không được chuyển?

Hay các người còn lại chưa làm thủ tục đầu tiên?; Khà, khà,. . . --=0 --=0 --=0

Hay là những ai muốn chuyển bạn sẽ đánh màu nên có chỉ số =3 trước; Nếu vậy ta chuyển bằng macro cũng được.

& cho hỏi thêm: Chuyển đến, rồi có khi nào bạn muốn chuyển đi hay không?

Chờ tin từ bạn.

sealand
15-10-10, 07:41 AM
Qua ý kiến Bác ChanhTQ mình cũng muốn tham gia 1 chút:
Cái việc cắt chép di chuyển dồn dịch như thế nào thì có lẽ nhiều người sử lý được. Cái chính là căn cứ vào đâu mới là điều qua trọng. Ở đây chỉ có vài dòng hồ sơ còn kiểm tra được chứ khi lên đến hàng ngàn hồ sơ thì sao mà kiểm soát được. Việc sai sót xảy ra là điều khó tránh khỏi. Cái điều kiện ta bố trí làm sao để người hiểu-máy hiểu và đều làm việc trên cơ sở đó.

huuthang_bd
15-10-10, 11:29 AM
Chào tất cả các bạn!
Mình muốn nhờ GPE 1 việc như sau: Mình có 1 sheet tổng hợp, trong đó có phân chia các nhân viên thuộc loại hợp đồng lao động: hđ 1 năm, thời vụ....Hàng tháng khi làm gia hạn hợp đồng, có những nhân viên chuyển từ hợp đồng thời vụ lên hợp đồng 1 năm, mình muốn cắt từ "nhóm" thời vụ lên "nhóm" 1 năm, như trong file đính kèm mình muốn cắt cả dòng 16,19 lên dòng 10,11. Đây là bảng tổng hợp có tất cả các thông tin của nhân viên, trong đó có cột số hợp đồng, và mình phân chia từng loại hợp đồng cho dễ nhìn, dễ quản lý. Vậy các bạn chỉ giúp mình cách chuyển nhanh nhất những dòng không liên tục ở dưới lên trên như vậy nhé.
Mình cảm ơn các bạn rất nhiều!
Thử cái này xem:

Sub MoveRow()
Dim Dic As Variant, Arr As Variant, i As Long, j As Long, Tam As Long, PasteRng As Range
On Error GoTo Err
Application.Calculation = xlCalculationManual
Set Dic = CreateObject("Scripting.Dictionary")
Set PasteRng = Application.InputBox("Chon vi tri dan du lieu", Type:=8)
Application.ScreenUpdating = False
Set PasteRng = PasteRng(1, 1)
For Each cll In Intersect(Selection.EntireRow, [A:A])
If Not Dic.Exists(cll.Row) Then
Dic.Add cll.Row, ""
End If
Next
Arr = Dic.keys
Dic.RemoveAll
For i = 0 To UBound(Arr) - 1
For j = i + 1 To UBound(Arr)
If Arr(j) > Arr(i) Then
Tam = Arr(i)
Arr(i) = Arr(j)
Arr(j) = Tam
End If
Next j
Next i
For i = 0 To UBound(Arr)
Rows(Arr(i)).Cut
PasteRng.EntireRow.Insert Shift:=xlDown
Set PasteRng = PasteRng.Offset(-1)
For j = i + 1 To UBound(Arr)
If Arr(j) > PasteRng.Row Then Arr(j) = Arr(j) + 1
Next j
Next i
Err:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Chọn các dòng muốn chuyển, chạy Sub MoveRow(), khi hiên ra InputBox thì chọn dòng mà bạn muốn chèn.

Ếch Xanh
15-10-10, 12:43 PM
Có một điểm chưa hay Hữu Thắng ơi, nếu danh sách cả ngàn người mà chọn từng mục, chuyển từng mục thì có mà chết! Phải làm cái gì đó, cột phụ chẳng hạn để xác định điều kiện mục được chuyển thì lúc đó mới làm một lượt dễ dàng hơn. Tôi nghĩ là vậy.

xuan.nguyen82
15-10-10, 12:54 PM
Chỉ hiểu đơn giản công việc này là những dữ liệu dòng đang lung tung, mình muốn nhóm lại cho dễ nhìn và quản lý lượng nhân viên (nhân viên công ty mình gần 1000 người). Mình rất cảm ơn các bạn đã đưa ra những ý kiến.
Mình trả lời bạn ChanhTQ@ nhé: Khi chuyển nhân viên lên hợp đồng 1 năm, sau này vẫn chuyển nữa (chuyển lên hợp đồng Vô thời hạn). Và mình bôi màu để gửi lên diễn đàn cho các bạn dễ nhìn thôi, mình không căn cứ vào màu sắc đâu.
Cảm ơn các bạn nhiều!

xuan.nguyen82
15-10-10, 01:09 PM
Có lẽ mình vẫn phải làm theo cách của mình là: bôi cùng màu cho những nhân viên được chuyển lên hợp đồng, sau đó dùng Data, sắp xếp và lọc dữ liệu theo màu, cắt nhóm có màu quy định (đuợc lên hợp đồng) đó lên vậy.
Cảm ơn tất cả các bạn và mình vẫn chờ câu trả lời của các bạn!

xuan.nguyen82
15-10-10, 01:26 PM
Tiện đây cho mình hỏi một vấn đề về in ấn. Mình dùng máy HP 2050 PCL6. Khi mình in hợp đồng lao động lại báo lỗi:
PCL XL error
Subsystem: KERNEL
Error: IllegalopratorSequence
Operator: Endchar
Position:67.
Mình đã lên mạng sỏrt và có đơợc trang dịch này:
PCL XL lỗi


Subsystem: KERNEL
Phân hệ: KERNEL


Error: IllegalOperatorSequence
Lỗi: IllegalOperatorSequence


Operator: EndChar
Điều Hành: EndChar


Position: 23
Vị trí: 23
Mình đọc mà chả hiểu gì.
Có bạn nào đã từng bị lỗi như mình không? và đã giải quyết như thế nào? chỉ cho mình với nhé. Mày mình không phải máy chủ của máy in, mà máy in này liên kết cả phòng cùng in.
Cảm ơn các bạn nhiều!

huuthang_bd
15-10-10, 01:36 PM
Có một điểm chưa hay Hữu Thắng ơi, nếu danh sách cả ngàn người mà chọn từng mục, chuyển từng mục thì có mà chết! Phải làm cái gì đó, cột phụ chẳng hạn để xác định điều kiện mục được chuyển thì lúc đó mới làm một lượt dễ dàng hơn. Tôi nghĩ là vậy.
Nếu vậy thì chỉ cần sửa code lại một chút thôi mà. Nếu có một chút kiến thức về VBA thì sửa lại không khó đâu. Nếu bạn xuan.nguyen82 không tự sửa được thì nói rõ cách nhận biết những dòng sẽ chuyển tôi sẽ sửa code lại.

Tôi cũng nói thêm là nếu có một cột phụ để xác định các dòng cần di chyển thì mọi chuyện sẽ đơn giản hơn.

xuan.nguyen82
15-10-10, 07:31 PM
Mình rất "gà" về VBA. Nhờ các bạn giúp đỡ. Vậy cách nhận biết những dòng cần chuyển là có màu đỏ, hoặc như hai bạn nói là có cột phụ, vậy mình sẽ thêm cột ở cuối, những dòng có dấu X là những dòng cần chuyển.
Cảm ơn các bạn!

HYen17
15-10-10, 09:01 PM
Vậy cách nhận biết những dòng cần chuyển là có màu đỏ, hoặc như hai bạn nói là có cột phụ, vậy mình sẽ thêm cột ở cuối, những dòng có dấu X là những dòng cần chuyển.

Theo mình biết, các loại hợp đồng là không nhiều;
Vậy tại sao bạn ấn định các thể loại này mỗi thể loại 1 mã, ví dụ 6T, N, 3N, DH, TV, 2T,. . .

Để việc chuyển đi & chuyển về loại nào đó là thuận tiên bằng menu filter hay bằng cách sắp xếp theo trường này.


Vui nếu giúp được bạn 1 tẹo nào đó.

xuan.nguyen82
17-10-10, 07:27 AM
Mình có các loại hợp đồng 1 năm, ký hiệu AO, đào tạo, ký hiệu T, thời vụ (AC), partime (P)...Vấn đề ở đây mình cần chuyển những nhân viên từ hợp đồng AC lên AO chẳng hạn. không phải ai cũng được chuyển, nếu dùng fiter rồi kích chuột chọn từng người thì lâu lắm bạn ạ. Có lẽ mình chưa tìm được câu trả lời ưng ý. Cảm ơn các bạn rất nhiều!

haonlh
17-10-10, 09:01 AM
Bạn thêm cột tên gì cũng được. Tôi gửi lại file và tên cột là "hệ số vị trí". Trong file đó có 2 nhóm: nhóm 1 năm đánh số 2, các hàng trắng tiếp theo đánh số 1, nhóm còn lại bỏ trắng.

Khi ai đó cần chuyển lên nhóm 1 năm, bạn nhập vào cột "hệ số vị trí" số 2. Sau đó sort giảm dần theo cột này.

Dữ liệu của bạn có dồn 2 ô (ô STT) nên khó sort. Thêm 1 hàng giữa phần tiêu đều của bảng và ẩn nó đi (trong file gửi kèm là hàng 4)

Nếu dữ liệu của bạn có nhiều khối hơn, nên tự xác định "hệ số vị trí" cho từng người. Sau quyết định điều chuyển hợp đồng thì hệ số vị trí của người đó được sửa và bạn chỉ còn sort giảm dần

Chúc thành công