Tạo macro để làm một số công việc theo yêu cầu

Liên hệ QC

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
VTD XD đã viết:
Chào anh
Anh có thể giúp tôi viết đoạn code tạo phím tắt trong excel được không àh
ví dụ: Ctrl + Shift + M là Merge and Center
Ctrl + Shift + F là fill color

Trả lời:

Bạn nên dùng Macro để ghi lại, rồi sau đó gán phím nóng
Ví dụ tôi đã ghi macro, và nội dung macro như sau:

Mã:
Sub Macro1()
'
' Macro1 Macro

    Range("C6:D6").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.Merge
   ' [COLOR="Red"]Đoạn code ở trên là Merge cell[/COLOR]
   ' [COLOR="Red"]Đoạn code sau là tô màu với mã màu là 65535[/COLOR]
    Range("C8").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("C10").Select
End Sub

Từ đây bạn có thể chỉnh sửa lại như sau:
1. Code để Merge Cell
Mã:
Sub MergeCells()
On Error Resume Next
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .MergeCells = True
    End With
End Sub
2. Code tô màu
Mã:
Sub FillColors()
On Error Resume Next
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
    End With
End Sub
Rồi sau đó bạn hãy ra cửa sổ soạn thảo của Excel, nhấn tổ hợp phím Alt + F8 > Chọn Macro bạn muốn gán phím nóng > Chọn Options và gán phím nóng cho thủ tục.

Chúc bạn thành công.

Lê Văn Duyệt
 
Anh Duyệt ơi, anh dùng VbRed, vbBlue ,... gì đó em nghĩ hay hơn, dùng number of color nghe khó biết quá
 
Upvote 0
Bạn xem bài 30 tại đây
http://www.giaiphapexcel.com/forum/showthread.php?t=15116&page=3
 
Upvote 0
Đệ có cái EXcel tính lương tự động nhưng dữ liệu row trong excel không đủ (thực tế CN, mã hàng nhiều lắm), với lại Excel chạy chậm lắm. Các huynh có cách gì cải tiến nó 1 chút không. Nhờ các huynh bỏ chút thời gian nghiên cứu sửa cho đệ với.
Mình up ở đây nha: vì trong diễn đàn ko up đc
http://www.4shared.com/file/98223454...luong_may.html

Đa tạ! Đa tạ!
 
Upvote 0
Chào bác Duyệt. Em đọc bài của bác thấy rất hữu ích. Bác có thể cho em hỏi cách làm sao để tạo 1 file excel tính tổng tự động bằng tạo macro theo kịch bản trong VBA. Cụ thể: Công việc của em cần lặp lại hàng tháng với yêu cầu tính tổng từ nhiều bảng tính excel khác nhau, mỗi bảng có nhiều sheet, mỗi sheet nhều cell. Bác làm ơn chỉ giúp cách tạo file với macro theo kịch bản để sử dụng lâu dài trong đều kiện số file cần tính tổng đôi khi có thay đổi số lượng được không? Em xin cảm ơn trước.
 
Upvote 0
- Cảm ơn quochuy! Vấn đề của mình cụ thể là: Hàng tháng mình cần thống kê số liệu từ 45 đơn vị khác nhau từ một mẫu mình cho trước (tất nhiên là giống nhau). Mình muốn tạo một macro theo kịch bản để hàng tháng có file tổng hợp tự động thay vì cứ đặt tính cộng cho từng cell (vì không thể kéo, rê như tính toán trong cùng file). Nhưng mình gặp phải các vấn đề:
1. Khi tạo macro theo kịch bản thì công việc sẽ mất rất nhiều thời gian (vì không thể kéo, rê chuột như nói trên trong khi file dữ liệu có đến hàng nghin cell). Xin hỏi các bạn là có cách nào để thao tác nhanh hơn được không?
2. Macro mình tạo ra nó chỉ nhận cộng các file có tên giống như ban đầu mình thao tác tạo kịch bản (trong khi các tên file cần thay đổi tất nhiên là nội dung vẫn vậy. VD: Thang 9 thay bằng Thang 10...). Mình muốn tạo một macro có thể dùng cho bất cứ tên file nào, tức là chỉ cần khởi động nó ra cùng với file tính tổng là nó cộng tuốt (cái này mình đã thấy là có thể được) tuy nhiên mình chưa biết làm vì mình mới làm quen với VBA nên còn "gà mờ" lắm, rất mong được các bạn chỉ giáo. Xin cảm ơn trước nha!
__________________
Cuộc sống là sự đau khổ, sự đau khổ do lòng ham muốn gây nên!
 
Upvote 0
cái excel của mình chắc tại do virus, vì khi enter thì nó nhày theo đường chéo, không thể nào mà điểu khiển khi enter nó nhảy xuống hàng dưới cả. Bác nào có thể cho em xin cái code để khi enter mà nó nhảy xuống hàng dưới không??. Thanks all
 
Upvote 0
Merge & UnMerge

Trả lời:
1. Code để Merge Cell
Mã:
Sub MergeCells()
On Error Resume Next
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .MergeCells = True
    End With
End Sub

Lê Văn Duyệt

Theo em thì làm kết hợp Merge và UnMerge thì hay hơn.
Mã:
'********************************************
'********************************************
Sub Merge_Cell()
'Phim tat: Ctrl + Shif + M
Application.ScreenUpdating = False
If Selection.MergeCells = False Then
    With Selection
        .HorizontalAlignment = xlCenter
    End With
    Selection.Merge
Else
    With Selection
        .HorizontalAlignment = xlGeneral
    End With
    Selection.UnMerge
End If
Application.ScreenUpdating = True
End Sub
'********************************************
'********************************************
 
Upvote 0
Sẳn đây cho em hỏi,
Khi Mercel nhằm 2 dữ liệu trong nhiều ô, thì sẽ có một bảng thông báo của Excel. Nếu mình muốn Việt Nam hóa cái thông báo của mình và không cho nổi lên cái thông báo tiếng tây tiếng u đó thì mình phải viết Code như thế nào ạ?

Và khi chạy Macro, thì không Ctrl+Z (Undo) lại được, với đoạn Code Merge_Cell thì viết Code cho nó Undo như thế nào?

Kính nhờ hướng dẫn.
Cảm ơn rất nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
THƯA THẦY LÊ VĂN DUYỆT,
Làm ơn cho em hỏi lại, Khi Merge cells nhằm 2 dữ liệu trong nhiều ô, thì sẽ có một bảng thông báo của Excel. Nếu em muốn thay cái thông báo bằng tiếng Anh đó bằng msgbox tiếng Việt, thì em phải viết Code như thế nào ạ?

Và khi chạy Macro, thì không Ctrl+Z (Undo) lại được, với đoạn Code Merge_Cell thì viết Code cho nó Undo như thế nào?

Kính nhờ THẦY hướng dẫn.
 
Upvote 0
THƯA THẦY LÊ VĂN DUYỆT,
Làm ơn cho em hỏi lại, Khi Merge cells nhằm 2 dữ liệu trong nhiều ô, thì sẽ có một bảng thông báo của Excel. Nếu em muốn thay cái thông báo bằng tiếng Anh đó bằng msgbox tiếng Việt, thì em phải viết Code như thế nào ạ?

Và khi chạy Macro, thì không Ctrl+Z (Undo) lại được, với đoạn Code Merge_Cell thì viết Code cho nó Undo như thế nào?

Kính nhờ THẦY hướng dẫn.
Bạn có thể loại bỏ cảnh báo của Excel bằng dòng lệnh sau:
Application.DisplayAlerts = False
Sau đó bạn thêm MsgBox gì đó vào... chứ chẳng lẽ bạn định chuyển đổi ngôn ngữ cho cái Alert kia sao (tôi không nghĩ ra có cách nào để làm điều này)
Việc không thể Undo sau khi chạy code đã từng bàn trên diển đàn nhiều lần rồi... giải pháp cũng có nhưng quá nhiêu khê và không khả thi... Vì thế khi viết code bạn nên cẩn thận thì hay hơn!
Hay vì Undo quá trình Merge, sao bạn không bấm nút Merge thêm lần nữa ---> Trong code VBA, thao tác này tương đương với đoạn: Range(....).UnMerge
 
