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 nghĩ ra 2 cách bạn xem dùng được thì dùng:
Cách 1: Thay đổi công thức ở cột C thành: =+IF(-TODAY()+E2<0;"Hoàn thành";IF(-TODAY()+E2=0;"Đến hạn";"Còn "&E2-TODAY()&" ngày"));
Cách 2: thay đoạn code:
'Loc Phát Sinh Dén Han: '
...
Me.ListDenHan.List(ListDenHanRow, 2) = Cells(j, 3)
....
Thành code:
If Cells(j, 3) = ChrW(272) & ChrW(7871) & "n h" & ChrW(7841) & "n" Then
Me.ListDenHan.List(ListDenHanRow, 2) = Cells(j, 3)
Else: Me.ListDenHan.List(ListDenHanRow, 2) = "Còn " & Cells(j, 3) & "ngày"
End If

Bổ sung cách 3 ngắn và đơn giản nhất:
thay code:
'Loc Phát Sinh Dén Han: '
...
Me.ListDenHan.List(ListDenHanRow, 2) = Cells(j, 3)
....
Thành code:
'Loc Phát Sinh Dén Han: '
...
Me.ListDenHan.List(ListDenHanRow, 2) = Cells(j, 3).text
....
Em đã làm được, cám ơn bobokiki132 nhiều nha.
 
Upvote 0
Em chào các anh chị ạ,
Em đang là học sinh cấp 2, và đang tìm tòi học VBA ạ,

Em đang chưa biết làm 1 bài toán như này, mong a chị gợi ý thuật toán giúp em ạ:

Gán vào 1 cell trong sheet, 1 giá trị (bằng số) - (ví dụ gán vào cell (1,1) giá trị bằng 10), cứ sau 2' thì giá trị trong cell (1,1) cộng thêm 1

-----------
Em đã tìm google mấy ngày nay cả web tiếng việt và tiếng anh nhưng ko ra cách làm ạ (e ko giỏi tiếng anh cho lắm ^^), mong anh chị chỉ giáo ạ

Em cám ơn nhiều ạ !
 
Upvote 0
Mới tìm tòi học mà vọc chi cái rắc rối vậy? Cái này rất ít liên quan đến thuật toán lập trình, nó chỉ là một xảo thuật.

Từ khoá để tìm: Appplication.OnTime (tìm ở GPE cũng được, có cả đống)

Chú: nếu còn muốn hỏi tiếp thì nên học thói quen viết trọn từ, tránh viết tắt. Chịu khó để ý sẽ thấy những người trả lời rất hiếm khi viết tắt.
 
Upvote 0
Em chào các anh chị ạ,
Em đang là học sinh cấp 2, và đang tìm tòi học VBA ạ,

Em đang chưa biết làm 1 bài toán như này, mong a chị gợi ý thuật toán giúp em ạ:

Gán vào 1 cell trong sheet, 1 giá trị (bằng số) - (ví dụ gán vào cell (1,1) giá trị bằng 10), cứ sau 2' thì giá trị trong cell (1,1) cộng thêm 1

-----------
Em đã tìm google mấy ngày nay cả web tiếng việt và tiếng anh nhưng ko ra cách làm ạ (e ko giỏi tiếng anh cho lắm ^^), mong anh chị chỉ giáo ạ

Em cám ơn nhiều ạ !
Thử chơi.À mà nó không dừng đâu nhé.
 

File đính kèm

Upvote 0
Các thầy/anh ơi, mình có thể tạo ra Function mà có thể gọi tên sheet, hoặc tạo ra 1 mảng tên các sheet được ko ạ?
 
Upvote 0
Các thầy/anh ơi, mình có thể tạo ra Function mà có thể gọi tên sheet, hoặc tạo ra 1 mảng tên các sheet được ko ạ?
Bạn thử.
Mã:
Function tensheet(ByVal so As Integer) As String
        tensheet = Sheets(so).Name
End Function
Mã:
=tensheet(1)
 
Upvote 0
Bạn kéo nó dài ra nhé.Cái này nó chỉ hiện tên 1 sheets thôi mà.
em muốn kết hợp công thức mảng vào cái hàm tensheet đó anh để tạo ra mảng {TH, ab, cd, xy} sau đó sẽ dùng tiếp hàm indirect để giải quyết theo mục đích
Cơ mà =tensheet{1,2,3,4} nó báo lỗi value
Có phải function tạo ra không thể tạo mảng nhưng trong công thức excel phải ko ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
em muốn kết hợp công thức mảng vào cái hàm tensheet đó anh để tạo ra mảng {TH, ab, cd, xy} sau đó sẽ dùng tiếp hàm indirect để giải quyết theo mục đích
Cơ mà =tensheet{1,2,3,4} nó báo lỗi value
Có phải function tạo ra không thể tạo mảng nhưng trong công thức excel phải ko ạ?
Bạn thử cái hàm mảng này.
 

File đính kèm

Upvote 0
Kính nhờ các anh chị chỉ giúp mình 1 đoạn code về tìm ngày trong dữ liệu.
Giả sử cột A chứa dữ liệu dạng Date, format dd/mm/yyyy, sắp xếp tăng dần (các giá trị có thể không liên tục, có thể có nhiều dòng có cùng giá trị).
Có thể dùng code Function sau
Function TimDong(arr As Range, gt As Date) As Integer
Dim k As Range
For Each k In arr
If k.Value >= gt Then
TimDong = k.Row
Exit Function
End If
Next
End Function

