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:
Mình mới tập học VBA, có đoạn sub như này:

Sub testlap()
Dim i As Integer
Dim n, m As Integer
Dim Dir As String
Dim MyPath As String
Dim bc As String


Application.ScreenUpdating = False


Dir = Application.ActiveWorkbook.Path & ""

For i = 1 To 10
bc = "BC" & i & ".xls"
MyPath = Dir & bc

Workbooks.Open MyPath


Application.Goto Workbooks("Tong hop.xlsm").Worksheets("KetQua").Range("B7")
Range(Selection, Selection.End(xlDown)).Select
m = Selection.Count
If m = 2 Then
m = 0
Else
m = Selection.Count
End If


Application.Goto Workbooks(bc).Worksheets("KQ").Range("B1")
Range(Selection, Selection.End(xlDown)).Select
n = Selection.Count
Workbooks(bc).Worksheets("KQ").Range(Cells(2, 2), Cells(n, 13)).Copy Destination:=Workbooks("Tong hop.xlsm").Worksheets("KetQua").Cells(m + 9, 2)
Application.Goto Workbooks("Tong hop.xlsm").Worksheets("KeHoach").Range("B7")
Range(Selection, Selection.End(xlDown)).Select
m = Selection.Count
If m = 2 Then
m = 0
Else
m = Selection.Count
End If
Application.Goto Workbooks(bc).Worksheets("KH").Range("B1")
Range(Selection, Selection.End(xlDown)).Select
n = Selection.Count
Workbooks(bc).Worksheets("KH").Range(Cells(2, 2), Cells(n, 13)).Copy Destination:=Workbooks("Tong hop.xlsm").Worksheets("KeHoach").Cells(m + 9, 2)
Workbooks(bc).Close
Next


End Sub


Mình muốn copy dữ liệu trong 2 sheet KQ và KH từ các file riêng lẻ BC1.xls, BC2.xls...., BC10.xls vào 2 sheet tương ứng "KetQua" và "KeHoch" trong file "Tong hop.xlsm",
Nhưng như mình test thử thì giá trị m của mình luôn =2 với mọi i, làm cho dữ liệu paste vào file Tong hop luôn bắt đầu từ ô B9, mà mình muốn dữ liệu file BC1.xls bắt đầu dán vào ô B9, xong dữ liệu từ BC2.xls dán vào dòng tiếp theo dữ liệu đã có từ BC1.xls.
Mình không hiểu tại sao m lại luôn =2, mong mọi người giúp với ạ.

View attachment Tong hop.xlsm
View attachment BC1.xls
 

File đính kèm

  • BC1.jpg
    BC1.jpg
    50 KB · Đọc: 6
  • KQ.jpg
    KQ.jpg
    51 KB · Đọc: 5
Lần chỉnh sửa cuối:
Upvote 0
em có 1 file excel như file đính kèm, mục đích là em muốn đếm số dòng CÓ SỐ ở cột F của mỗi sheet (không đếm dòng có chữ) và tổng hợp theo tên của sheet để cho ra kết quả như sheet tổng hợp, em có khoảng 20 sheet, mỗi sheet có thể có đến 1000 dòng, mọi người giúp em với ạ, hoặc mọi người làm giúp em code để copy cột F ở sheet 1 -> cột A ở sheet TongHop, tương tự cột F ở quý 2 -> cột B ở sheet TongHop,.....rồi em tự count cũng được ạ, cảm ơn mọi người. Em có coi những bài tổng hợp sheet cũ nhưng không có cái nào áp dụng được như mục đích.
 

File đính kèm

  • Test.xlsm
    10 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các anh chị trên diễn đàn giải nghĩa đoạn Code sau với ạ

Function FileNameList(FolPath As String)
On Error Resume Next
FolPath = FolPath & ""
ActiveWorkbook.Names.Add "Arr", "=""" & FolPath & """&Files(""" & FolPath & "*.xls"")"
FileNameList = Evaluate("Arr")
ActiveWorkbook.Names("Arr").Delete
End Function
 
Upvote 0
em có 1 file excel như file đính kèm, mục đích là em muốn đếm số dòng CÓ SỐ ở cột F của mỗi sheet (không đếm dòng có chữ) và tổng hợp theo tên của sheet để cho ra kết quả như sheet tổng hợp, em có khoảng 20 sheet, mỗi sheet có thể có đến 1000 dòng, mọi người giúp em với ạ, hoặc mọi người làm giúp em code để copy cột F ở sheet 1 -> cột A ở sheet TongHop, tương tự cột F ở quý 2 -> cột B ở sheet TongHop,.....rồi em tự count cũng được ạ, cảm ơn mọi người. Em có coi những bài tổng hợp sheet cũ nhưng không có cái nào áp dụng được như mục đích.
bạn chạy thử code
Mã:
Sub DemSo()
Dim Darr(), Arr(), i As Long, k As Integer, s As Integer
ReDim Arr(1 To Sheets.Count, 1 To 2)
For s = 1 To Sheets.Count
    If Sheets(s).Name = "TongHop" Then GoTo tiep
    k = k + 1:  Arr(k, 1) = Sheets(s).Name: Arr(k, 2) = 0
    If Sheets(s).Range("F65500").End(xlUp).Row < 3 Then GoTo tiep
    Darr = Sheets(s).Range("F3:F" & Sheets(s).Range("F65500").End(xlUp).Row).Value
    For i = 1 To UBound(Darr)
        If IsNumeric(Darr(i, 1)) And Darr(i, 1) <> "" Then Arr(k, 2) = Arr(k, 2) + 1
    Next i
