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:
Em đang tạo đoạn code:
- In ra file PDF
- Tên file PDF là: Thong bao thanh toan
- Nơi lưu với đường dẫn D:\File dinh kem
(Mỗi lần in ra file PDF, đều đặt tên file là "Thong bao thanh toan", Đều lưu vào ổ D:\File dinh kem, Lưu các lần sau sẽ trùng tên thì được phép ghi đè lên file trước)

Hiện tại Em mới tạo được đoạn code hiển thị in như dưới đây. Em chưa đưa được vào đúng đường dẫn và đặt tên file rồi ghi đề lên tệp trước nếu trùng tên. Mong các tiền bối chỉ bảo. Tks nhiều!

Mã:
Sub PrintPDF()
ThisWorkbook.Sheets(1).PrintOut preview = False
End Sub
 
Upvote 0
Chào mọi người. Hiện em có 1 file demo công việc muốn mọi người giúp đỡ để tăng tốc thời gian khi chạy code update ở sheet Backupdata .Thay đổi năm và tháng, dữ liệu dựa vào file Holiday - OT.
 

File đính kèm

Upvote 0
Em đang tập viết code theo trên mạng.
Có một số chỗ em thử chỉnh sửa. Nhưng đều bị báo lỗi code.
(chi tiết em comment trong file excel VD Copy du lieu tu nhieu file khac nhau)

Em chưa hiểu rõ mình sai cú pháp code ở điểm nào. Mong các bác chỉ giáo và comment luôn lí do hộ em trong file excel cũng được.
=================================================================
File em gồm có
1. VD Copy du lieu tu nhieu file khac nhau (file chứa Marco)
2. Khu vuc 3 (file nguồn copy dữ liệu)
 

File đính kèm

Upvote 0
Chào anh chị! Code dưới đây là ẩn dòng trống, và dãn dòng rộng ra khi thành phần ký đuôi không đủ trong 1 khổ A4 sẽ dãn dòng ra để sang trang. Code đang bị lỗi như hình dưới và có file đính kèm. Anh chị tải file kiểm tra sửa dùm em lỗi này ạ.

9999999.jpg
 

File đính kèm

Upvote 0
Các anh chị có cách nào để code báo số lượng tìm được như hình không (phần khoanh tròn màu đỏ)
Em cảm ơn
Mình có thể dùng CountIf.
Mã:
Dim lnTotalResult As Long, strFind As String
With Worksheets("Sheet1")
    lnTotalResult = WorksheetFunction.CountIf(.UsedRange.Cells, strFind)
End With
Bài đã được tự động gộp:

Chào anh chị! Code dưới đây là ẩn dòng trống, và dãn dòng rộng ra khi thành phần ký đuôi không đủ trong 1 khổ A4 sẽ dãn dòng ra để sang trang. Code đang bị lỗi như hình dưới và có file đính kèm. Anh chị tải file kiểm tra sửa dùm em lỗi này ạ.

View attachment 242324
cái này: .PageSetup.PrintTitleRows chưa có giá trị
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có thể dùng CountIf.
Mã:
Dim lnTotalResult As Long, strFind As String
With Worksheets("Sheet1")
    lnTotalResult = WorksheetFunction.CountIf(.UsedRange.Cells, strFind)
End With
Bài đã được tự động gộp:


cái này: .PageSetup.PrintTitleRows chưa có giá trị
sửa như nào bạn giúp mình luôn với, đây là code nhờ các anh chị viết cho giờ tìm lại bài cũ lâu lắm rồi nên không thấy
 
Upvote 0
Sub Vlookup_nhieu_gia_tri()
n = Application.CountIf(Range("a1:a30"), [c1])
Set rng = Range("a1:a30").Find([c1])
If Not rng Is Nothing Then
For i = 1 To n
Range("d" & i) = rng.Offset(, 1).value
Set rng = Range("a1:a30").FindNext(rng)
Next i
End If
End Sub
Tôi có code vlookup trả về nhiều giá trị như này. (giá trị tìm kiểm ở ô C1, trong vùng A1:A30, trả về cột D , giá trị ở cột B tương ứng)
nhờ mọi người chuyển thành function giúp ạ. Cám ơn
 
Upvote 0
Sub Vlookup_nhieu_gia_tri()
n = Application.CountIf(Range("a1:a30"), [c1])
Set rng = Range("a1:a30").Find([c1])
If Not rng Is Nothing Then
For i = 1 To n
Range("d" & i) = rng.Offset(, 1).value
Set rng = Range("a1:a30").FindNext(rng)
Next i
End If
End Sub
Tôi có code vlookup trả về nhiều giá trị như này. (giá trị tìm kiểm ở ô C1, trong vùng A1:A30, trả về cột D , giá trị ở cột B tương ứng)
nhờ mọi người chuyển thành function giúp ạ. Cám ơn
Bạn tạo array (rng.Offset(, 1).value ) kết quả rồi gán vào tên function thôi
 
Upvote 0
Upvote 0
Bác giúp em cụ thể được không ạ
hàm của bạn tôi chỉnh lại :
Mã:
Function Vlookup_nhieu_gia_tri(ByVal rngRangeFind As Range, ByVal vWhatFind As Variant, Optional iLookAt As Integer = 2)
Dim cllResultFind As Range, strFirstAddress As String, strResult As String
    If Not rngRangeFind Is Nothing Then
        With rngRangeFind
            'Find All In Cell => iLookAt=1, Find Part of Cell=> iLookAt=2
            Set cllResultFind = .Find(What:=vWhatFind, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=iLookAt, _
                                      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If cllResultFind Is Nothing Then
                Exit Function
            Else
                strFirstAddress = cllResultFind.Address
                Do
                    strResult = IIf(strResult <> "", strResult & "{|}", "") & cllResultFind.Value
                    Set cllResultFind = .FindNext(cllResultFind)
                Loop While Not cllResultFind Is Nothing And cllResultFind.Address <> strFirstAddress
            End If
        End With
    End If
    If strResult <> "" Then Vlookup_nhieu_gia_tri = Split(strResult, "{|}")
End Function
Sử dụng như sau:
Mã:
Dim arrResultFind
    'Find All In Cell => iLookAt=1, Find Part of Cell=> iLookAt=2
    arrResultFind = Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A30"), Sheet2.Range("C1").Value, 2) 'Tìm phần trong cell
    arrResultFind = Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A30"), Sheet2.Range("C1").Value, 1) 'Tìm toàn bộ trong Cell
Bạn chú ý: nếu tìm chính xác toàn bộ giá trị trong cell thì iLookAt=1 , và nếu chỉ tìm một phần trong cell thì iLookAt=2
Ví dụ: tìm trong A1:A5 ở Sheet2 với giá trị ở ô C1 là "BA"
BBA
BBC
CAA
CBA
CCC
=> tìm chính xác toàn bộ trong Cell: Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A5"), Sheet2.Range("C1").Value, 1) thì sẽ không có kết quả
=> tìm một phần trong Cell: Vlookup_nhieu_gia_tri(Sheet2.Range("A1:A5"), Sheet2.Range("C1").Value, 2) thì kết quả là 2 giá trị "BBA" và "CBA"
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Chị giúp Em cách chỉ copy công thức, không copy định dạng với ạ, Mong A/C giúp đỡ.
Range("D5").Copy Range("D6:D" & i)
 
Upvote 0
Upvote 0
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom