hongphuong1997
Thành viên tiêu biểu

- Tham gia
- 12/11/17
- Bài viết
- 773
- Được thích
- 323
- Giới tính
- Nữ
Nhờ anh chị giúp bài như file đính kèm
Em xin cảm ơn.
Sub abc()
Dim LR As Long
LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 1
With Sheets("PTDL")
.Range("B3:L8").Copy Sheets("PTDL").Range("B" & LR)
End With
End Sub
Có nhiều khi cũng chưa đúng ý chủ Topic, xem lại dữ liệu dòng 5 với dòng 14 (bài 1) dữ liệu là khác nhau.Thử:
PHP:Sub abc() Dim LR As Long LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 1 With Sheets("PTDL") .Range("B3:L8").Copy Sheets("PTDL").Range("B" & LR) End With End Sub
Bác à, chủ Topic yêu cầu đưa dữ liệu bảng 1 xuống dòng cuối bảng 2. Đâu phải lấy kết quả giống bảng 2 đâu bác?Có nhiều khi cũng chưa đúng ý chủ Topic, xem lại dữ liệu dòng 5 với dòng 14 (bài 1) dữ liệu là khác nhau.
Cái vụ này có thể chủ Topic đưa ra ví dụ sai.
Thì tôi có nêu rồi:Bác à, chủ Topic yêu cầu đưa dữ liệu bảng 1 xuống dòng cuối bảng 2. Đâu phải lấy kết quả giống bảng 2 đâu bác?
ơ không phải anh ơi (Không biết có phải là anh không mọi người sui em như vậy)Thử:
PHP:Sub abc() Dim LR As Long LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 1 With Sheets("PTDL") .Range("B3:L8").Copy Sheets("PTDL").Range("B" & LR) End With End Sub
Cháu không sai đâu bác @be09 có anh @phulien1902 đang làm lệch đề bác oyThì tôi có nêu rồi:
Cái vụ này có thể chủ Topic đưa ra ví dụ sai.
Em sửa lại như này cho anh dễ hiểu anhThử:
PHP:Sub abc() Dim LR As Long LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 1 With Sheets("PTDL") .Range("B3:L8").Copy Sheets("PTDL").Range("B" & LR) End With End Sub
Đọc lại bài 3.ơ không phải anh ơi (Không biết có phải là anh không mọi người sui em như vậy)
............................................
Cháu không sai đâu bác @be09 có anh @phulien1902 đang làm lệch đề bác oy
Đơn giản mà:ơ không phải anh ơi (Không biết có phải là anh không mọi người sui em như vậy)
Lấy dữ liệu xuống dòng cuối cùng như bảng 2 cơ mà anh.
Đằng này anh lại lấy giữ liệu của bảng 2 về vị trí cũ rồi.
Anh xem lại giúp em với anh
phulien1902
Bài đã được tự động gộp:
Cháu không sai đâu bác @be09 có anh @phulien1902 đang làm lệch đề bác oy
Bài đã được tự động gộp:
Em sửa lại như này cho anh dễ hiểu anh
phulien1902
Sub abc2()
Dim LR As Long
LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 4
With Sheets("PTDL")
.Range("B3:F8").Copy Sheets("PTDL").Range("B" & LR)
.Range("H3:J8").Copy Sheets("PTDL").Range("H" & LR)
.Range("G3:G8").Copy Sheets("PTDL").Range("G" & LR + 1)
.Range("K3:K8").Copy Sheets("PTDL").Range("K" & LR + 2)
End With
End Sub
Cảm ơn anh, làm như này thì thủ công quá anh ơi, anh thử nghĩ xem có cách khác không anh?Đơn giản mà:
PHP:Sub abc2() Dim LR As Long LR = Sheets("PTDL").Cells(Rows.Count, "B").End(xlUp).Row + 4 With Sheets("PTDL") .Range("B3:F8").Copy Sheets("PTDL").Range("B" & LR) .Range("H3:J8").Copy Sheets("PTDL").Range("H" & LR) .Range("G3:G8").Copy Sheets("PTDL").Range("G" & LR + 1) .Range("K3:K8").Copy Sheets("PTDL").Range("K" & LR + 2) End With End Sub
Hãy chờ thành viên khác viết bài, tôi dừng tại đây.Cảm ơn anh, làm như này thì thủ công quá anh ơi, anh thử nghĩ xem có cách khác không anh?
Em cứ tưởng bài này rất dễ, chỉ cần tìm dòng cuối có dữ liệu của bảng 1 sau đó kéo nó xuống bảng 2 là xongHãy chờ thành viên khác viết bài, tôi dừng tại đây.
hi hi.... anh viết code giúp em vớiBài này dễ không mà, cứ dùng vba kiểu gì chả ra, mà sao không dùng chuột với bàn phím cho nhanh. Dùng tính năng chèn cột xem có được hơm.
hi hi.... anh viết code giúp em với
Bởi vì nó có nhiều bảng tính và có dữ liệu lớn anh ơi,
Cái lạ như vậy thì mới quan trọng anh àAnh không biết em làm báo cáo hình dáng nó sẽ ra sao nhưng trong 147 bài viết của em ít nhiều anh thấy nhiều cái VBA em cần rất lạ.![]()
Bật mí cái Form đi để chiêm ngưỡng và dễ hình dung hơn đó em. heheCái lạ như vậy thì mới quan trọng anh à
Kiểu dữ liệu cần phải như vậy để phục vụ cho mục đích khác
Form gì hở anh?Bật mí cái Form đi để chiêm ngưỡng và dễ hình dung hơn đó em. hehe
Đăng thớt chủ yếu là giao lưu thả thính. Chứ cứ vba hoài nhức mắt lắm, hãy coi mõi thớt như một trò chơi, nó sẽ nhẹ nhàng cực.Anh không biết em làm báo cáo hình dáng nó sẽ ra sao nhưng trong 147 bài viết của em ít nhiều anh thấy nhiều cái VBA em cần rất lạ.![]()
Như vậy mà bác cũng không giải được???Để ý 10 cái chủ đề của chủ thớt/ chủ mẹt thấy rất ngộ nghĩnh, dễ thương như chủ thớt vậy.
Mỗi chủ đề giống như một tập phim Tom & Jerry.![]()
Anh hứa viết cho em mà chảng thấy đâu cả anhĐăng thớt chủ yếu là giao lưu thả thính. Chứ cứ vba hoài nhức mắt lắm, hãy coi mõi thớt như một trò chơi, nó sẽ nhẹ nhàng cực.
Cái anh này toàn đi chọc ngang người khác nhéHị hị, tớ phải đi lo chyện trằng sao của mình. Bộ vba giúp tớ kiếm được ny chắc? Múc luôn.
Nhớ là chưa bao giờ phá ai thid phải. Chỉ là "tui là người yéu chinh chiến dài lâu nên mộng vba tôi nghe đã chìm sâu."Cái anh này toàn đi chọc ngang người khác nhé
Anh toàn đi khiêu khích phá đám người khác
Không giúp ai được việc gì?
Đi xe kích chắc. Bài này khó vãi nước ra. Chắc sài table pivot chắc được.Bài này mà không ai làm ra kết quả bác
SA_DQ
ơi giúp cháu với
Buồn quá, bài này tưởng là dễ hoa ra lại là rất khó, không có đáp án rồi...hu hu........Bài này mà không ai làm ra kết quả bác
SA_DQ
ơi giúp cháu với
Phải tự hỏi lòng tại ăn ở thế nào và cần phải giải thích cái ví dụ cụ thể cái cần, bài 1 giải thích thì mù mờ còn đưa ra ví chẳng ai hiểu thì giúp cái gì bây giờ?Buồn quá, bài này tưởng là dễ hoa ra lại là rất khó, không có đáp án rồi...hu hu........
Chắc tại câu hỏi của em khó hiểu quá thôi, kéo là copy hay cut rồi paste. Dữ liệu các cột có ô trống không? Nếu dữ liệu bảng 1 cột B không có ô trống thì có thể dùng lệnhBuồn quá, bài này tưởng là dễ hoa ra lại là rất khó, không có đáp án rồi...hu hu........
Bác xemlại cháu diễn giải như này bác nhéPhải tự hỏi lòng tại ăn ở thế nào và cần phải giải thích cái ví dụ cụ thể cái cần, bài 1 giải thích thì mù mờ còn đưa ra ví chẳng ai hiểu thì giúp cái gì bây giờ?
Bài 3 tôi thấy và nêu rất rõ "xem lại dữ liệu dòng 5 với dòng 14 (bài 1) dữ liệu là khác nhau". Người ta không hiểu lý do tại sao nó khác sao?
Anh xem lại file giúp em anh nhé>Chắc tại câu hỏi của em khó hiểu quá thôi, kéo là copy hay cut rồi paste. Dữ liệu các cột có ô trống không? Nếu dữ liệu bảng 1 cột B không có ô trống thì có thể dùng lệnh
Dim r as range
Set r=range("B3:L" & range("B2").end(xldown).row)
R.copy cells(18-r.rows.count,2)
Nếu tất cả các cột đều có ô trống thì xác định dòng cuối bảng 1 bằng cách tìm max row của các ô B10 đến L10.end(xlup).row rồi làm như tương tự trên.
Bạn diễn đạt khó hiểu nên mọi người không hiểu để giúp bạn được.Bác xemlại cháu diễn giải như này bác nhé
Anh xem lại file giúp em anh nhé>
Các cột sẽ có các ô trống ở bên dưới
Vâng đúng rồi anh à, Cảm ơn anh!Bạn diễn đạt khó hiểu nên mọi người không hiểu để giúp bạn được.
Nếu mình hiểu đúng thì ý bạn đang muốn như trong file đính kèm.
P/S: Mình dân xài hàm, không rành vba.
Chờ có người rành vba sẽ nhìn hàm để hiểu bạn đang muốn gì và viết cho bạn. Mình chỉ biết record thôi.Vâng đúng rồi anh à, Cảm ơn anh!
Không viết đươch VBA hở anh?
Vâng em cảm ơn anh, Chắc là sẽ có các anh chị viết code giúp anh à.Chờ có người rành vba sẽ nhìn hàm để hiểu bạn đang muốn gì và viết cho bạn. Mình chỉ biết record thôi.
Mình gửi lại cách diễn đạt theo ý muốn của bạn để mọi người giúp đỡ viết code vba.
Chủ thớt năn nỉ quá mà sao không thấy ai viết code hết vậy ta. Bài này cũng khó nhưng cũng có thể viết đượcEm đã ghi macro như này, nhưng không biết làm vòng lặp như nào, nhờ các anh giúp đỡ
Sub Keo_Du_Lieu()
Dim sArr(), i As Long, j As Long, ii As Long
sArr = Sheets("PTDL").Range("B3:L8").Value
For j = 1 To UBound(sArr, 2)
For i = UBound(sArr) To 1 Step -1
If sArr(i, j) = Empty Then
For ii = i To 1 Step -1
If sArr(ii, j) <> Empty Then
sArr(i, j) = sArr(ii, j)
sArr(ii, j) = Empty
Exit For
End If
Next
End If
Next
Next
Sheets("PTDL").[B12].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Cảm ơn anhChủ thớt năn nỉ quá mà sao không thấy ai viết code hết vậy ta. Bài này cũng khó nhưng cũng có thể viết được
Bạn thử code này coi đúng không nhé
Mã:Sub Keo_Du_Lieu() Dim sArr(), i As Long, j As Long, ii As Long sArr = Sheets("PTDL").Range("B3:L8").Value For j = 1 To UBound(sArr, 2) For i = UBound(sArr) To 1 Step -1 If sArr(i, j) = Empty Then For ii = i To 1 Step -1 If sArr(ii, j) <> Empty Then sArr(i, j) = sArr(ii, j) sArr(ii, j) = Empty Exit For End If Next End If Next Next Sheets("PTDL").[B12].Resize(UBound(sArr), UBound(sArr, 2)) = sArr End Sub
PS: Đọc bài 20 của chủ thớt thì mình dự đoán đây là một siêu cao thủ code tiềm năng.
Dữ liệu mẫu có gì đó không ổn. Vì nếu đúng như vậy thì chỉ cần copy paste là xong rồi, viết code mần chi chứCảm ơn anh
quanghai1969
! Sắp được rồi anh à
Anh sửa thêm giúp em là vẫn giữ nguyên khoảng trống giữa các ô như file đính kèm anh nhé (Em tô màu vàng)!
Anh ơi bởi vì không có ai viết cho em nên em thay đổi khoảng trống để dễ viết, thật ra thì nó không phải là dãy ô liên tục anh àDữ liệu mẫu có gì đó không ổn. Vì nếu đúng như vậy thì chỉ cần copy paste là xong rồi, viết code mần chi chứ
Có phải ý của bạn là khi nhập dữ liệu ở bảng 1 thì nó cũng sẽ tự động copy xuống bảng 2 không bạn?Anh ơi bởi vì không có ai viết cho em nên em thay đổi khoảng trống để dễ viết, thật ra thì nó không phải là dãy ô liên tục anh à
Anh tìm cách sửa lại code cho em với anh nhé
Cảm ơn anh!
không phải như vậy bạn à.Có phải ý của bạn là khi nhập dữ liệu ở bảng 1 thì nó cũng sẽ tự động copy xuống bảng 2 không bạn?
Là sao? Nếu có dữ liệu rồi, bạn chỉ cần copy xuống cả cụm là xong, sao lại phải thế nhỉ? Hay ý bạn là bảng 1 của bạn có nhiều dòng và giờ phải xác định dòng cuối cùng của bảng 1 và lấy dòng đó copy xuống dòng cuối cùng bảng 2?không phải như vậy bạn à.
Ý của mình là bảng 1 đã có sắn rồi
Nhưng bây giờ là lấy dòng cuối của các cột trên bảng 1 copy xuống cho nó bằng nhau bạn à
Bạn nên cung cấp dữ liệu thật để mọi người nghiên cứu thử. Chứ dữ liệu tạm kiểu này khó ra đúng ý lắm à. vì dữ liệu của bài 36 thì không cần code két gì cả. chỉ copy paste 1 cái là xongAnh ơi bởi vì không có ai viết cho em nên em thay đổi khoảng trống để dễ viết, thật ra thì nó không phải là dãy ô liên tục anh à
Anh tìm cách sửa lại code cho em với anh nhé
Cảm ơn anh!
Cảm ơn anhBạn nên cung cấp dữ liệu thật để mọi người nghiên cứu thử. Chứ dữ liệu tạm kiểu này khó ra đúng ý lắm à. vì dữ liệu của bài 36 thì không cần code két gì cả. chỉ copy paste 1 cái là xong
Hên thì trúng ý hén. Những dạng bài thế này dễ bỏ chạy lắm àCảm ơn anh
Nó là như này anh à!
Sub Keo_Du_Lieu()
Dim sArr(), i As Long, j As Long, ii As Long, dArr()
sArr = Sheets("PTDL").Range("B3:L8").Value
ReDim dArr(1 To UBound(sArr), 1 To UBound(sArr, 2))
For i = 1 To UBound(sArr)
If sArr(i, 1) <> Empty Then
ii = ii + 1
For j = 1 To UBound(sArr, 2)
dArr(i, j) = sArr(i, j)
Next
End If
Next
Sheets("PTDL").[B12].Offset(ii).Resize(UBound(dArr) - ii, UBound(dArr, 2)) = dArr
End Sub
Cảm ơn anhHên thì trúng ý hén. Những dạng bài thế này dễ bỏ chạy lắm à
Mã:Sub Keo_Du_Lieu() Dim sArr(), i As Long, j As Long, ii As Long, dArr() sArr = Sheets("PTDL").Range("B3:L8").Value ReDim dArr(1 To UBound(sArr), 1 To UBound(sArr, 2)) For i = 1 To UBound(sArr) If sArr(i, 1) <> Empty Then ii = ii + 1 For j = 1 To UBound(sArr, 2) dArr(i, j) = sArr(i, j) Next End If Next Sheets("PTDL").[B12].Offset(ii).Resize(UBound(dArr) - ii, UBound(dArr, 2)) = dArr End Sub
Thấy đúng rồi mà. Test code kỹ vào cưng ơi.
Chưa kéo được cột "K" và cột "G" xuống anh à.Thấy đúng rồi mà. Test code kỹ vào cưng ơi.
Không biết code kiểu này để làm gìCảm ơn anh
Nó là như này anh à!
Sub GPE()
Dim sArr(), Res()
Dim i As Long, j As Long, ik As Long, sRow As Long
sArr = Sheets("PTDL").Range("B3:L8").Value
sRow = UBound(sArr)
ReDim Res(1 To sRow, 1 To UBound(sArr, 2))
For j = 1 To UBound(sArr, 2)
ik = sRow + 1
For i = sRow To 1 Step -1
If Len(sArr(i, j)) Then
For n = i To 1 Step -1
ik = ik - 1
Res(ik, j) = sArr(n, j)
Next n
Exit For
End If
Next i
Next j
Sheets("PTDL").Range("B12").Resize(sRow, UBound(Res, 2)) = Res
End Sub
Sub test1()
Dim i, j, k As Integer
Dim a, b, vLue, vCopy
For k = 2 To 12
For i = 3 To 8
vLue = Sheets(1).Cells(i, k)
If vLue <> "" Then
a = i
End If
Next i
b = 17 - a
For j = 3 To a
vCopy = Sheets(1).Cells(j, k)
Sheets(1).Cells(j + b, k) = vCopy
Next j
Next k
End Sub
Rút gon code lạiXin phép @Thớt và anh @HieuCD , Thấy các bạn bàn tán rôm rả tôi cũng muốn tham gia chút.
Trong file tôi dùng For - Next thay vì dùng mảng. Mong các bạn góp ý thêm.
@hongphuong1997 xem đúng ý cô chưa ?
Mã:Sub test1() Dim i, j, k As Integer Dim a, b, vLue, vCopy For k = 2 To 12 For i = 3 To 8 vLue = Sheets(1).Cells(i, k) If vLue <> "" Then a = i End If Next i b = 17 - a For j = 3 To a vCopy = Sheets(1).Cells(j, k) Sheets(1).Cells(j + b, k) = vCopy Next j Next k End Sub
Sub test1()
Dim i As Integer, j As Integer, k As Integer
Dim a As Integer, b As Integer
For k = 2 To 12
For i = 3 To 8
If Sheets(1).Cells(i, k).Value <> "" Then a = i
Next i
b = 17 - a
For j = 3 To a
Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value
Next j
Next k
End Sub
Cũng khá là tinh tế đó anhRút gon code lại
Mã:Sub test1() Dim i As Integer, j As Integer, k As Integer Dim a As Integer, b As Integer For k = 2 To 12 For i = 3 To 8 If Sheets(1).Cells(i, k).Value <> "" Then a = i Next i b = 17 - a For j = 3 To a Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value Next j Next k End Sub
Chắc chắn là không thể làm đẹp lòng cbur thớt rùi. Vì dữ liệu thực tế vài nghìn dòng. Chứ vài dòng thì copy bằng tay cho nó nhanhRút gon code lại
Mã:Sub test1() Dim i As Integer, j As Integer, k As Integer Dim a As Integer, b As Integer For k = 2 To 12 For i = 3 To 8 If Sheets(1).Cells(i, k).Value <> "" Then a = i Next i b = 17 - a For j = 3 To a Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value Next j Next k End Sub
Chỉ chỉnh code cho tạm ổn hơn thôiChắc chắn là không thể làm đẹp lòng cbur thớt rùi. Vì dữ liệu thực tế vài nghìn dòng. Chứ vài dòng thì copy bằng tay cho nó nhanh
Xem kỹ lại thì rõ ràng code của bài 44 sai tè le rồi. Hix. Đọc đề bài không cẩn thận.Chưa kéo được cột "K" và cột "G" xuống anh à.
Đó là ví dụ thôi. Còn tìm được cách làm rồi thì tự chỉnh code sao cho phù hợp nhất chứ ai biết mục đích thớt muốn làm cái gì đâu mà đoán với viết...Chắc chắn là không thể làm đẹp lòng cbur thớt rùi. Vì dữ liệu thực tế vài nghìn dòng. Chứ vài dòng thì copy bằng tay cho nó nhanh
Em thấy trong file bạn này ghi đề khá rõ ràng rồi mà. Chỉ có điều em không rõ mục đích là gì thôi.Tôi nghi ngờ cái ý tưởng của chủ Topic quá, có thể là vầy:
1/ Bảng 1 chứa dữ liệu trong vùng B3: L8.
2/ Lấy Cell cuối cùng của từng cột từ cột B: L.
3/ Mỗi lần lấy dữ liệu xong thì gán tiếp theo xuống dưới.
Được rồi bácKhông biết code kiểu này để làm gì
Mã:Sub GPE() Dim sArr(), Res() Dim i As Long, j As Long, ik As Long, sRow As Long sArr = Sheets("PTDL").Range("B3:L8").Value sRow = UBound(sArr) ReDim Res(1 To sRow, 1 To UBound(sArr, 2)) For j = 1 To UBound(sArr, 2) ik = sRow + 1 For i = sRow To 1 Step -1 If Len(sArr(i, j)) Then For n = i To 1 Step -1 ik = ik - 1 Res(ik, j) = sArr(n, j) Next n Exit For End If Next i Next j Sheets("PTDL").Range("B12").Resize(sRow, UBound(Res, 2)) = Res End Sub
Cũng nhiều người trả lời vào topic mà đã mất công cám ơn thì cứ nói cám ơn tất cả mọi người có mất gì đâu. Thật khiến dân tình phẫn nộ
Trời ơi!Rút gon code lại
Mã:Sub test1() Dim i As Integer, j As Integer, k As Integer Dim a As Integer, b As Integer For k = 2 To 12 For i = 3 To 8 If Sheets(1).Cells(i, k).Value <> "" Then a = i Next i b = 17 - a For j = 3 To a Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value Next j Next k End Sub
Vâng em quên! Cảm ơn tất cả các bác và anh chị đã giúp đỡ em nhé!Cũng nhiều người trả lời vào topic mà đã mất công cám ơn thì cứ nói cám ơn tất cả mọi người có mất gì đâu. Thật khiến dân tình phẫn nộ![]()
Nhưng anh ơi em muốn lấy số "0" ở đầu các số thì phải làm như nào hở anh?Xin phép @Thớt và anh @HieuCD , Thấy các bạn bàn tán rôm rả tôi cũng muốn tham gia chút.
Trong file tôi dùng For - Next thay vì dùng mảng. Mong các bạn góp ý thêm.
@hongphuong1997 xem đúng ý cô chưa ?
Mã:Sub test1() Dim i, j, k As Integer Dim a, b, vLue, vCopy For k = 2 To 12 For i = 3 To 8 vLue = Sheets(1).Cells(i, k) If vLue <> "" Then a = i End If Next i b = 17 - a For j = 3 To a vCopy = Sheets(1).Cells(j, k) Sheets(1).Cells(j + b, k) = vCopy Next j Next k End Sub
Rút gon code lại
Mã:Sub test1() Dim i As Integer, j As Integer, k As Integer Dim a As Integer, b As Integer For k = 2 To 12 For i = 3 To 8 If Sheets(1).Cells(i, k).Value <> "" Then a = i Next i ' 1. Biến a không được reset lại ở đầu hoặc cuối vòng lặp k, như vậy nếu không gặp ô thoả thì nó sẽ giữ lại trị của dòng trước nó ' Tôi khong rõ điều này có đúng ý định hay khong, nhưng nếu khong phải thì rất khó debug ' 2. Vòng lặp này tìm ô khác trống cuối cùng trong dãy ' Như vậy, bạn có thể đếm ngược từ 8 về 3, gặp không trống thì thoát. Code như vậy đọc dễ hiểu hơn. b = 17 - a For j = 3 To a Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value Next j Next k End Sub
Em cám ơn. Về biến a thì trong trường hợp này đúng là em đã quên không reset. Nó sẽ chạy sai nếu 1 cột bất kỳ không có dữ liệu (nói đúng hơn là chạy thừa, lãng phí, vì suy cho cùng nếu không có dữ liệu thì cũng không có gì để copy cả). Còn ý 2 "lập trình" cần tránh những gì em chưa rõ hết, nhưng vẫn xin ghi nhận góp ý của anh.Bạn nên coi chừng chỗ nguy hiểm của code (tôi chú thích trong code):
Chú: vòng lặp i và j hoàn toàn độc lập với nhau. Trên nguyên tắc, bạn có thể dùng lại biến i, khong cần dùng j. Vả lại một trong những điều mà lập trình nên tránh là dùng j làm chỉ số dòng.
Thì bạn ghi dạng Text của cell dữ liệu đó là được mà. Lưu ý là bảng 2 bạn cũng cần để định dạng text luônNhưng anh ơi em muốn lấy số "0" ở đầu các số thì phải làm như nào hở anh?
Viết code nhiều mà còn bị sơ sót khá nguy hiểmBạn nên coi chừng chỗ nguy hiểm của code (tôi chú thích trong code):
Chú: vòng lặp i và j hoàn toàn độc lập với nhau. Trên nguyên tắc, bạn có thể dùng lại biến i, khong cần dùng j. Vả lại một trong những điều mà lập trình nên tránh là dùng j làm chỉ số dòng.
@VetMini Em cũng thử viết theo cách anh hướng dẫn, không biết em viết đúng hay không?2. Vòng lặp này tìm ô khác trống cuối cùng trong dãy
' Như vậy, bạn có thể đếm ngược từ 8 về 3, gặp không trống thì thoát. Code như vậy đọc dễ hiểu hơn.
For i = 8 To 3 Step -1
If Sheets(1).Cells(i, k).Value <> "" Then
a = i
Exit For
End If
Next i
Em cảm ơn anh, code ngắn gọn quá anh.@VetMini Em cũng thử viết theo cách anh hướng dẫn, không biết em viết đúng hay không?
Mã:For i = 8 To 3 Step -1 If Sheets(1).Cells(i, k).Value <> "" Then a = i Exit For End If Next i
Cái này là mình theo chỉ dẫn của anh VetMiNi "Đếm từ dưới lên", mình viết tắt, hoàn chỉnh phải là :Em cảm ơn anh, code ngắn gọn quá anh.
Nhưng code không chạy được anh à
Sub test1()
Dim i As Integer, j As Integer, k As Integer
Dim a As Integer, b As Integer
For k = 2 To 12
For i = 8 To 3 Step -1
If Sheets(1).Cells(i, k).Value <> "" Then
a = i
Exit For
End If
Next i
b = 17 - a
For j = 3 To a
Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value
Next j
Next k
End Sub
Em cảm ơn anhCái này là mình theo chỉ dẫn của anh VetMiNi "Đếm từ dưới lên", mình viết tắt, hoàn chỉnh phải là :
Mã:Sub test1() Dim i As Integer, j As Integer, k As Integer Dim a As Integer, b As Integer For k = 2 To 12 For i = 8 To 3 Step -1 If Sheets(1).Cells(i, k).Value <> "" Then a = i Exit For End If Next i b = 17 - a For j = 3 To a Sheets(1).Cells(j + b, k).Value = Sheets(1).Cells(j, k).Value Next j Next k End Sub