Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Dùng AdvancedFilter thử nhé:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Range("A2:B8").AdvancedFilter xlFilterInPlace, Range("D1:D2")
End Sub

Cảm ơn anh/chị đã hỗ trợ ạ :D Nhưng trong trường hợp này ý của em là em cần viết 1 cái macro để khi chạy macro nó tự động filter lấy từng giá trị khác nhau ở cột A (số lượng giá trị khác nhau không biết trước) ạ. Như trong ví dụ ở post #2063, khi chạy macro sẽ filter lấy giá trị 1 ở cột A -> copy giá trị đã filter ở cột B -> filter lấy giá trị 2 ở cột A -> copy giá trị đã filter ở cột B -> filter lấy giá trị 3 -> copy giá trị đã filter ở cột B. Trường hợp này cột A có 3 giá trị khác nhau là 1, 2, 3, nhưng em đang cần một cách làm tổng quát để có thể sử dụng khi số lượng giá trị khác nhau không biết trước ạ
 
Upvote 0
Cảm ơn anh/chị đã hỗ trợ ạ :D Nhưng trong trường hợp này ý của em là em cần viết 1 cái macro để khi chạy macro nó tự động filter lấy từng giá trị khác nhau ở cột A (số lượng giá trị khác nhau không biết trước) ạ. Như trong ví dụ ở post #2063, khi chạy macro sẽ filter lấy giá trị 1 ở cột A -> copy giá trị đã filter ở cột B -> filter lấy giá trị 2 ở cột A -> copy giá trị đã filter ở cột B -> filter lấy giá trị 3 -> copy giá trị đã filter ở cột B. Trường hợp này cột A có 3 giá trị khác nhau là 1, 2, 3, nhưng em đang cần một cách làm tổng quát để có thể sử dụng khi số lượng giá trị khác nhau không biết trước ạ
Thì bạn cứ đưa file có dữ liệu giống thật và kết quả bạn muốn có (bằng thủ công) để mọi người hiểu được bạn muốn thế nào.
Cứ Copy, copy... rồi để nó ở đâu?
 
Upvote 0
Thì bạn cứ đưa file có dữ liệu giống thật và kết quả bạn muốn có (bằng thủ công) để mọi người hiểu được bạn muốn thế nào.
Cứ Copy, copy... rồi để nó ở đâu?
Phần copy chỉ là ví dụ, còn mục đích chính vẫn là cách viết macro để loop filter các giá trị khác nhau trong cột ạ. 216670
Như trong cột A em có các mã khách hàng như thế này. Em cần lần lượt filter lấy giá trị 200024 -> 290001 -> 290083 -> .... cho đên hết. Em nghĩ vấn đề này cũng không quá phức tạp nên cũng không cần file dữ liệu làm gì cho rắc rối ạ :D
 
Upvote 0
Phần copy chỉ là ví dụ, còn mục đích chính vẫn là cách viết macro để loop filter các giá trị khác nhau trong cột ạ. View attachment 216670
Như trong cột A em có các mã khách hàng như thế này. Em cần lần lượt filter lấy giá trị 200024 -> 290001 -> 290083 -> .... cho đên hết. Em nghĩ vấn đề này cũng không quá phức tạp nên cũng không cần file dữ liệu làm gì cho rắc rối ạ :D
Quên Filter đi, dùng Dictionary
 
Upvote 0
Phần copy chỉ là ví dụ, còn mục đích chính vẫn là cách viết macro để loop filter các giá trị khác nhau trong cột ạ.
...
Như trong cột A em có các mã khách hàng như thế này. Em cần lần lượt filter lấy giá trị 200024 -> 290001 -> 290083 -> .... cho đên hết. Em nghĩ vấn đề này cũng không quá phức tạp nên cũng không cần file dữ liệu làm gì cho rắc rối ạ :D
Bạn nghĩ sai rồi. Vấn đề này chỉ "không quá phức tạp" khi:
1. bạn đã hiểu thật rõ yêu cầu của mình.
2. bạn có khả năng diễn tả thật chính xác và đầy đủ yêu cầu ấy. Điều này bao gồm cả ví dụ dữ liệu đầu vào và đầu ra.

Vì tước mắt là bạn đã không làm được cả hai điều trên cho nên cái file dữ liệu là công cụ giúp người khác đoán vấn đề phụ cho bạn.
 