Không cần bẫy lỗi vì nếu không có thì cho KQ = 0.
 
Upvote 0
chào các anh. các anh cho em hỏi cái nyaf là em bị lồi gì ạ

Private Sub Textcaphanmem_Change()
On Error Resume Next
Textcaphanmem.Text = Format(Textcaphanmem.Text, "#,##0")
End Sub

em dùng hàm này trong userfrom mà trong textbox thì hiện đúng nhưng trong file nhập excel thì bị thiều mất 3 số 0
VD như trong textbox nhập 2000000 textbox sẽ hiện 2,000,000 trong execl là 2.000.000
nhưng khi nhập 200000 texbox hiện 200,000 exel chỉ hiện 200
em đã chỉnh lại trong Format cells/Number/Custome #,##0 đung như trong textbox rồi :(
 
Upvote 0
Help Me!!!
Kính gửi các anh chị trên diễn đàn mình, em mới học VBA nên chưa biết sửa code đúng cách, rất mong các anh chị chỉ giáo giúp em.
chẳng là e muốn lấy danh sách những ông bà (gồm tất cả các cột như trong file data1) mà có giá trị tại cột PENINT và/hoăc cột BILINT và/hoặc cột BILPRN #0 sang báo cáo tại file final. Tức là nếu giá trị tại 3 cột trền đều bằng 0 thì e ko lấy.
E đã viết code, nhưng mắc lỗi và không biết sửa.
P/s: Các anh/chị có thể thay đổi đương dẫn trong code để mở file data1 ạ.
Mong các anh chị xem sớm giúp e với, em cảm ơn rất rất nhiều ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
 
Upvote 0
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Bạn hiểu đoạn code trên không.Đó là 4 hàm if lồng nhau.Cái điều kiện cuối cùng thì cần phải đúng 4 cái thì mới được thực hiện.Nên không thể rút gọn được.
 
Upvote 0
Mã:
Sub Test()
With Sheets("KH")
If .Range("D48") <> Empty Then
     .Range("AQ47") = "."
If .Range("D54") <> Empty Then
     .Range("AQ53") = "."
If .Range("D60") <> Empty Then
     .Range("AQ59") = "."
If .Range("D66") <> Empty Then
     .Range("AQ65") = "."
End If
End If
End If
End If
End With
End Sub
Đoạn code trên có thể viết gọn lại nữa không ạ. Nếu được, nhờ các anh chị chỉ giúp.
Xin cảm ơn
Nếu D48 = Empty và D54 <> Empty thì AQ53 có bằng "." không? Nếu AQ53 = "." thì tôi nghĩ code trên còn thiếu.
 
Upvote 0
hi cả nhả e đang làm thông báo điểm với bảng điểm từ file excel sang file thông báo là file word nhưng vị trí bảng điểm hiện thị trong file word không đúng vị trí mà luôn hiện ở cuối trang word mong các bác giúp em.Em cảm ơn
 

File đính kèm

Upvote 0
Em nhờ các bác giúp 4 trường hợp sau giúp:


1/ Code VBA để coppy sau VD: Sheet 1
Khi ta dang Mở File A ở Sheet 1 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet1 File C những cột A,B,C,D Nếu thỏa cột B có chữ "nhà xe" vào Sheet1 File A


2/ Code VBA để coppy sau VD: Sheet 2
Khi ta dang Mở Sheet2 File A ở Sheet 2 có 1 nút "coppy" Khi click vào Nút "Coppy" thì Coppy tất cả các hàng trong Sheet2 File C những cột A,B,C,D,E,F,G,H,I,K Nếu thỏa cột C Không có chữ "HQ" vào Sheet2 File A

3/ Code VBA để coppy sau VD: Sheet 3
Khi dang lam viec o Sheet3 FileA có các hàng dữ liệu liền nhau có các cột A,B,C,D,E và trong sheet đó có nút Coppy. Nếu Click vào nút Coppy mà thỏa mãn 2 điều kiện sau:
- Dieu kien 1: cột A trong Sheet3 FileC và cột A Sheet3 FileA (sheet và file hiện thời làm việc) có số số liệu trùng nhau.
- Dieu kien 2: cột F trong Sheet3 FileC không có dấu "x"
thì sẽ coppy các dữ liệu của các hàng ở Cột C,D,E của Sheet3 FileC sang các cột C,D,E của Sheet3 FileA
(lưu ý giúp: dữ liệu hãng ở Sheet3 FileA có thể ko liền nhau)

4/ Code VBA trong Form VD: Sheet 4
Trong 1 Form có 2 text boxt sau:
Text boxt 1, Text boxt 2
Khi nhập dữ liệu vào Text boxt 1 bấm enter thì Text boxt 2 ktra 3 ký tự đầu của
Text boxt 1 nếu có 3 chữ "kle" thì Text boxt 2 sẽ tự điền là "kh" còn ko có Text boxt 2 sẽ điền "nhà xe"
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom