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:
Nhờ các anh em trên GPE giải đáp giúp mình vấn đề sau.
Mình cũng đã cố tìm bằng các từ khóa trên gg và ở GPE nhưng không tìm ra đc chủ đề mình đang thắc mắc là:
Khi mình lấy giá trị từ sheet này sang sheet khác dùng
sheet1.range.value = sheet2.range
Nhanh hơn hay dùng mảng array sẽ nhanh hơn
Array = sheet1.range.value
Sheet2.range.resize = array

Và tương tự, gắn giá trị vào mảng rồi resize xuống range sẽ nhanh hơn hay cho vòng lặp chạy thẳng vào range sẽ nhanh hơn.
Ví dụ code mảng 1 chiều

For i = LBound(array) to UBound(array)
Array2(i) = array(i)
Next i
Sheet.range("A1").resize(UBound,) = transpose(Array2)


For i = LBound(array) to UBound(array)
Sheet.range("A" & i).value = array(i)
Next i

Thì cái nào sẽ nhanh hơn.

Mong mọi người giải đáp giúp mình với ạ.
Mình cảm ơn trước.

Nếu trong khi diễn giải có gì sai sót mong mọi người thông cảm bỏ qua vì mình cũng mới học về vba nên có nhiều cái chưa chuẩn xác lắm.
Cảm ơn mọi người.
theo mình nghĩ thì khi cho vào mảng nó sẽ nhanh hơn.
 
Upvote 0
Mọi người cho e hỏi. Có cách nào mình Dim và set giá trị cho biến. để dùng đc ở các sub và module khác mà k cần set lại ko ạ. Cám ơn
 
Upvote 0
Upvote 0
Được, nhưng với mục đích của bạn thì e rằng không nên.
Biến toàn cục dùng phải hết sức cẩn thận, vì vậy thường dùng cái tên khá dài để khó lẫn lộn. Người hay viết tắt thì có lẽ mục đích chỉ là do lười khai báo nhiều lần. Cứ biến a, b, c, i, j, k thì chắc chắn sẽ có ngày bể ổ.
 
Upvote 0
Được, nhưng với mục đích của bạn thì e rằng không nên.
Biến toàn cục dùng phải hết sức cẩn thận, vì vậy thường dùng cái tên khá dài để khó lẫn lộn. Người hay viết tắt thì có lẽ mục đích chỉ là do lười khai báo nhiều lần. Cứ biến a, b, c, i, j, k thì chắc chắn sẽ có ngày bể ổ.
Được : thì làm ntn ạ
 
Upvote 0
Dạng khai báo biến hả A.
Rồi e muốn set gtri cho nó luôn và cái sub khác xài gtri biến đó.
Hướng dẫn cụ thể e vs ạ
bạn cứ khai báo bình thường rồi truyền giá trị cho nó ở đâu cũng được nhé trong sub hoặc ngoài cũng được nó vẫn ghi nhớ hết
 
Upvote 0
Hình như cô ta muốn khởi trị. Biến VBA trước khi khởi trị thì nó có mặc định (0 cho số).

Nếu muốn vậy thì làm như sau:

Public Var1 As Integer
Public Var2 As Integer
...

Public Sub KhoiTri()
Var1 = 20
Var2 = 21
...
End Sub

Trong sự kiện Workbook_Open, đặt thêm câu này ngay đầu hàm:
KhoiTri

Sau đó, muốn thay đổi nó ở đâu tuỳ thích.

Chú: bản chất của Const là không thay đổi. Người đọc code LUÔN LUÔN tin rằng nó không bao giờ thay đổi.
Nếu, với một thủ thuật vặn vẹo nào đó mà bạn thay đổi được nó thì có phải bạn tự làm mất niềm tin của người khác chăng?
Cái đặt ngay đầu hàm là sao ta :d
Chứ k phải sử dụng call cái sub khoitri ay trk hã
 
Upvote 0
Upvote 0
Chào mọi người.
Em chỉ mới tìm hiểu VBA nên nhờ mọi người giúp đỡ.
Bài toán như sau: Em nhập 1 số tại A1 của sheet1
+Nếu A1>10 =>Thông báo a lớn hơn 10
+Nếu A1=10 =>Thông báo a bằng 10
+Nếu A1<10 =>Thông báo a nhỏ hơn 10
+Nếu A1 là chữ =>Thông báo a là dạng Text
Em xin cám ơn
 

File đính kèm

Upvote 0
Chào mọi người.
Em chỉ mới tìm hiểu VBA nên nhờ mọi người giúp đỡ.
Bài toán như sau: Em nhập 1 số tại A1 của sheet1
+Nếu A1>10 =>Thông báo a lớn hơn 10
+Nếu A1=10 =>Thông báo a bằng 10
+Nếu A1<10 =>Thông báo a nhỏ hơn 10
+Nếu A1 là chữ =>Thông báo a là dạng Text
Em xin cám ơn
Bạn thử:
PHP:
Sub LenhIf()
    a = Sheet1.Range("A1")
    If IsNumeric(a) = False Then MsgBox "a la dang Text"
    If IsNumeric(a) = True Then
        If a > 10 Then
            MsgBox "a lon hon 10"
        ElseIf a = 10 Then
            MsgBox "a bang 10"
        Else
            MsgBox "a nho hon 10"
        End If
    End If
End Sub
 
Upvote 0
Bạn thử:
PHP:
Sub LenhIf()
    a = Sheet1.Range("A1")
    If IsNumeric(a) = False Then MsgBox "a la dang Text"
    If IsNumeric(a) = True Then
        If a > 10 Then
            MsgBox "a lon hon 10"
        ElseIf a = 10 Then
            MsgBox "a bang 10"
        Else
            MsgBox "a nho hon 10"
        End If
    End If
End Sub
Cám ơn anh nhiều !
 
Upvote 0
Em có việc khó không biết làm sao nhờ cả nhà giúp.
Em có 1 Form nhập dữ liệu vào 1 sheet A. giờ em gặp khó là làm sao khi nhập vào form mà trùng tên (VD: text tên trùng với cột B trong Sheet A là tên) thì khi click vào lưu thì báo đã có tên trùng với tên đó và không cho lưu dữ liệu trùng đó nữa. Tks cả nhà.
 
Upvote 0
Các Anh/chị, Chú Bác cho e hỏi bên diễn đàn mình có chỗ nào bán cuốn sách lập trình về VBA không ạ. Xuất bản mới mới :)
Cám ơn
 
Upvote 0
Web KT

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

Back
Top Bottom