tiep:
Next s
Sheets("TongHop").Range("B4:C1000").ClearContents
Sheets("TongHop").Range("B4").Resize(k, 2) = Arr
End Sub
 
Upvote 0
bạn chạy thử code
Mã:
Sub DemSo()
Dim Darr(), Arr(), i As Long, k As Integer, s As Integer
ReDim Arr(1 To Sheets.Count, 1 To 2)
For s = 1 To Sheets.Count
    If Sheets(s).Name = "TongHop" Then GoTo tiep
    k = k + 1:  Arr(k, 1) = Sheets(s).Name: Arr(k, 2) = 0
    If Sheets(s).Range("F65500").End(xlUp).Row < 3 Then GoTo tiep
    Darr = Sheets(s).Range("F3:F" & Sheets(s).Range("F65500").End(xlUp).Row).Value
    For i = 1 To UBound(Darr)
        If IsNumeric(Darr(i, 1)) And Darr(i, 1) <> "" Then Arr(k, 2) = Arr(k, 2) + 1
    Next i
tiep:
Next s
Sheets("TongHop").Range("B4:C1000").ClearContents
Sheets("TongHop").Range("B4").Resize(k, 2) = Arr
End Sub
Em đã chạy thử và thành công, cảm ơn bác nhiều nhé :D
 
Upvote 0
Em chào các anh.
Em muốn bỏ lọc và fomat dữ liệu ở tất cả các sheet thì code như thế nào ạ. Em cảm ơn mọi người.
 
Upvote 0
Em chào cả nhà. Hiện em đang mới học VBA em nhờ code giúp em file đính kèm.
Em muốn viết code tự động dò danh mục kho mà chưa biết chính xác dữ liệu có bao nhiêu dòng.
Và nếu như bị NA thìbáo lỗi bằng MsgBox nội dung" Thiếu DM17 " và kết thúc Sub luôn lập tức. Em cảm ơn.
 

File đính kèm

  • HỌC VBA.xlsx
    9.2 KB · Đọc: 4
Upvote 0
Em chào cả nhà. Hiện em đang mới học VBA em nhờ code giúp em file đính kèm.
Em muốn viết code tự động dò danh mục kho mà chưa biết chính xác dữ liệu có bao nhiêu dòng.
Và nếu như bị NA thìbáo lỗi bằng MsgBox nội dung" Thiếu DM17 " và kết thúc Sub luôn lập tức. Em cảm ơn.
Bạn xem file đính kèm.
 

File đính kèm

  • HOC VBA.xlsb
    15.3 KB · Đọc: 6
Upvote 0
Em muốn code như sau:
Ô c5 chạy công thức +VLOOKUP(B5;DM!A:B;2;0)
Sau đó tự động chạy Công thức ở cột C nhưng nếu bị NA thì báo lỗi và dừng sub lại

Cũng muốn cố giúp bạn nhưng không hiểu được bạn muốn gì...
Chạy công thức ở cột C là chạy như nào?
Công thức ở cột C sau khi nhập xong nếu có lỗi thì nó báo lỗi cho mình biết luôn rồi.
Dừng sub? yêu cầu cái sub đó thực hiện gì để dừng nó khi gặp #N/A ở cột C.
Ngoài ra, bạn không nên viết VLOOKUP(B5;DM!A:B;2;0) vùng tìm kiếm cả cột như thế, máy tính sẽ không kham nổi. Dữ liệu tới đâu thì chọn tới vùng đó thôi
Mã:
=VLOOKUP(B5,DM!$A$4:$B$9,2,0)
 
Upvote 0
Em cảm ơn bác Befaint nhé. Em theo Code của bác để vận dụng vào file của em đã ok rồi.
 
Upvote 0
mọi người xem giúp mình file đính kèm
cho mình hỏi lý do vì sao khi show form lên rồi thao tác kéo qua lại 1 chút, sau đó đóng form đi
tắt excel => treo
vì sao lại bị treo như thế, có thể giúp mình khắc phục được không
link file
 
Upvote 0
mọi người xem giúp mình file đính kèm
cho mình hỏi lý do vì sao khi show form lên rồi thao tác kéo qua lại 1 chút, sau đó đóng form đi
tắt excel => treo
vì sao lại bị treo như thế, có thể giúp mình khắc phục được không
link file

Thêm code này vào UserForm thử xem:
Mã:
Private Sub UserForm_Terminate()
  End
End Sub
 
Upvote 0
Thêm code này vào UserForm thử xem:
Mã:
Private Sub UserForm_Terminate()
  End
End Sub
oh, được rồi thầy ạ, em cảm ơn thầy. mà code đó dài quá. còn code nào tương tự vậy mà ngắn hơn không thầy. nếu áp dụng vô file em viết thì nó cả núi code trong đó luôn. nhìn ngán chết
 
Upvote 0
Xin chào các Anh chị trong diễn đàn. cho e hỏi chút ạ:
- E bôi đen 1 vùng và muốn đếm xem vùng đó có bao nhiêu dòng thì dùng đoạn code như nào vậy ạ ! (CHẳng hạn bôi đen vùng [A1:C5] thì là 5 dòng ạ )
 
Upvote 0
Web KT

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

Back
Top Bottom