Bài tập cho người dùng VBA

  • Thread starter SA_DQ
  • Ngày gửi
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
608
104
43
68
HCM city
Giả dụ chúng ta có 1 bảng dữ liệu & được trích ra phần nhỏ như hình kèm theo:
1759757286934.png


Nhiệm vụ được đề ra là số tiên ở cột cuối (6) sẽ được phân ra theo 1 trị cố định là 500 triệu cho mỗi dòng riêng biết
& dòng cuối là số dư dưới trị cố định theo qui ước trên (như hình dưới đây)

1759757506741.png
Để thực hiện việc này ta xài macro sau:

PHP:
Sub TaiPhanBo()
 Const FB As LongLong = 500000000
 Dim Rws As Long, DCK As LongLong, SoDu As LongLong, W As Long, SoDg As Integer, Col As Integer
 Dim Dg As Integer                          'DCK:= Du Cuôi Kì  '
 Dim Cls As Range
 
 Sheets("131TK").Select
 Rws = Sheets("131TK").UsedRange.Rows.Count
 SoFB = Cells(Rws + 9, "H").End(xlUp).Value / FB + Rws
 ReDim Arr(1 To SoFB, 1 To 4)
 For Each Cls In Range([A5], [A5].End(xlDown))
    W = W + 1:                          '    If W > 7 Then Exit For '
    DCK = Cells(Cls.Row, "H").Value:        SoDg = Int(DCK / FB)
    SoDu = DCK - SoDg * FB
    If SoDg < 1 Then
        Arr(W, 1) = Cls.Value:              Arr(W, 2) = Cls.Offset(, 1).Value
        Dg = Cls.Row:                       Arr(W, 3) = Cells(Dg, "F").Value
        Arr(W, 4) = DCK
    Else
        Arr(W, 1) = Cls.Value:              Arr(W, 2) = Cls.Offset(, 1).Value
        Dg = Cls.Row:                       Arr(W, 3) = Cells(Dg, "F").Value
        For hg = 1 To SoDg
            Arr(W, 4) = FB:                 W = W + 1
        Next hg
        If SoDu > 0 Then
            Arr(W, 4) = SoDu
        Else
            W = W - 1
        End If
    End If
 Next Cls
 [K5].Resize(W, 4).Value = Arr()
End Sub
 
Khóa học Quản trị dòng tiền
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
608
104
43
68
HCM city
XÁC ĐỊNH NHANH SỐ CHÍNH PHƯƠNG (tác giả: Copilot)​
PHP:
Function LaSoChinhPhuong_TheoChiaHet(n As Long) As Boolean
    If n < 0 Then
        LaSoChinhPhuong_TheoChiaHet = False
        Exit Function
    End If    
    Dim du4 As Long, du5 As Long, du10 As Long
    du4 = n Mod 4
    du5 = n Mod 5
    du10 = n Mod 10
    If du4 = 2 Or du4 = 3 Then
        LaSoChinhPhuong_TheoChiaHet = False
        Exit Function
    End If    
    If du5 = 2 Or du5 = 3 Then
        LaSoChinhPhuong_TheoChiaHet = False
        Exit Function
    End If    
    If du10 = 2 Or du10 = 3 Or du10 = 7 Or du10 = 8 Then
        LaSoChinhPhuong_TheoChiaHet = False
        Exit Function
    End If    
    ' Nếu vượt qua các kiểm tra chia hết, ta dùng căn bậc hai để xác nhận
    LaSoChinhPhuong_TheoChiaHet = (Int(Sqr(n)) ^ 2 = n)
End Function
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
608
104
43
68
HCM city
Nhờ hàm viết bỡi Copilot (bài bên trên liền kề), ta có thể viết 1 macro để tìm ra số chính phương từ biểu thứ,

(Y - 2) Y (Y + 2) - (Y + 4) - (Y + 6)​

& Chúc các bạn thành công!
 
Sửa lần cuối:

Xem nhiều