Tự động xoay ngang dữ liệu khi nhóm đủ 7 giá trị

  • Thread starter Thread starter nero24
  • Ngày gửi Ngày gửi
Liên hệ QC

nero24

Thành viên mới
Tham gia
9/10/09
Bài viết
18
Được thích
0
Mình đang gặp vấn đề sau:

Cột A se chứa dữ liệu do mình copy vào, mỗi lần khoãng 100 số.
Mình muốn excel sẽ tự nhóm 7 số rồi xoay ngang qua nằm ở hàng B2:H2 ; 7 số kế tiếp sẽ xoay ngang nằm ở B3:H3
Sau khi xoay dãy số xong, có thể xóa dữ liệu bên cột A, mình nhập dữ liệu mới vào, nó sẽ xoay ngang và chèn tiếp vào các dong B4:H4

MÌnh có xài macro để xoay, nhưng khi mình chép dữ liệu mới vào thì nó xoay đè lên các dòng đã xoay trước đó.

Thanks all!
 

File đính kèm

Làm Macro thì OK rồi, nhưng công thức cũng ổn thôi

Tại ô B2 bạn nhập công thức: =OFFSET($A$1,ROW(1:1)-(8-COLUMN())+ROW(1:1)*6,0)

Bạn chép sang ngang 6 cột nữa và chép dài xuống dưới là có kết quả

Nếu dùng Code thì chỉ cần như sau cũng ổn vừa ngắn gọn,dễ hiểu, dễ điều chỉnh

Mã:
Sub GPE()
Dim Rg As Range, i
Set Rg = Range("A2:A" & [A65000].End(3).Row)
[B2:H65000].ClearContents
For i = 1 To Rg.Cells.Count
[B2:H65000].Cells.Item(i) = Rg.Cells.Item(i)
Next
End Sub
 
Lần chỉnh sửa cuối:
Làm Macro thì OK rồi, nhưng công thức cũng ổn thôi

Tại ô B2 bạn nhập công thức: =OFFSET($A$1,ROW(1:1)-(8-COLUMN())+ROW(1:1)*6,0)

Bạn chép sang ngang 6 cột nữa và chép dài xuống dưới là có kết quả

Cái này mà dùng công thức không ổn:
Sau khi xoay dãy số xong, có thể xóa dữ liệu bên cột A, mình nhập dữ liệu mới vào, nó sẽ xoay ngang và chèn tiếp vào các dong B4:H4
MÌnh có xài macro để xoay, nhưng khi mình chép dữ liệu mới vào thì nó xoay đè lên các dòng đã xoay trước đó.
Cái này cũng bị "đè":
PHP:
Range("B2").Resize(K, 7).Value = dArr
 
Lần chỉnh sửa cuối:
Cái này mà dùng công thức không ổn:

Cái này cũng bị "đè":
PHP:
Range("B2").Resize(K, 7).Value = dArr

Em hiểu rồi, Code của em phải là

Mã:
Sub GPE()
Dim Rg As Range, i
Set Rg = Range("A2:A" & [A65000].End(3).Row)
For i = WorksheetFunction.CountA([B2:H65000]) + 1 To Rg.Cells.Count
[B2:H65000].Cells.Item(i) = Rg.Cells.Item(i)
Next
End Sub

Còn làm thủ công thì sau khi dán nguồn xong chọn vùng kết quả chép và dán lại giá trị
 
Lần chỉnh sửa cuối:
Mình đang gặp vấn đề sau:

Cột A se chứa dữ liệu do mình copy vào, mỗi lần khoãng 100 số.
Mình muốn excel sẽ tự nhóm 7 số rồi xoay ngang qua nằm ở hàng B2:H2 ; 7 số kế tiếp sẽ xoay ngang nằm ở B3:H3
Sau khi xoay dãy số xong, có thể xóa dữ liệu bên cột A, mình nhập dữ liệu mới vào, nó sẽ xoay ngang và chèn tiếp vào các dong B4:H4