Upvote 0
Phần copy chỉ là ví dụ, còn mục đích chính vẫn là cách viết macro để loop filter các giá trị khác nhau trong cột ạ.
Tham khảo code này xem:
Mã:
Private Sub CommandButton1_Click()
    If ActiveSheet.FilterMode = False Then
        Range("A2:A8").AdvancedFilter 1, , , 1
        CommandButton1.Caption = "Show"
    Else
        ActiveSheet.ShowAllData
        CommandButton1.Caption = "Hide"
    End If
End Sub
 

File đính kèm

  • AdvancedFilter.xlsm
    18 KB · Đọc: 3
Upvote 0
Phần copy chỉ là ví dụ, còn mục đích chính vẫn là cách viết macro để loop filter các giá trị khác nhau trong cột ạ.
Như trong cột A em có các mã khách hàng như thế này. Em cần lần lượt filter lấy giá trị 200024 -> 290001 -> 290083 -> .... cho đên hết. Em nghĩ vấn đề này cũng không quá phức tạp nên cũng không cần file dữ liệu làm gì cho rắc rối ạ
Không phức tạp thì xài thử cái ni:
PHP:
Sub LoopForList()
Dim WF As Object, Rng As Range, sRng As Range
Dim MyAdd As String, Loop_ As String
Dim J As Long, Max_ As Long, Min_ As Long, Dm As Integer

