chia một sheet thành nhiều sheet và từ mỗi sheet đó chia thêm cột

Liên hệ QC

kechuong

Thành viên mới
Tham gia
11/8/20
Bài viết
37
Được thích
3
mình có 1 file có 100 dòng chia thành 5 sheet mỗi sheet là 20 dòng, mình muốn từ mỗi sheet đó chia thành 5 cột mỗi cột là 20 dòng, rất mong nhận được giúp đỡ từ mọi người ạ !
 

File đính kèm

  • SplitData.xls
    40 KB · Đọc: 5
mình có 1 file có 100 dòng chia thành 5 sheet mỗi sheet là 20 dòng, mình muốn từ mỗi sheet đó chia thành 5 cột mỗi cột là 20 dòng, rất mong nhận được giúp đỡ từ mọi người ạ !
Bạn dùng thử file đính kèm nhé!
 

File đính kèm

  • SplitData 151267#2.xls
    39 KB · Đọc: 7

File đính kèm

  • SplitData 151267#4.xls
    40.5 KB · Đọc: 11
Bạn xem file đính kèm nhé.


bạn ơi ! mình còn 1 trường hợp : ví dụ mình có 89 dòng chia thành 5 sheet trước, rùi trong 5 sheet này mới chia ra thành 5 cột, mỗi cột 4 dòng, nhưng sheet 5 chỉ có 9 dòng và mình muốn sheet 5 sẽ là 3 cột thôi, hai cột 4 dòng, một cột 1 dòng thay vì là 5 cột như máy sheet trước, rất mong bạn giúp đỡ thêm !
 
bạn ơi ! mình còn 1 trường hợp : ví dụ mình có 89 dòng chia thành 5 sheet trước, rùi trong 5 sheet này mới chia ra thành 5 cột, mỗi cột 4 dòng, nhưng sheet 5 chỉ có 9 dòng và mình muốn sheet 5 sẽ là 3 cột thôi, hai cột 4 dòng, một cột 1 dòng thay vì là 5 cột như máy sheet trước, rất mong bạn giúp đỡ thêm !
Ngoài trường hợp này, bạn còn trường hợp nào khác không?
 
Bạn chạy và kiểm tra kết quả nhé!


Bạn ơi ! cho mình làm phiền bạn thêm xíu nữa nha ! ý mình là : ví dụ tăng thêm 4 dòng là 93 dòng thì sheet 5 là 13 dòng và mình muốn sheet 5 sẽ là 4 cột , ba cột 4 dòng(vì thống nhất tất cả các cột đều 4 dòng) , một cột 1 dòng , tức là số dư sẽ tự động lùi về sau 1 cột!
 
Bạn ơi ! cho mình làm phiền bạn thêm xíu nữa nha ! ý mình là : ví dụ tăng thêm 4 dòng là 93 dòng thì sheet 5 là 13 dòng và mình muốn sheet 5 sẽ là 4 cột , ba cột 4 dòng(vì thống nhất tất cả các cột đều 4 dòng) , một cột 1 dòng , tức là số dư sẽ tự động lùi về sau 1 cột!
Bạn chạy lại file đính kèm nhé.
 

File đính kèm

  • SplitData 151267#11.xls
    41 KB · Đọc: 12
Tôi nể phục bạn về tính nhẫn nại...
nếu là tôi thì đã "ra đi" từ lúc này rồi...

không ạ ! vì đôi khi có số dư nên mới sinh ra trường hợp như trên !
và nhất là khi lại có thêm...

Bạn ơi ! cho mình làm phiền bạn thêm xíu nữa nha ! ý mình là : ví dụ tăng thêm 4 dòng là 93 dòng thì sheet 5 là 13 dòng và mình muốn sheet 5 sẽ là 4 cột , ba cột 4 dòng(vì thống nhất tất cả các cột đều 4 dòng) , một cột 1 dòng , tức là số dư sẽ tự động lùi về sau 1 cột!
 
Bạn chạy lại file đính kèm nhé.
Theo tôi hiểu thì căn bản chia ở đây là phân mảng 1 chiều thành 3 chiều.
Với bài toán bình thường thì công thức phân khá dễ: Trang (sheet) > Dòng > Cột
Riêng bài này thì hơi đảo lộn chút: Trang > Cột > Dòng

Giả dụ bạn đã copy dữ liệu vào mảng a (copy từ sheet thì là mảng 2 chiều, chiều thứ hai chỉ có 1 cột)

Mã:
Const SOCOT = 5
Const SODONG = 4
Dim b(1 To SODONG, 1 To SOCOT) As String
soDuLieu = UBound(a) ' tổng số dữ liệu
iA = 0 ' đếm dòng mảng a
For trang = 1 To (soDuLieu - 1) \ (SOCOT * SODONG) + 1 ' công thức tính số trang
  For cot = 1 To SOCOT
    For dong = 1 To SODONG
      iA = iA + 1
      If iA <= soDuLieu Then
        b(dong, cot) = a(iA, 1)
      Else
        b(dong, cot) = ""
      End If
    Next dong
  Next cot
  Sheets("tên sheet" & trang).Range("A1").Resize(SODONG, SOCOT) = b ' chép mảng xuống sheet
Next trang
.
 
Tôi nể phục bạn về tính nhẫn nại...
nếu là tôi thì đã "ra đi" từ lúc này rồi...


và nhất là khi lại có thêm...
Theo tôi hiểu thì căn bản chia ở đây là phân mảng 1 chiều thành 3 chiều.
Với bài toán bình thường thì công thức phân khá dễ: Trang (sheet) > Dòng > Cột
Riêng bài này thì hơi đảo lộn chút: Trang > Cột > Dòng

Giả dụ bạn đã copy dữ liệu vào mảng a (copy từ sheet thì là mảng 2 chiều, chiều thứ hai chỉ có 1 cột)

Mã:
Const SOCOT = 5
Const SODONG = 4
Dim b(1 To SODONG, 1 To SOCOT) As String
soDuLieu = UBound(a) ' tổng số dữ liệu
iA = 0 ' đếm dòng mảng a
For trang = 1 To (soDuLieu - 1) \ (SOCOT * SODONG) + 1 ' công thức tính số trang
  For cot = 1 To SOCOT
    For dong = 1 To SODONG
      iA = iA + 1
      If iA <= soDuLieu Then
        b(dong, cot) = a(iA, 1)
      Else
        b(dong, cot) = ""
      End If
    Next dong
  Next cot
  Sheets("tên sheet" & trang).Range("A1").Resize(SODONG, SOCOT) = b ' chép mảng xuống sheet
Next trang
.


Code của bạn cũng rất hữu ích cho bài toán này, cám ơn bạn nhiều nha !
 
Web KT

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

Back
Top Bottom