MÌnh có xài macro để xoay, nhưng khi mình chép dữ liệu mới vào thì nó xoay đè lên các dòng đã xoay trước đó.

Thanks all!
bạn chạy code sau
Mã:
Sub GPE()
Dim Arr(), i As Long, s As Long
Arr = Range("A2", Range("A65000").End(xlUp)).Value
s = WorksheetFunction.CountA(Range("B2:H65000"))
For i = 1 To UBound(Arr)
    Range("B2:H65000").Cells.Item(i + s) = Arr(i, 1)
Next i
End Sub
 
Em hiểu rồi, Code của em phải là

Mã:
Sub GPE()
Dim Rg As Range, i
Set Rg = Range("A2:A" & [A65000].End(3).Row)
For i = WorksheetFunction.CountA([B2:H65000]) + 1 To Rg.Cells.Count
[B2:H65000].Cells.Item(i) = Rg.Cells.Item(i)
Next
End Sub

Còn làm thủ công thì sau khi dán nguồn xong chọn vùng kết quả chép và dán lại giá trị

Do Tác giả hỏi và ví dụ chưa rõ, mỗi lần nhập khoảng 100 dòng.
100 dòng không chia hết cho 7, Ghi kết quả tiếp là tiếp vào dòng mới hay tiếp vào chỗ trống nếu có trên dòng cũ?
Ví dụ trong file:
lần 1: nhâp cột A từ số 1 đến số 12, gán vào cột B:H - Xóa cột A.
lần 2: nhập cột A từ GPE20 đến GPE34, kết quả sẽ được như B:H hay muốn kết quả như J:P
Vì chưa rõ nếu "áp" thí vào rồi lại "bị hỏi" tiếp.
 

File đính kèm

Do Tác giả hỏi và ví dụ chưa rõ, mỗi lần nhập khoảng 100 dòng.
100 dòng không chia hết cho 7, Ghi kết quả tiếp là tiếp vào dòng mới hay tiếp vào chỗ trống nếu có trên dòng cũ?
Ví dụ trong file:
lần 1: nhâp cột A từ số 1 đến số 12, gán vào cột B:H - Xóa cột A.
lần 2: nhập cột A từ GPE20 đến GPE34, kết quả sẽ được như B:H hay muốn kết quả như J:P
Vì chưa rõ nếu "áp" thí vào rồi lại "bị hỏi" tiếp.

Chào anh.
Ở trên tác giả đả nói là chèn tiếp vào B:H rồi mà, đâu liên quan gì tới j:p
Sau khi xoay dãy số xong, có thể xóa dữ liệu bên cột A, mình nhập dữ liệu mới vào, nó sẽ xoay ngang và chèn tiếp vào các dong B4:H4
 
Do Tác giả hỏi và ví dụ chưa rõ, mỗi lần nhập khoảng 100 dòng.
100 dòng không chia hết cho 7, Ghi kết quả tiếp là tiếp vào dòng mới hay tiếp vào chỗ trống nếu có trên dòng cũ?
Ví dụ trong file:
lần 1: nhâp cột A từ số 1 đến số 12, gán vào cột B:H - Xóa cột A.
lần 2: nhập cột A từ GPE20 đến GPE34, kết quả sẽ được như B:H hay muốn kết quả như J:P
Vì chưa rõ nếu "áp" thí vào rồi lại "bị hỏi" tiếp.

THanks ban, lần 2 thì sẽ gán vào B:H ở kế tiếp.
Vậy mỗi lần sẽ lấy 70 giá trị, chia hết cho 7, để bài tóa đỡ phức tạp.

Thanks all! Mình đang nghiên cứu mấy code của các bạn.
 
Lần chỉnh sửa cuối:
Làm Macro thì OK rồi, nhưng công thức cũng ổn thôi

Tại ô B2 bạn nhập công thức: =OFFSET($A$1,ROW(1:1)-(8-COLUMN())+ROW(1:1)*6,0)

