[Excel] Gán macro cho button

  • Thread starter vtbinh2007
  • Ngày gửi
V

vtbinh2007

Guest
14/2/16
4
0
1
46
Nhờ các chuyên gia giúp mình giải quyết vấn đề sau:
Mình có 1 file excel, trong sheet mình tạo 1 command button và muốn gán 1 macro cho chạy thao tác:
Copy nội dung vùng : A1:B1
Dán sang vùng D1:C1
yêu cầu:
Mỗi lần click vào command button thì nó copy nội dung trong vùng A1:B1 nhưng paste vào vùng trống kế tiếp:
D2:C2
D3:C3
...

Xin cám ơn
 
Khóa học Quản trị dòng tiền
P

Phạm Văn Kiểu

Guest
1/2/16
20
6
3
32
Xin chào bạn, bạn có thể sử dụng phương thức Range.Copy để copy và thuộc tính Range.End để xác định dòng cuối của một cột.

Code:
Private Sub CommandButton1_Click()
Dim DongCuoiC As Long
DongCuoiC = Range("C" & Columns("C").Rows.Count).End(xlUp).Row

Dim DongCuoiD As Long
DongCuoiD = Range("D" & Columns("D").Rows.Count).End(xlUp).Row

Dim Dongcuoi As Long
Dongcuoi = WorksheetFunction.Max(DongCuoiC, DongCuoiD)

If Range("C1") = "" And Range("D1") = "" Then
Range("A1:B1").Copy Range("C" & Dongcuoi)
Else
Range("A1:B1").Copy Range("C" & Dongcuoi + 1)
End If
End Sub

Mình có tải file lên facebook rồi, bạn có thể tải về xem.
Nếu có thắc mắc gì thì liên hệ mình, nếu trong khả năng mình thì mình giải thích giúp cho.
Groups Fb: https://www.facebook.com/groups/VBAForExcel/
Page Fb: https://www.facebook.com/VBA.For.Excel/
FB Cá nhân: https://www.facebook.com/phamkieukieuvn
 
  • Like
Reactions: vtbinh2007
V

vtbinh2007

Guest
14/2/16
4
0
1
46
Chào bạn Phạm Văn Kiểu
Cám ơn bạn đã giúp đỡ, nhưng mình chưa rành về macro nên chưa hiểu ý của bạn lắm. Nếu được nhờ bạn gán mã code trực tiếp vào file đính kèm của mình gửi. cám ơn bạn nhiều lắm.
 

Đính kèm

  • Book1.xlsx
    11.1 KB · Lượt xem: 71
P

Phạm Văn Kiểu

Guest
1/2/16
20
6
3
32
xem file.
Bạn có thể nhắn tin trên Fb để tiện trả lời.
 

Đính kèm

  • Copy.rar
    13.7 KB · Lượt xem: 63
  • Like
Reactions: vtbinh2007
V

vtbinh2007

Guest
14/2/16
4
0
1
46
Mình đã làm được rồi. cám ơn bạn Kiểu nhiều lắm.
 
V

vtbinh2007

Guest
14/2/16
4
0
1
46
Chào bạn Kiểu
mình đã dựa trên hướng dẫn của bạn để phát triển đoạn code của mình, nhưng không hiểu sao khi chạy code nó copy xuống các dòng tiếp theo cột không khớp. Mình gửi đoạn code nhờ bạn xem giúp xem có lỗi nào không nhé. Có khi nào do trong range mà copy đến có ô trống nên nó bị lệch cột không nhỉ? (vì dữ liệu copy là thay đổi và có thể có ô trống)
Nhân tiện bạn cho mình hỏi:
code để copy và Paste Special Value viết thế nào nhé, mình sẽ chèn vào đoạn code đó (vì dữ liệu copy là động nên nếu copy thường thì toàn bộ các dòng dưới giống nhau.

cám ơn bạn nhiều
 

Đính kèm

  • Private Sub CommandButton1.docx
    11.7 KB · Lượt xem: 53
P

Phạm Văn Kiểu

Guest
1/2/16
20
6
3
32
Giải thích vài điều về cách tìm LastRow của một cột, Code:
"DongCuoiA = Range("A" & Columns("A").Rows.Count).End(xlUp).Row"

-Columns("A").Rows.Count: trả về số hàng của bảng tính, tùy theo phiên bản của Excel, với 2013 là 1048576.
-Range("A" & Columns("A").Rows.Count): Ô A1048576 (ô cuối của cột A)
-Range("A" & Columns("A").Rows.Count).End(xlUp): từ ô cuối của cột A, đi lên trên, gặp ô nào có chứa dữ liệu hoặc mép dưới của một Table thì dừng.
-Thuộc tính Range.Row trả về hàng của đối tượng Range. Vì vậy: Range("A" & Columns("A").Rows.Count).End(xlUp).Row trả về hàng có chứa dữ liệu "đầu tiên đi từ dưới lên", tức là hàng cuối cùng từ trên xuống.

-Trường hợp cột A không có dữ liệu thì nó sẽ đi từ dưới lên và dừng tại ô A1. Bởi vậy mới có dòng "If ... End If" Statement trong code của mình.
 
P

Phạm Văn Kiểu

Guest
1/2/16
20
6
3
32
Có thể sử dụng Code sau để tìm hàng cuối cùng của bảng tính, không phải riêng cột nào cả.
Code:
Lastrow = Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

Giải thích:
Tìm từ dưới lên xem ô nào có nội dung ("*" excel hiểu là có nội dung) thì trả về hàng của ô đó (.Row)
 
P

Phạm Văn Kiểu

Guest
1/2/16
20
6
3
32
Copy & Paste Value, Ví dụ:

Range("C4:C6").Copy
Range("E4").PasteSpecial Paste:=xlPasteValues
'tat che do Copy, khong can thiet lam
Application.CutCopyMode = False​
 

Xem nhiều

Webketoan Zalo OA