Chuyên đề giải đáp những thắc mắc về code VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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:
Nhu cầu của mình là đếm số ô có chứa chữ định dạng theo màu. Mình dùng code này:
Function CountByColor(range_data As Range, criteria As Range) As Long
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Font.ColorIndex
For Each datax In range_data
If datax.Font.ColorIndex = xcolor Then
CountByColor = CountByColor + 1
End If
Next datax
End Function. Nhưng đếm xong rồi mình xóa dữ liệu của ô đó thì kết quả không thay đổi. Trong VD của file lúc đầu có 6 ô có chữ màu xanh (đếm đúng) nhưng sau đó mình xóa bớt 1-2 ô đi thì kết quả không thay đổi theo. Các bạn giúp mình chỗ này với
Tôi không có điều kiện test code nhưng tôi đoán khi xóa bạn chỉ xóa giá trị, định dạng màu của các ô đó vẫn còn nguyên nên kết quả không thay đổi. Để khắc phục thì sửa code lại theo hướng chỉ đếm các ô có giá trị.
Sửa
If datax.Font.ColorIndex = xcolor Then
Thành
If datax.Font.ColorIndex = xcolor And datax.Value <> "" Then
 
Upvote 0
Tôi không có điều kiện test code nhưng tôi đoán khi xóa bạn chỉ xóa giá trị, định dạng màu của các ô đó vẫn còn nguyên nên kết quả không thay đổi. Để khắc phục thì sửa code lại theo hướng chỉ đếm các ô có giá trị.
Sửa
If datax.Font.ColorIndex = xcolor Then
Thành
If datax.Font.ColorIndex = xcolor And datax.Value <> "" Then
Anh lại nghĩ, chỉ cần thêm cái này vào hàm là OK rồi:

Function xyz ...
Application.Volatile
.....
End Function
 
Upvote 0
Tôi không có điều kiện test code nhưng tôi đoán khi xóa bạn chỉ xóa giá trị, định dạng màu của các ô đó vẫn còn nguyên nên kết quả không thay đổi. Để khắc phục thì sửa code lại theo hướng chỉ đếm các ô có giá trị.
Sửa
If datax.Font.ColorIndex = xcolor Then
Thành
If datax.Font.ColorIndex = xcolor And datax.Value <> "" Then

CÁM ƠN BẠN RẤT NHIỀU. Mình đã làm được trường hợp delete thì kết quả thay đổi. Nhưng giờ mình tét thêm thì khi mình ĐỔI MÀU CHỮ trong ô từ màu hồng sang màu xanh thì kết quả không tự cập nhật mà mình phải dbclick vô ô công thức rồi enter thì kết quả mới được cập nhật. Bạn làm ơn giúp mình lần nữa nhé -=.,,
 
Upvote 0
Chào mọi người, em có vấn đề này cần mọi người giúp đỡ : Bảng tính của em có 2 sheet, em đang viết Sub tại sheet1, em muốn kiểm tra bằng hàm IF xem ô D3 của Sheet1 có bằng với ô A4 của sheet2 không thì em viết như sau:
If range("D3")=.... then . Tuy nhiên cái đoạn ... em không biết điền như thế nào cả, mong mọi người giới thiệu cho em 1 số cách để giải quyết vấn đề trên.

Em xin cảm ơn !
 
Upvote 0
Chào mọi người, em có vấn đề này cần mọi người giúp đỡ : Bảng tính của em có 2 sheet, em đang viết Sub tại sheet1, em muốn kiểm tra bằng hàm IF xem ô D3 của Sheet1 có bằng với ô A4 của sheet2 không thì em viết như sau:
If range("D3")=.... then . Tuy nhiên cái đoạn ... em không biết điền như thế nào cả, mong mọi người giới thiệu cho em 1 số cách để giải quyết vấn đề trên.

Em xin cảm ơn !

Viết ở sheet nào thì cũng nên viết rõ:
If sheet1.range("D3").value=sheet2.range("A4").value then
 
Upvote 0
Chào mn. E có dữ liệu tại A1 = 5; A2 = 10. Vậy em muốn chọn vùng tương ứng với dữ liệu của 2 Cell trên là A5:A10 bằng Range thì làm như nào vậy ạ ! E xin cảm ơn ạ
 
Upvote 0
Chào mn. E có dữ liệu tại A1 = 5; A2 = 10. Vậy em muốn chọn vùng tương ứng với dữ liệu của 2 Cell trên là A5:A10 bằng Range thì làm như nào vậy ạ ! E xin cảm ơn ạ
Bạn thử code sau:

Mã:
Range("A" & [A1] & ":A" & [A2]).Select
 
Lần chỉnh sửa cuối:
Upvote 0
Viết ở sheet nào thì cũng nên viết rõ:
If sheet1.range("D3").value=sheet2.range("A4").value then

1,2 ở đây em hiểu là thứ tự các sheet vậy nếu
sheet1 đặt tên là a, sheet2 đặt tên là b thì muốn viết theo tên Sheet thì phải viết như thế nào ạ
 