Set WF = Application.WorksheetFunction
J = [B2].CurrentRegion.Rows.Count:          Set Rng = [A1].Resize(J)
Max_ = WF.Max(Rng):                         Min_ = WF.Min(Rng)
For J = Min_ To Max_
    Set sRng = Rng.Find(J, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            Dm = Dm + 1:                    Loop_ = Loop_ & Chr(10) & sRng.Offset(, 1).Value
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        If Dm Then
            MsgBox Loop_, , J
            Loop_ = Space(o):               Dm = 0
        End If
    End If
Next J
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc tại em trình bày kém nên làm phức tạp vấn đề. Em đã tìm được giải pháp trên stackoverflow, cảm ơn các anh/chị đã nhiệt tình hỗ trợ ạ!
 
Upvote 0
Xin chào GPE và anh em thành viên trên diễn đàn VBA của GPE mình có một bài toán xin mọi người giúp code hoặc tư vấn cách làm cũng dc mình có sheet packinglist muốn copy qua sheet barcode như phải tự cách dòng xuong và chiều cao dòng là 25 và gán font IDautomationhC39M chỉ gán vào cột Order và cột Số lượng mong mọi người giúp đở xin cám ơn. xem File đính kèm
 

File đính kèm

  • GIA VAT LIEU MUA VAO.xlsm
    471.7 KB · Đọc: 4
Upvote 0
Mình có 2 sheet, sheet MaHang và sheet NhapXuatTon, cột Mã Hàng ở sheet NhapXuatTon sẽ lấy dữ liệu ở cột Mã hàng trong sheet Mahang, mình muốn khi có bất cứ dữ liệu thay đổi ở cột Mã hàng trong sheet MaHang thì dữ liệu ở cột Mã Hàng trong sheet NhapXuatTon cũng lập tức thay đổi theo.

Xin anh em chỉ cho mình một code VBA để làm điều này với!

Mình đã dùng sự kiện change để copy và paste qua, nhưng hiệu ứng change chỉ có hiệu lực khi gõ trực tiếp vào, còn đối với các hành động khác thì ko đc, nên dữ liệu ko đc cập nhật kịp thời.

Đa tạ!
 

File đính kèm

  • Nhap xuat ton.xlsm
    242.5 KB · Đọc: 9
Upvote 0
Hình như mong muốn của bạn là file sẽ thành đống rác hay sao ý nhỉ?!
 
Upvote 0
Mình có 2 sheet, sheet MaHang và sheet NhapXuatTon, cột Mã Hàng ở sheet NhapXuatTon sẽ lấy dữ liệu ở cột Mã hàng trong sheet Mahang, mình muốn khi có bất cứ dữ liệu thay đổi ở cột Mã hàng trong sheet MaHang thì dữ liệu ở cột Mã Hàng trong sheet NhapXuatTon cũng lập tức thay đổi theo.

Xin anh em chỉ cho mình một code VBA để làm điều này với!

Mình đã dùng sự kiện change để copy và paste qua, nhưng hiệu ứng change chỉ có hiệu lực khi gõ trực tiếp vào, còn đối với các hành động khác thì ko đc, nên dữ liệu ko đc cập nhật kịp thời.

Đa tạ!
Rất nguy hiểm khi sheet MaHang bị chèn dòng, xóa dòng, số liệu các cột SL Nhập, Xuất sẽ ... sai "tè lè"...
PHP:
Private Sub Worksheet_Activate()
'----------- Cua Sheet NhapXuatTon--------------'
Dim Arr()
Arr = Sheets("MaHang").Range("A2", Sheets("MaHang").Range("A100000").End(xlUp)).Resize(, 2).Value
Range("C10:D1000").ClearContents
Range("C10:D10").Resize(UBound(Arr)) = Arr
End Sub
 
Upvote 0
Rất nguy hiểm khi sheet MaHang bị chèn dòng, xóa dòng, số liệu các cột SL Nhập, Xuất sẽ ... sai "tè lè"...
PHP:
Private Sub Worksheet_Activate()
'----------- Cua Sheet NhapXuatTon--------------'
Dim Arr()
Arr = Sheets("MaHang").Range("A2", Sheets("MaHang").Range("A100000").End(xlUp)).Resize(, 2).Value
Range("C10:D1000").ClearContents
Range("C10:D10").Resize(UBound(Arr)) = Arr
End Sub
Cảm ơn bác Ba Tê! Cái này chỉ thay đổi khi active sheet NhapXuatTon, mình muốn thay đổi ngay khi không mở sheet NhapXuatTon, vì thực tế người ta nhập thêm mã hàng, ko kích vào sheet NhapXuatTon nhưng vẫn muốn kiếm tra số tồn ở một nơi khác, thì trong trường hợp này mã hàng sẽ ko chạy!
 
Upvote 0
Cảm ơn bác Ba Tê! Cái này chỉ thay đổi khi active sheet NhapXuatTon, mình muốn thay đổi ngay khi không mở sheet NhapXuatTon, vì thực tế người ta nhập thêm mã hàng, ko kích vào sheet NhapXuatTon nhưng vẫn muốn kiếm tra số tồn ở một nơi khác, thì trong trường hợp này mã hàng sẽ ko chạy!
Chuyển nó thành DeActivate của sheet MaHang.
 
Upvote 0
Mã:
Sub Import_from_ClosedWB() 'Copy d? li?u t? nhi?u sheet trong 1 workbook dang dóng
Const sPath = "C:\Users\VCong\Desktop\" 'Ðu?ng d?n t?i thu m?c ch?a workbook dang dóng
Dim sFil As String
Dim owb As Workbook
Dim ws As Worksheet
Dim sh As Worksheet
    
Application.ScreenUpdating = False 'T?t ch?c nang c?p nh?t màn hình
Set ws = Sheet1
    sFil = Dir(sPath & "201905ALL_J50.xls") 'Tên workbook c?n l?y d? li?u

Do While sFil <> "" 'Th?c hi?n khi workbook c?n l?y d? li?u có t?n t?i
  Set owb = Workbooks.Open(sPath & sFil)
  For Each sh In ActiveWorkbook.Sheets  'Vòng l?p xét t?i t?ng sheet
      sh.[A1:AC7000] = sh.[A1:AC7000].Value 'Lo?i b? công th?c, ch? l?y giá tr?
       sh.Copy After:=ws   'Copy và paste sang workbook k?t qu?
    owb.Close False 'Ðóng workbook nhung không th?c hi?n luu
  Next sh
sFil = Dir
Loop
Application.ScreenUpdating = True   'M? ch?c nang c?p nh?t màn hình

End Sub
chào các thầy. em có lượm được đoạn code này trên diễn đàn. cung đã thực hiên đc rồi. có điều khi em muốn coppy file đóng sang file đích.nó lại tự động thêm 1 sheets mới. em muốn nó thêm vào đúng cái sheet1 đang có trên file đích thôi thì phải làm thế nào ạ
 
Upvote 0
cho em hỏi xíu ạ.
cho i = 1 số nguyên
em muốn xuất giá trị của ô B,i thì lệnh ntn ạ
 
Upvote 0
Web KT
Back
Top Bottom