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ã:
Sub tinhtong()
Dim total, soluong, i As Long, x As Long, y As Long, a As Long
soluong = Sheet6.Range("f7:bz604").Value
For i = 1 To 1000
    For x = 1 To 100
    y = y + soluong(i, x).Value
    Next x
    total(a, 1) = y
Next i
Sheet6.Range("e7:e1000").Value = total(y, 1)

End Sub
Các bác xem giúp em các tính tổng trong 1 mảng với ạ, em làm mãi vẫn chưa được.
 
Upvote 0
Mã:
Sub tinhtong()
Dim total, soluong, i As Long, x As Long, y As Long, a As Long
soluong = Sheet6.Range("f7:bz604").Value
For i = 1 To 1000
    For x = 1 To 100
    y = y + soluong(i, x).Value
    Next x
    total(a, 1) = y
Next i
Sheet6.Range("e7:e1000").Value = total(y, 1)

End Sub
Các bác xem giúp em các tính tổng trong 1 mảng với ạ, em làm mãi vẫn chưa được.
Cái total của bạn là mảng hả.Mà biến a của bạn là gì.
 
Upvote 0
Có phải do dùng hàm "thanglv" trong module em làm ra xử lý lệnh qua nhiều dòng quá nó làm chậm file đi phải không ạ?
File gốc chậm do 2 nguyên nhân:
- Hàm tự tạo bằng VBA thường chạy chậm hơn hàm của Excel
- Hàm "thanglv" sử dụng cho nhiều Ô, khi có sự thay đổi của file sẽ tính lại giá trị của hàm, nên chạy rất nhiều lần làm chậm file, dùng Ô B1 lưu trữ giá trị nên chỉ chạy 1 lần.
 
Upvote 0
Tối kỵ trong lập trình là dùng biến mà chưa khởi tạo trị mặc định ban đầu cho nó. Ông VBA này lanh chanh quá, làm người code dễ dãi, có thói quen xấu theo.
Tui đọc mấy cái code mà thiếu option explicit và thiếu khởi tạo biến thì rất khó chịu, xóa liền.
 
Upvote 0
Xin các bác viết code giúp em ạ,
"Quăng" file lên cũng phải giải thích làm cái gì, trên cột nào... chứ thế này thì chắc phải hỏi anh Google xem code bạn viết là muốn làm cái gì.
Nếu anh Google trả lời được chắc sẽ có người giúp bạn.
 
Upvote 0
"Quăng" file lên cũng phải giải thích làm cái gì, trên cột nào... chứ thế này thì chắc phải hỏi anh Google xem code bạn viết là muốn làm cái gì.
Nếu anh Google trả lời được chắc sẽ có người giúp bạn.
Dạ, em muốn tính tổng cho các dòng từ vùng "f7:bz604" kết quả, hiện thị tại "e7:e604, mong bác giúp em các viết code cho mảng ạ. Em cảm ơn!
 
Upvote 0
Dạ, em muốn tính tổng cho các dòng từ vùng "f7:bz604" kết quả, hiện thị tại "e7:e604, mong bác giúp em các viết code cho mảng ạ. Em cảm ơn!
Dùng tạm cái này xem.
PHP:
Option Explicit

Public Sub sGpe()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Col As Long
With Sheets("TINH NVL")
    Col = .Range("XFD5").End(xlToLeft).Column - 5
    R = .Range("C100000").End(xlUp).Row - 6
    sArr = .Range("F7").Resize(R, Col).Value
    R = UBound(sArr)
    ReDim dArr(1 To R, 1 To 1)
    For I = 1 To R
        For J = 1 To Col
            dArr(I, 1) = dArr(I, 1) + sArr(I, J)
        Next J
    Next I
    .Range("E7").Resize(R) = dArr
End With
End Sub
 
Upvote 0
Dùng tạm cái này xem.
PHP:
Option Explicit

Public Sub sGpe()
Dim sArr(), dArr(), I As Long, J As Long, R As Long, Col As Long
With Sheets("TINH NVL")
    Col = .Range("XFD5").End(xlToLeft).Column - 5
    R = .Range("C100000").End(xlUp).Row - 6
    sArr = .Range("F7").Resize(R, Col).Value
   [B] R = UBound(sArr)[/B]
    ReDim dArr(1 To R, 1 To 1)
    For I = 1 To R
        For J = 1 To Col
            dArr(I, 1) = dArr(I, 1) + sArr(I, J)
        Next J
    Next I
    .Range("E7").Resize(R) = dArr
End With
End Sub
Cho mình hỏi dòng in đậm có cần thiết ko, và thêm nó có tác dụng gì, và nếu ko có thì sao ạ? Tại mình bỏ cái dòng đó code vẫn chạy bình thường ạ!
Xin cảm ơn
 
Upvote 0
:) Sorry
 
Lần chỉnh sửa cuối:
Upvote 0
Cho mình hỏi dòng in đậm có cần thiết ko, và thêm nó có tác dụng gì, và nếu ko có thì sao ạ? Tại mình bỏ cái dòng đó code vẫn chạy bình thường ạ!
Xin cảm ơn
Chạy bình thường mà có đúng không vậy bạn ?
Bỏ đi thì R = 0, chạy ra sao thì bạn tìm hiểu tiếp :D
Câu này hả bạn hay câu nào.
Option Explicit
 
Upvote 0
Sorry, em lại nhanh nhẩu đoảng, nhầm. Do không đọc kỹ đoạn code phía trên.
Mã:
.....
R = .Range("C100000").End(xlUp).Row - 6
....
R = UBound(sArr)
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy cuối cùng là chỗ đó sao vậy Snow nhỉ?
R = .Range("C100000").End(xlUp).Row - 6 ' (A)
sArr = .Range("F7").Resize(R, Col).Value ' (B)
R = UBound(sArr) ' (C)

(A) R là số dòng có dữ liệu trên sheet tính từ dòng 7. Vd. dữ liệu tới dòng 11 thì
.Range("C100000").End(xlUp).Row trả về 11, vậy R = 11 - 6 = 5 (5 dòng dữ liệu: 7, 8, 9, 10, 11)

(B) các dòng dữ liệu trên sheet tính từ dòng 7 được nhập vào mảng sArr. Tức trên sheet có R dòng dữ liệu, và trong sArr cũng có R dòng.

(C) R bằng chỉ số trên của dòng trong mảng sArr. Do chỉ số được tính từ 1 nên R cũng chính là số dòng trong mảng sArr, mà số dòng trong sArr bằng số dòng có dữ liệu trên sheet tính từ dòng 7. Vậy R ở (C) bằng R ở (A). Chính vì thế bạn bỏ R ở (C) thì code vẫn chạy vì R đã được xác định tại (A).

R ở điểm (C) thừa nhưng nếu có thì bạn nhìn ra ngay, khỏi suy nghĩ kỹ, là mảng dArr có cùng kích thước với mảng sArr. Thế thôi.

Ở đây code ngắn nên bạn nhìn thấy ngay là R ở (C) không cần nhưng nếu code dài mà (C) nằm ở cuối thì bạn không nhìn thấy ngay được. Có R ở (C) thì dứt khoát dArr có cùng kích thước với mảng sArr.
 
Upvote 0
Web KT

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

Back
Top Bottom