Copy nhiều vùng sang sheet khác.

Liên hệ QC

duongsatdn

Thành viên tiêu biểu
Tham gia
15/6/07
Bài viết
455
Được thích
393
Nhờ các bạn sửa giúp file này. Tôi muốn copy nhiều vùng chọn trong sheet 1 sang sheet 2 sao cho các vùng gốc nối tiếp nhau trong sheet 2 theo cột. Nhung kết quả cứ bị mất dòng cuối cùng của vùng đầu tiên. Rõ ràng là thiếu một dòng lệnh nào đó.
 

File đính kèm

  • Copy nhieu vung sang sheet khac2.rar
    7.7 KB · Đọc: 131
Nếu chỉ với yêu như vậy, thì Nút lệnh bạn đặt ở sheet2 và gán với Macro sau
Mã:
Sub Copy()
Dim r As Integer
r = WorksheetFunction.CountA(Range("A:A")) + 1
Range(Cells(r, 1), Cells(r + 14, 2)).Value = Sheet1.Range("E1:F15").Value
End Sub
Vừa ngắn gọn vừa chạy nhanh.

Thân!
 
Lần chỉnh sửa cuối:
- Của mình làm hơi dài dong nhưng củng góp phần bon chen, chú thích dể hiểu hì hì.
Mã:
Sub Copy()
Dim i, j, k, t, m: i = 1: j = 1: t = 1
[COLOR=seagreen][COLOR=seagreen]'Kiem tra dong trong sheet2 dong j cot 1[/COLOR]
[/COLOR]Do
  If Sheet2.Cells(j, 1) = "" Then
     [COLOR=seagreen]' neu trong gan' k = j
[/COLOR]    k = j
    [COLOR=seagreen] ' kiem tra sheet1 neu trong thi` thoat vong do
     ' nguoc lai thi in qua sheet2[/COLOR]
     Do
       If Sheet1.Cells(i, 1) = "" Then
          Exit Do
       Else
          Sheet2.Cells(k, 1) = Sheet1.Cells(i, 1)
          Sheet2.Cells(k, 2) = Sheet1.Cells(i, 2)
         [COLOR=seagreen]' Tang len 1 dong
[/COLOR]         k = k + 1
       End If
     i = i + 1
     Loop
   [COLOR=seagreen] ' Gan m = k de chon dong tiep theo cua k
[/COLOR]    m = k
     [COLOR=seagreen]' neu sheet1 cot 5 = "" thoat vong do
     ' nguoc lai thi in qua qua sheet2[/COLOR]
     Do
       If Sheet1.Cells(t, 5) = "" Then
          Exit Do
       Else
          Sheet2.Cells(m, 1) = Sheet1.Cells(t, 5)
          Sheet2.Cells(m, 2) = Sheet1.Cells(t, 6)
          m = m + 1
       End If
     t = t + 1
     Loop
  End If
  Exit Do
j = j + 1
Loop
End Sub
 
Nguyên văn bởi dmtdmtbb
Của mình làm hơi dài dong nhưng củng góp phần bon chen, chú thích dể hiểu hì hì.
Mình cảm thấy đoạn code trên có thể rút gọn thêm được. Bạn Trí xem thử thế nào nhé:
Sub Copy()
Dim i, j: j = 1: i = 1
If Sheet2.Cells(j, 1) = "" Then
Do
If Sheet1.Cells(i, 1) = "" Then
Exit Do
Else
Sheet2.Cells(j, 1) = Sheet1.Cells(i, 1)
Sheet2.Cells(j, 2) = Sheet1.Cells(i, 2)
j = j + 1
End If
i = i + 1
Loop
i = 1
Do
If Sheet1.Cells(i, 5) = "" Then
Exit Do
Else
Sheet2.Cells(j, 1) = Sheet1.Cells(i, 5)
Sheet2.Cells(j, 2) = Sheet1.Cells(i, 6)
j = j + 1
End If
i = i + 1
Loop
End If
End Sub
 
- Có chỉnh lại một chút bỏ bớt biến thừa đi, đoạn code trên do dặt sai vị trí của Exit do nên vòng Do không có tác dụng, bác thử chạy lại sẽ hiểu ý đồ của vòng Do là gì.
- Có điều này lưu ý thêm, bác nên đặt - '['code']' mã chương trình '['/code']' cho nó đẹp và nhìn vô hiểu cấu trúc ngay
Mã:
Sub Copy2()
Dim i, j, k: [COLOR=red]i = 1[/COLOR]: j = 1
[COLOR=blue]Do
  If Sheet2.Cells(j, 1) = "" Then
      k = j[/COLOR]
      [COLOR=red]Do[/COLOR]
       If Sheet1.Cells(i, 1) = "" Then
          [COLOR=red]Exit Do[/COLOR]
       Else
          Sheet2.Cells(k, 1) = Sheet1.Cells(i, 1)
          Sheet2.Cells(k, 2) = Sheet1.Cells(i, 2)
          k = k + 1
       End If
     [COLOR=red]i = i + 1[/COLOR]
[COLOR=red]     Loop[/COLOR]
    [COLOR=magenta] i = 1[/COLOR]
[COLOR=magenta]     Do[/COLOR]
       If Sheet1.Cells(i, 5) = "" Then
          [COLOR=magenta]Exit Do[/COLOR]
       Else
          Sheet2.Cells(k, 1) = Sheet1.Cells(i, 5)
          Sheet2.Cells(k, 2) = Sheet1.Cells(i, 6)
          k = k + 1
       End If
     [COLOR=magenta]i = i + 1[/COLOR]
[COLOR=magenta]     Loop[/COLOR]
  [COLOR=blue]Exit Do
[/COLOR]End If
[COLOR=blue]j = j + 1
Loop[/COLOR]
End Sub
 
Lần chỉnh sửa cuối:
Nguyên văn bởi dmtdmtbb
- Có chỉnh lại một chút bỏ bớt biến thừa đi, đoạn code trên do dặt sai vị trí của Exit do nên vòng Do không có tác dụng, bác thử chạy lại sẽ hiểu ý đồ của vòng Do là gì.
Thế sao không bấm 1 cái Thanks hè???!!!
 
dmtdmtbb đã viết:
- Có chỉnh lại một chút bỏ bớt biến thừa đi, đoạn code trên do dặt sai vị trí của Exit do nên vòng Do không có tác dụng, bác thử chạy lại sẽ hiểu ý đồ của vòng Do là gì.
tedaynui đã viết:
- Nếu chỉ với yêu như vậy, thì Nút lệnh bạn đặt ở sheet2 và gán với Macro...
Cảm ơn các bạn. Tôi làm thử và thấy với macro của bạn dmtdmtbb, Nút lệnh đặt ở sheet1 vẫn cho ra kết quả đúng.
 
Lần chỉnh sửa cuối:
duongsatdn đã viết:
Cảm ơn các bạn. Tôi làm thử và thấy với macro của bạn dmtdmtbb, Nút lệnh đặt ở sheet1 vẫn cho ra kết quả đúng.
Thật ra muốn đặt Nút lệnh ở bất kỳ sheet nào cũng được. Bạn chỉ việc thêm vào trước Range(...) là Sheet2.Range(...)Thân!
TDN
 
Web KT
Back
Top Bottom