Upvote 0
Bạn có thể loại bỏ cảnh báo của Excel bằng dòng lệnh sau:
Application.DisplayAlerts = False
Sau đó bạn thêm MsgBox gì đó vào... chứ chẳng lẽ bạn định chuyển đổi ngôn ngữ cho cái Alert kia sao (tôi không nghĩ ra có cách nào để làm điều này)
Việc không thể Undo sau khi chạy code đã từng bàn trên diển đàn nhiều lần rồi... giải pháp cũng có nhưng quá nhiêu khê và không khả thi... Vì thế khi viết code bạn nên cẩn thận thì hay hơn!
Hay vì Undo quá trình Merge, sao bạn không bấm nút Merge thêm lần nữa ---> Trong code VBA, thao tác này tương đương với đoạn: Range(....).UnMerge

Cám ơn ndu96081631, Merge và UnMerge tôi đã viết code phía dưới đó. Nhưng cái tôi muốn là khi nhập 2 ô trở lên có chứa 2 dữ liệu, thì khi nhập ô lại nó chỉ giữ giá trị trên thôi, dĩ nhiên khi UnMerge thì giá trị chỉ còn lại một mà thôi, chính vì vậy tôi muốn Undo cái đoạn này là vậy.
 
Upvote 0
hic hic mình down load excel về thì lại bị khi enter thì nhảy theo đường chéo, k biết có cách j khắc phục, anh em nào có đoạn code để khi enter nó nhảy xuống hàng dưới thì cho em xin nha.
THanks
 
Upvote 0
Hỏi mãi chẳng ai trả lời mình hết, mình đã tự làm được rồi. Tuy nhiên không đem dùng trên máy tính khác được thôi
 
Upvote 0
đọan code giúp delete tự động

Dear Các bạn,
mình muốn delete một vùng dữ liệu(mà đã được nhập bằng tay trước đó) một cách tự động(chỉ bằng 1 button) mà không cần phải xóa bằng tay thì làm thế nào?
Thanks các bạn nhiều
 
Upvote 0
Chào các pro. Tiện đây cho tôi hỏi một chút: Mọi người có thể chỉ giùm cách làm thế nào để có thể làm được công việc sau với được ko ạ?
- Tôi có một công việc liên quan đến tổng hợp doanh thu hàng tháng từ các cửa hàng vệ tinh. Công việc cứ lắp đi lắp lại nên tôi tạo một macro theo kịch bản để khi hàng tháng cử ở tất cả báo cáo từ các cửa hàng về là có 1 file tổng. Tuy nhiên hiện nay do nhu cầu đã mở thêm 2 cả hàng vệ tinh nữa. Tôi muốn rằng có cách viết lệnh trong VBA làm sao để khi mở để tính thu của 3 hay 5 cửa hàng thì vẫn thực hiện được. Hiện tại là cái macro của mình nó chỉ nhận theo đúng "kịch bản" là 3 flie thôi, muốn cộng 2 file cũng chẳng được. Tóm lại, tôi muốn hỏi có cách nào để file tổng hợp của tôi có thể cộng được n file. Mọi nười làm ơn mách giùm. Xin cảm ơn trước
Sẵn đây mình xin coppy đoạn code lên để mọi người giúp đỡ nhé.
Sub Macro2()
'
' Macro2 Macro
' Macro recorded 02/01/2010 by Manhkha
'
' Keyboard Shortcut: Ctrl+Shift+T
'
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R4C3+[CH_2.xls]Sheet1!R4C3+[CH_3.xls]Sheet1!R4C3"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R4C4+[CH_2.xls]Sheet1!R4C4+[CH_3.xls]Sheet1!R4C4"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R4C6+[CH_2.xls]Sheet1!R4C6+[CH_3.xls]Sheet1!R4C6"
ActiveCell.Select
Selection.ClearContents
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R4C5+[CH_2.xls]Sheet1!R4C5+[CH_3.xls]Sheet1!R4C5"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R4C6+[CH_2.xls]Sheet1!R4C6+[CH_3.xls]Sheet1!R4C6"
ActiveCell.Offset(1, -3).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R5C3+[CH_2.xls]Sheet1!R5C3+[CH_3.xls]Sheet1!R5C3"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R5C4+[CH_2.xls]Sheet1!R5C4+[CH_3.xls]Sheet1!R5C4"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R5C5+[CH_2.xls]Sheet1!R5C5+[CH_3.xls]Sheet1!R5C5"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=[CH_1.xls]Sheet1!R5C6+[CH_2.xls]Sheet1!R5C6+[CH_3.xls]Sheet1!R5C6"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom