Hỏi nhanh - Đáp nhanh về macro (dành cho các thành viên mới học lập trình)

Liên hệ QC

tuananhya2

Thành viên mới
Tham gia
18/8/12
Bài viết
8
Được thích
0
Co ai chỉ dùm cách tạo pass marco với
 
Chào các anh chị, em mới học về excel nên còn lơ ngơ lắm -+*/ hàng ngày em phải lấy 1 file từ hệ thống xuống, rồi cắt lọc file đấy ra để được một file hoàn chỉnh, rất là thủ công !$@!! mong anh chị chỉ bảo em xem có cách nào tự động được ko ...

Ở file đính kèm thì file "bat dau" là file cần xử lý để thành file "ket thuc"

Mong các anh chị giúp đỡ ...

Bạn dùng tạm cái củ chuối này xem sao.
 

File đính kèm

  • bat dau.xls
    59 KB · Đọc: 11
Upvote 0
mấy bác ơi không biết code của em lỗi ở đâu,nghịch mãi mà ko biết sửa thế nào

Sub phantichdongia()
Sheets("sheet2").Select
Range([a2], [a30].End(xlUp)).Select
'Copy STT va MHDG:
'Selection.Copy Sheets(2).[a1]
Selection.Copy Sheets("sheet4").[a2]
'Copy ten va don vi cong viec:
Range(Selection.Offset(0, 1), Selection.Offset(0, 2)).Copy Sheets("sheet4").[c2]
'Link khoi luong:
Selection.Offset(0, 3).Copy
Sheets("sheet4").Select
Range("f2").Select
ActiveSheet.Paste Link:=True


'copy tu bang dm
Range("a2").Select
'Khai bao:
Dim Sh As Worksheet, Rng As Range, sRng As Range
Set Sh = Sheets("sheet3")
Set Rng = Sh.Range(Sh.[a2], Sh.[a30].End(xlUp))
'Chu ky tao bang PTVT
Do Until Selection.Offset(0, 2) = ""
Set X = Selection
Set sRng = Rng.Find(X, , xlFormulas, xlWhole)
Selection.Offset(1, 0).Select


If sRng Is Nothing Then
Application.ScreenUpdating = True
Application.EnableEvents = True
Selection.Font.ColorIndex = 3
MsgBox "Cong viec co ma hieu : ''" & X & "'' chua duoc cap nhat trong bang dinh muc !" & Chr(13) & "Hay kiem tra du lieu trong bang ''DinhMuc''.", vbOKOnly, "???"
Exit Sub
Else
Range(sRng(2, 1), sRng(2, 1).End(xlDown)).EntireRow.Copy
Selection.Insert Shift:=xlDown
Selection.End(xlDown).Select
End If
Loop
Application.CutCopyMode = False

End Sub

file đây ạ
 

File đính kèm

  • bt6 - offset.xls
    48 KB · Đọc: 10
Upvote 0
Sửa code lọc dữ liệu

Em có file đính kèm, em đã nêu cụ thể trong file giúp em sửa lại code
Thanks!
 

File đính kèm

  • LOC VBA.xlsm
    20.1 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
các Bro Giúp em với Em gặp vấn đề về add ngày tháng
-thứ nhất là khi em add ngày tháng từ listbox sang textbox thì ngày tháng bị chuyển thành dạng text
- Thứ hai là khi add ngày tháng từ listbox vào cell thì từ ngày 12 trở xuống ngày tháng là mm/dd/yyyy còn ngày từ 13 trở lên thì có dạng dd/mm/yyyy.
Mong mọi người giúp em giải quyết vấn đề này với ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Mấy bác cho em hỏi em muốn chèn một vùng dữ liệu từ sheet sang userform ( bất kỳ cái gì của userform cũng được ) thì muốn làm sao ạ. Em mới tập tẹ vào nghề nên mong được các pro giải đáp ạ
 
Upvote 0
Xin chào các bạn,

Mình có 1 vấn đề muốn hỏi các bạn về vòng lặp trong excel, cơ bản như sau (xin xem file đính kèm):

-Mình có 1 danh sách model name, và brand trong sheet 1
-Mình muốn chọn tất cả các model name có tên brand là "n123", theo thứ tự từ trên xuống vào trong sheet 2 (cũng theo thứ tự từ trên xuống, và không bỏ trống hàng nào)
-Không dùng filter, vì mình sẽ phải phân loại, copy, paste rất nhiều lần cho từng brand vào các sheet khác nhau.

Xin chân thành cám ơn sự giúp đỡ của các bạn.
 

File đính kèm

  • Model name filter.xls
    34 KB · Đọc: 13
Upvote 0
Xin chào các bạn,

Mình có 1 vấn đề muốn hỏi các bạn về vòng lặp trong excel, cơ bản như sau (xin xem file đính kèm):

-Mình có 1 danh sách model name, và brand trong sheet 1
-Mình muốn chọn tất cả các model name có tên brand là "n123", theo thứ tự từ trên xuống vào trong sheet 2 (cũng theo thứ tự từ trên xuống, và không bỏ trống hàng nào)
-Không dùng filter, vì mình sẽ phải phân loại, copy, paste rất nhiều lần cho từng brand vào các sheet khác nhau.

Xin chân thành cám ơn sự giúp đỡ của các bạn.

Bạn dùng Pivot table sẽ ra tất cả các brand, mỗi brand sẽ ra tất cả các name, theo thứ tự.

Hoặc đơn giản hơn, bạn sort theo cột brand, thế là chỉ copy từng phần brand sang các sheet.
 
Upvote 0
Xin chào các bạn,

Mình có 1 vấn đề muốn hỏi các bạn về vòng lặp trong excel, cơ bản như sau (xin xem file đính kèm):

-Mình có 1 danh sách model name, và brand trong sheet 1
-Mình muốn chọn tất cả các model name có tên brand là "n123", theo thứ tự từ trên xuống vào trong sheet 2 (cũng theo thứ tự từ trên xuống, và không bỏ trống hàng nào)
-Không dùng filter, vì mình sẽ phải phân loại, copy, paste rất nhiều lần cho từng brand vào các sheet khác nhau.

Xin chân thành cám ơn sự giúp đỡ của các bạn.
Bạn xem thử coi ok không
 
Upvote 0
ok để em nghiên cứu thêm,đúng là hỏi ngu ngơ thì là làm khó các bác,em có một ví dụ nhỏ nhờ các bác viết code,bác rảnh thì nghiên cứu hộ em một tí,thanks bác nhiều nhé
p/s: sheet2 với yêu cầu là cứ gõ mã thì tên,đơn vị,giá sẽ tự động hiện (em đã làm)
sheet4 yêu cầu là khi chạy macro thì sẽ phân tích các mã ở sheet 2 cụ thể ra
cơ sở dữ liệu lấy ở sheet1,3,5
chưa hiểu khúc này là bạn muốn ntn?
 
Upvote 0
Gán giá trị vào mảng.

Mình đang học về mảng, nhờ các bạn giải thích giúp :

Sub LearnArray()
Dim Arr, i As Long, j As Long

Arr = Sheet2.Range("F5:I10").Value

For Each k In Arr
MsgBox k
Next k

For i = LBound(Arr, 1) To UBound(Arr, 1)
For j = LBound(Arr, 2) To UBound(Arr, 2)
MsgBox Arr(i, 1)
Next j
Next i
End Sub

Khi dùng gán mảng bằng 1 vùng nếu dùng For each duyệt qua từng phần tử của mảng thì nhận giá trị của từng mảng. Còn khi dùng For i = Lbound to Ubound thì không nhận giá trị của mảng.
 
Upvote 0
Mình đang học về mảng, nhờ các bạn giải thích giúp :

Sub LearnArray()
Dim Arr, i As Long, j As Long

Arr = Sheet2.Range("F5:I10").Value

For Each k In Arr
MsgBox k
Next k

For i = LBound(Arr, 1) To UBound(Arr, 1)
For j = LBound(Arr, 2) To UBound(Arr, 2)
MsgBox Arr(i, 1)
Next j
Next i
End Sub

Khi dùng gán mảng bằng 1 vùng nếu dùng For each duyệt qua từng phần tử của mảng thì nhận giá trị của từng mảng. Còn khi dùng For i = Lbound to Ubound thì không nhận giá trị của mảng.
Chổ màu đỏ phải là Arr(i, j) chứ sao lại là Arr(i, 1)?
 
Upvote 0
Hỏi cách kiểm tra tất cả các cell không rổng:

nhờ anh chị chỉ giúp cho các kiểm tra để biết các cell không liên tục và không rổng.
ví dụ để biết các cell sau đây không rổng
[A1], [A3],[A5],[A7],[B2],[B4],[B6]
Làm sao để biết tất cả các cell này đã được điền số liệu
(hiên tôi phải sử dụng worksheetfuction counta hoặc vòng lặp qua các cell).
có thể sử dụng empty kết hợp với union không ạ?
cám ơn mọi người giúp đỡ
 
Upvote 0
Hỏi cách kiểm tra tất cả các cell không rổng:

nhờ anh chị chỉ giúp cho các kiểm tra để biết các cell không liên tục và không rổng.
ví dụ để biết các cell sau đây không rổng
[A1], [A3],[A5],[A7],[B2],[B4],[B6]
Làm sao để biết tất cả các cell này đã được điền số liệu
(hiên tôi phải sử dụng worksheetfuction counta hoặc vòng lặp qua các cell).
có thể sử dụng empty kết hợp với union không ạ?
cám ơn mọi người giúp đỡ
Miêu tả cụ thể và thực tế hơn được không bạn !
 
Upvote 0
Hỏi cách kiểm tra tất cả các cell không rổng:

nhờ anh chị chỉ giúp cho các kiểm tra để biết các cell không liên tục và không rổng.
ví dụ để biết các cell sau đây không rổng
[A1], [A3],[A5],[A7],[B2],[B4],[B6]
Làm sao để biết tất cả các cell này đã được điền số liệu
(hiên tôi phải sử dụng worksheetfuction counta hoặc vòng lặp qua các cell).
có thể sử dụng empty kết hợp với union không ạ?
cám ơn mọi người giúp đỡ
Xem code ví dụ
PHP:
Sub BlankChk()
Dim Sarr As Range, item As Range
Set Sarr = Union([A1], [A3], [A5], [A7])
For Each item In Sarr
   If item = Empty Then
      MsgBox item.Address(0, 0) & " is empty"
   End If
Next
End Sub
 
Upvote 0
cám ơn anh,anh xem giúp................



@anh Quang Hai,

hiện nay tôi cũng đang dùng vòng lặp.
nhưng tôi không biết là có cách nào không dùng vòng lặp không
cám ơn anh

Nếu mà theo kiểu oánh võ rừng thì có cách này, hơi tà ma ngoại đạo chút.
PHP:
Sub test()
Dim Sarr As Range, Chk1 As Long, Chk2 As Long
Set Sarr = Union([A1], [A3], [A5], [B2], [B4])
Chk1 = Application.CountA(Sarr)
Chk2 = Sarr.Count
If Chk2 - Chk1 > 0 Then MsgBox "Con thieu thong tin" Else MsgBox "Du thong tin"
End Sub
 
Upvote 0
cám ơn anh,anh xem giúp................



@anh Quang Hai,

hiện nay tôi cũng đang dùng vòng lặp.
nhưng tôi không biết là có cách nào không dùng vòng lặp không
cám ơn anh

Bạn có thể tham khảo code của a QuangHai1969
Mình chỉ góp ý thế này thôi:
* Bạn dùng sự kiện theo kiểu DoChange ,tức là khi nhập, thay đổi dữ liệu tại 1 ô nào đó trong vùng kiểm tra sẽ hiện ra msgbox thông báo --> cái này có thực sự tiện lợi không <-------- tôi thì thấy cái này rất bất tiện,( nếu chỉ có 1 ,2 ô thì không sao, đằng này lại gần như là 1 vùng range )
* Giống như việc bạn khai báo đăng ký thông tin trên các trang web --> khi bạn ấn nút ok hay submit --> thì chương trình mới kiểm tra dữ liệu nhập vào có phù hợp hay thỏa mãn điều kiện ban đầu không ? <--- theo tôi đây mới là giải pháp hợp lý !

p/s : trong code của bạn có đoạn :
Mã:
If cll.Value = 0 Then
điều kiện trên sẽ khác với điều kiện này bạn nhé:
Mã:
If cll <>"" Then
hay 
Ìf Cll =Empty then
 
Lần chỉnh sửa cuối:
Upvote 0
đã giải quyết được vấn đề

nhờ mod xóa giúp.

cám ơn và xin lổi vì đã làm phiền.
 
Lần chỉnh sửa cuối:
Upvote 0
Macro có thể gọi hảm đã cài vào add In không.
xin chào anh chi,
tôi có một cái hàm tự tạo, đã cài vào Add In.
rồi ở một Sub gọi tên hàm này nhưng không được.(bị báo lổi)
vậy cho hỏi trong Sub gọi Function trong add in được không ạ,
tôi hỏi vậy vì tôi cần chép một đoạn code cho 20-30 file sử dụng, mà chép vào từng file cũng hôi lười, nên định add in
cám ơn các anh chi
 
Upvote 0
Macro có thể gọi hảm đã cài vào add In không.
xin chào anh chi,
tôi có một cái hàm tự tạo, đã cài vào Add In.
rồi ở một Sub gọi tên hàm này nhưng không được.(bị báo lổi)
vậy cho hỏi trong Sub gọi Function trong add in được không ạ,
tôi hỏi vậy vì tôi cần chép một đoạn code cho 20-30 file sử dụng, mà chép vào từng file cũng hôi lười, nên định add in
cám ơn các anh chi
Dĩ nhiên là có 2 cách:
1. Gọi hàm trong Sub, tính toán và trả về dữ liệu trên cell. Với cách này, khi dữ liệu tham chiếu thay đổi thì phải chạy lại Sub.
2. Sub đặt hàm trên cell để tính toán. Với cách này, khi dữ liệu tham chiếu của hàm thay đổi thì hàm sẽ tự tính toán lại.
 
Upvote 0
Web KT
Back
Top Bottom