Bạn chép sang ngang 6 cột nữa và chép dài xuống dưới là có kết quả

Nếu dùng Code thì chỉ cần như sau cũng ổn vừa ngắn gọn,dễ hiểu, dễ điều chỉnh

Mã:
Sub GPE()
Dim Rg As Range, i
Set Rg = Range("A2:A" & [A65000].End(3).Row)
[B2:H65000].ClearContents
For i = 1 To Rg.Cells.Count
[B2:H65000].Cells.Item(i) = Rg.Cells.Item(i)
Next
End Sub
View attachment 170393
Thanks bạn, code nầy còn 1 vấn đề là khi mình chép dữ liệu mới vào thì nó xoay đè lên dữ liệu cũ:
Ko biết có cách nào cho excel biết nếu có dữ liệu ở ô B2, thì ko chép dữ liệu lên đó, mà dò những dòng kế tiếp, khi nào trống thì mới chép lên.
 
View attachment 170393
Thanks bạn, code nầy còn 1 vấn đề là khi mình chép dữ liệu mới vào thì nó xoay đè lên dữ liệu cũ:
Ko biết có cách nào cho excel biết nếu có dữ liệu ở ô B2, thì ko chép dữ liệu lên đó, mà dò những dòng kế tiếp, khi nào trống thì mới chép lên.

Bạn dùng code bài #5 nha, bài cũ khi chưa hiểu hết yêu cầu nên còn tồn tại như vậy.
Code của mình lấy ô cuối cùng có dữ liệu dịch lên 1 ô bắt đầu là ô lấy dữ liệu mới. Vậy nên, nếu sửa đổi trong vùng đích có dữ liệu thì không bị đè nên. Nhưng 1 vấn đề là những ô nguồn bạn không đuọc xóa, vì code sẽ bỏ qua số ô bằng số ô có dữ liệu trong vùng đích Vậy nếu bạn xóa bớt thì nó sẽ bỏ qua tràn sang vùng mới chép. Nếu tôn trọng vậy mình tin là nó sẽ làm đúng.
 
Lần chỉnh sửa cuối:
Em hiểu rồi, Code của em phải là

Mã:
Sub GPE()
Dim Rg As Range, i
Set Rg = Range("A2:A" & [A65000].End(3).Row)
For i = WorksheetFunction.CountA([B2:H65000]) + 1 To Rg.Cells.Count
[B2:H65000].Cells.Item(i) = Rg.Cells.Item(i)
Next
End Sub

Còn làm thủ công thì sau khi dán nguồn xong chọn vùng kết quả chép và dán lại giá trị

Đoạn code nầy sao nó ko chay j nhỉ, cũng ko báo lỗi j luôn
 
bạn chạy code sau
Mã:
Sub GPE()
Dim Arr(), i As Long, s As Long
Arr = Range("A2", Range("A65000").End(xlUp)).Value
s = WorksheetFunction.CountA(Range("B2:H65000"))
For i = 1 To UBound(Arr)
    Range("B2:H65000").Cells.Item(i + s) = Arr(i, 1)
Next i
End Sub

Thanks bạn, code nầy của bạn chạy OK rồi
 

File đính kèm

View attachment 170393
Thanks bạn, code nầy còn 1 vấn đề là khi mình chép dữ liệu mới vào thì nó xoay đè lên dữ liệu cũ:
Ko biết có cách nào cho excel biết nếu có dữ liệu ở ô B2, thì ko chép dữ liệu lên đó, mà dò những dòng kế tiếp, khi nào trống thì mới chép lên.

Nếu vậythì bạn xài code ở bài #2 bên trên.
Tìm dòng này:
PHP:
If K Then Range("B2").Resize(K, 7).Value = dArr
Thay bằng cái này:
PHP:
If K Then Range("B65536").End(xlUp).Offset(1).Resize(K, 7).Value = dArr
 
Web KT

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

Back
Top Bottom