Lần chỉnh sửa cuối:
Upvote 0
CÁM ƠN BẠN RẤT NHIỀU. Mình đã làm được trường hợp delete thì kết quả thay đổi. Nhưng giờ mình tét thêm thì khi mình ĐỔI MÀU CHỮ trong ô từ màu hồng sang màu xanh thì kết quả không tự cập nhật mà mình phải dbclick vô ô công thức rồi enter thì kết quả mới được cập nhật. Bạn làm ơn giúp mình lần nữa nhé -=.,,
Bạn huuthang_bd ráng giúp mình nhé. Cám ơn bạn nhiều
 
Upvote 0
Chào mn. E có dữ liệu tại A1 = 5; A2 = 10. Vậy em muốn chọn vùng tương ứng với dữ liệu của 2 Cell trên là A5:A10 bằng Range thì làm như nào vậy ạ ! E xin cảm ơn ạ

Bạn thử code sau:

Mã:
Range("A" & [A1] & ":A" & [A2]).Select

Cũng bài toán này, e có dữ liệu tại Range (A5:A10) là (1;2;3;4;5). Thì làm thế nào để kết hợp thêm hàm Sum để cộng dữ liệu đó vậy ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Chào mn. E có dữ liệu tại A1 = 5; A2 = 10. Vậy em muốn chọn vùng tương ứng với dữ liệu của 2 Cell trên là A5:A10 bằng Range thì làm như nào vậy ạ ! E xin cảm ơn ạ



Cũng bài toán này, e có dữ liệu tại Range (A5:A10) là (1;2;3;4;5). Thì làm thế nào để kết hợp thêm hàm Sum để cộng dữ liệu đó vậy ạ

Thử vầy xem: MsgBox [SUM(A1:A5)]
 
Upvote 0
Chào mn. E có dữ liệu tại A1 = 5; A2 = 10. Vậy em muốn chọn vùng tương ứng với dữ liệu của 2 Cell trên là A5:A10 bằng Range thì làm như nào vậy ạ ! E xin cảm ơn ạ



Cũng bài toán này, e có dữ liệu tại Range (A5:A10) là (1;2;3;4;5). Thì làm thế nào để kết hợp thêm hàm Sum để cộng dữ liệu đó vậy ạ
Có phải ý bạn là thế này:
Mã:
Sub TinhTong()
    [B4] = Application.Sum(Range("A" & [A1] & ":A" & [A2]))
End Sub
Ô B4 là ô hiện thị kết quả
 
Upvote 0
Có phải ý bạn là thế này:
Mã:
Sub TinhTong()
    [B4] = Application.Sum(Range("A" & [A1] & ":A" & [A2]))
End Sub
Ô B4 là ô hiện thị kết quả

Cảm ơn thầy NDU và a Cá Ngừ. E mò cả buổi cách kết hợp 2 cái Range và Sum này mà k ra.... Đúng ý em rùi ạ ^^
 
Upvote 0
Nhờ các bác sửa dùm code này với ạ

Mã:
Sub Them_hang_VLDV()
'
' Them_hang_VLDV Macro
'


'
    Rows("20:20").Select
    Selection.Copy
    Rows("21:21").Select
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
    Range("E21:H21").Select
    Selection.ClearContents
End Sub
Em đang tạo nút bấm có chức năng Insert Copied Cells, vấn đề là mỗi lần bấm nút nó lại chèn ở hàng thứ 21, em muốn chèn tại hàng chứa nút bấm thì phải sửa code trên như thế nào ạ, thanks mọi người
 
Upvote 0
hnagChuaNutBam = ActiveSheet.Buttons(Application.Caller).TopLeftCell.Row
 
Upvote 0
Anh VetMini hướng dẫn cụ thể hơn tý giúp em được không, em chưa hiểu ý anh lắm, cảm ơn anh
 
Upvote 0
Mã:
Sub Them_hang_VLDV()
'
' Them_hang_VLDV Macro
'


'
    Rows("20:20").Select
    Selection.Copy
    Rows("21:21").Select
    Selection.Insert Shift:=xlDown
    Application.CutCopyMode = False
    Range("E21:H21").Select
    Selection.ClearContents
End Sub
Em đang tạo nút bấm có chức năng Insert Copied Cells, vấn đề là mỗi lần bấm nút nó lại chèn ở hàng thứ 21, em muốn chèn tại hàng chứa nút bấm thì phải sửa code trên như thế nào ạ, thanks mọi người
Tôi chưa hiểu ý bạn lắm.
Thử đính kèm file xem sao?
Muốn chèn tại hàng có nút bấm? Có nghĩa là bạn có nhiều nút bấm ở nhiều hàng khác nhau?
[warning1]Lưu ý tên đề tài nhé bạn. Smod vào sửa giúp tiêu đề cho bạn ý. Xin cảm ơn ![/warning1]
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom