Bài 01: Tổng hợp bài thực hành cơ bản về VBA

Liên hệ QC

TUYEN DO VAN

Thành viên mới
Tham gia
12/4/18
Bài viết
11
Được thích
1
Giới tính
Nam
Mình mới tham gia học VBA, đang tập giải các bài tập cơ bản, nên mình post tại đây hy vọng được giao lưu học hỏi cùng các bạn.
Bài 01: In ra một dãy số từ 1 đến 100 và kiểm tra xem
  • Số nào chỉ chia hết cho 3 thì in ô đó là GP
  • Số nào chỉ chia hết cho 5 thì in ô đó là EC
  • Số nào vừa chia hết cho 3 và 5 thì in ô đó là GPEC
Mình sẽ đưa lời giải lên sau, mọi người có hứng thú thì giải thử nhé. Cùng nhau trao đổi để cùng tiến bộ nào.
 

File đính kèm

  • ex01.jpg
    ex01.jpg
    14.9 KB · Đọc: 42
Dùng MOD thôi
Chia hết cho 3: a MOD 3 = 0
Chia hết cho 5: a MOD 5 = 0
Chia hết cho 15: a MOD 15 = 0
Mã:
If a mod 15 = 0 then
   ...
elseif a mod 5 = 0 then
   ...
elseif a mod 3 = 0 then
   ...
End If
Muốn dài dòng văn tự thì ...
Số chia hết cho 3 (9) khi và chỉ khi tổng các chữ số chia hết cho 3 (9). Chia hết cho 5 khi và chỉ khi chữ số tận cùng là 0 hoặc 5. Nếu số nào chia hết cho p và cho q, với p và q nguyên tố, thì số đó chia hết cho p*q
 
Lần chỉnh sửa cuối:
Upvote 0
Mình mới tham gia học VBA, đang tập giải các bài tập cơ bản, nên mình post tại đây hy vọng được giao lưu học hỏi cùng các bạn.
Bài 01: In ra một dãy số từ 1 đến 100 và kiểm tra xem
  • Số nào chỉ chia hết cho 3 thì in ô đó là GP
  • Số nào chỉ chia hết cho 5 thì in ô đó là EC
  • Số nào vừa chia hết cho 3 và 5 thì in ô đó là GPEC
Mình sẽ đưa lời giải lên sau, mọi người có hứng thú thì giải thử nhé. Cùng nhau trao đổi để cùng tiến bộ nào.
theo đúng nguyên lời văn của a viết nghen hihii
Mã:
Sub InDaySo()
    Const N As Long = 100
    Dim kq(), i As Long
    ReDim kq(1 To N, 1 To 2)
    For i = 1 To N Step 1
        kq(i, 1) = i
        If i Mod 3 = 0 Then
            If i Mod 5 = 0 Then
                kq(i, 2) = "GPEC"
            Else
                kq(i, 2) = "GP"
            End If
        ElseIf i Mod 5 = 0 Then kq(i, 2) = "EC"
        End If
    Next i
    Sheet1.UsedRange.ClearContents
    Sheet1.Cells(1, 1).Resize(N, 2).Value = kq
End Sub
 

File đính kèm

  • Bài 01.xlsm
    16.5 KB · Đọc: 27
Upvote 0
Dùng MOD thôi
Chia hết cho 3: a MOD 3 = 0
Chia hết cho 5: a MOD 5 = 0
Chia hết cho 15: a MOD 15 = 0

Muốn dài dòng văn tự thì ...
Số chia hết cho 3 (9) khi và chỉ khi tổng các chữ số chia hết cho 3 (9). Chia hết cho 5 khi và chỉ khi chữ số tận cùng là 0 hoặc 5. Nếu số nào chia hết cho p và cho q, với p và q nguyên tố, thì số đó chia hết cho p*q
Thực ra đây là TOPIC các bài tập đơn giản về VBA để mọi người cùng giải cho quen với kiến thức cơ bản bạn ah. Nếu có hứng thú hoặc cách giải hay thì viết ra cho mọi người cùng tham khảo nhé. Cảm ơn bạn đã chia sẻ
 
Upvote 0
tiếp bài 02 đi anh đỗ văn tuyen gì đó oiwiiiiiiiiiiiii hí
 
Upvote 0
Mình trả bài thế này được không nhỉ?
Mã:
Sub inkq()
  for i = 1 to 100
       if i mod 3 = 0 then
           cells(i,1) = "GP"
      elseif i mod 5 = 0 then
          cells(i,1) = "EC"
    elseif i mod 15 = 0 then
          cells(i,1) = "GPEC"
   else
          cells(i,1) = i
  end if
  next

End Sub
 
Upvote 0
Bài 02: Cho trước một dãy số hãy tìm ra số lớn nhất trong dãy số đó nhé.
Các bài cơ bản các bạn cứ làm cho nó nóng người rồi mình sẽ nâng dần dần mọi người cùng trao đổi học hỏi nhé.
 

File đính kèm

  • solonnhat.jpg
    solonnhat.jpg
    10.1 KB · Đọc: 11
Upvote 0
Giải thuật hổng giống ai.
for i = 3 to 100 step 3
...
next i
for i = 5 to 100 step 5
...
next i
for i = 3*5 to 100 step 3*5
...
next i
 
Upvote 0
Bài 02: Cho trước một dãy số hãy tìm ra số lớn nhất trong dãy số đó nhé.
Các bài cơ bản các bạn cứ làm cho nó nóng người rồi mình sẽ nâng dần dần mọi người cùng trao đổi học hỏi nhé.
hem rõ cần viết như nào hihii
Mã:
Function SoToBuNhat(ByVal dauvao) As Double
Dim arr
If TypeName(dauvao) = "Range" Then
    arr = dauvao.Value
Else
    arr = dauvao
End If
SoToBuNhat = Application.Max(arr)
End Function
 

File đính kèm

  • Bài 02.xlsm
    13.2 KB · Đọc: 10
Upvote 0
tiếp bài 03 đi a tuyen gì đó ơi iiiiiiiiiiiii. sẵn thì a gửi vài chục bài lun í hi
 
Upvote 0
Bài 2:
Function SLN(ByVal mang, Optional ByVal n = Null)
If IsNull(n) Then n = UBound(mang)
If n <= LBound(mang) Then
SLN = mang(LBound(mang))
Else
SLN = Application.Max(SLN(mang, n - 1), mang(n))
End If
End Function

Code thử:
? sln([ { 15, 3, 11, 10, 2, 5 } ]); sln(array( 1, 2, 3, 4, 5, 6 ))
(in ra 15 6)
 
Upvote 0
Bài 2:
Function SLN(ByVal mang, Optional ByVal n = Null)
If IsNull(n) Then n = UBound(mang)
If n <= LBound(mang) Then
SLN = mang(LBound(mang))
Else
SLN = Application.Max(SLN(mang, n - 1), mang(n))
End If
End Function

Code thử:
? sln([ { 15, 3, 11, 10, 2, 5 } ]); sln(array( 1, 2, 3, 4, 5, 6 ))
(in ra 15 6)

SLN là gì thế anh ? Về mặt toán học có thể là "số lớn nhì" chăng ? :D
 
Upvote 0
Đây là bài giải 01 theo cách của mình. Mới học VBA nên các hàm trong excel còn lơ tơ mơ lắm :D
PHP:
Sub Ex01()
Dim i As Integer

For i = 1 To 100
    If i Mod 3 = 0 And i Mod 5 <> 0 Then
        Cells(i, 1) = "GP"
    ElseIf i Mod 5 = 0 And i Mod 3 <> 0 Then
        Cells(i, 1) = "EC"
    ElseIf i Mod 3 = 0 And i Mod 5 = 0 Then
        Cells(i, 1) = "GPEC"
    Else
    Cells(i, 1) = i
    End If   
Next   
End Sub
Mình mới tham gia học VBA, đang tập giải các bài tập cơ bản, nên mình post tại đây hy vọng được giao lưu học hỏi cùng các bạn.
Bài 01: In ra một dãy số từ 1 đến 100 và kiểm tra xem
  • Số nào chỉ chia hết cho 3 thì in ô đó là GP
  • Số nào chỉ chia hết cho 5 thì in ô đó là EC
  • Số nào vừa chia hết cho 3 và 5 thì in ô đó là GPEC
Mình sẽ đưa lời giải lên sau, mọi người có hứng thú thì giải thử nhé. Cùng nhau trao đổi để cùng tiến bộ nào.
 
Upvote 0
Bài 02: Cho trước một dãy số hãy tìm ra số lớn nhất trong dãy số đó nhé.
Các bài cơ bản các bạn cứ làm cho nó nóng người rồi mình sẽ nâng dần dần mọi người cùng trao đổi học hỏi nhé.
Đây là lời giải bài 02 của mình viết
Mã:
Sub Ex02()
Dim i As Integer
Dim temp As Integer
For i = 1 To Cells(Rows.count, 1).End(xlUp).Row
   If Cells(i, 1) > temp Then
    temp = Cells(i, 1)
    End If
Next
Cells(2, 3) = temp
End Sub
 
Upvote 0
Bài 03: Trình bày phép nhân các bạn nêu từng bước thực hiện phép nhân ra nhé
giả sử 14 x 12 thì ta sẽ diễn giải nó ra như các bước :
  1. lấy 2 nhân 14 rồi ghi tuần tự vào các cells
  2. lấy 1 nhân 14 rồi ghi vào dòng kế tiếp
  3. cộng tổng hai dòng (1) và (2) để được kết quả của phép nhân
Mình có gửi hình đính kèm, các bạn làm thử xem sao nhé(Bài này mình cũng chưa làm được :()
 

File đính kèm

  • phepnhan.jpg
    phepnhan.jpg
    18.2 KB · Đọc: 16
Upvote 0
Đây là lời giải bài 02 của mình viết
Mã:
Sub Ex02()
Dim i As Integer
Dim temp As Integer
For i = 1 To Cells(Rows.count, 1).End(xlUp).Row
   If Cells(i, 1) > temp Then
    temp = Cells(i, 1)
    End If
Next
Cells(2, 3) = temp
End Sub

trong hình bạn gửi hình như mình thấy có mấy số đâu phải số tự nhiên bạn nhỉ ? :D
 
Upvote 0
Đây là lời giải bài 02 của mình viết
Mã:
Sub Ex02()
Dim i As Integer
Dim temp As Integer
For i = 1 To Cells(Rows.count, 1).End(xlUp).Row
   If Cells(i, 1) > temp Then
    temp = Cells(i, 1)
    End If
Next
Cells(2, 3) = temp
End Sub
nghi ngờ tính khả thi của thuật toán này nha
 
Upvote 0
Đây là lời giải bài 02 của mình viết
Mã:
Sub Ex02()
Dim i As Integer
Dim temp As Integer
For i = 1 To Cells(Rows.count, 1).End(xlUp).Row
   If Cells(i, 1) > temp Then
    temp = Cells(i, 1)
    End If
Next
Cells(2, 3) = temp
End Sub
Chỉ 1 dòng là đủ.

Mã:
MsgBox WorksheetFunction.Max([A1:A65000])
 
Upvote 0
Chỉ 1 dòng là đủ.

Mã:
MsgBox WorksheetFunction.Max([A1:A65000])
hàm có sẵn trong Exel hay thật đó, rất nhanh mình cố gắng ghi nhớ.
Về cơ bản thì mình muốn viết code một cách mềm mại mà khi người sử dụng có thay đổi gì về số liệu thì code vẫn chạy và đưa ra kết qua cho người dùng. Giả sử bảng thống kê tìm giá trị lớn nhất một cột và phải thỏa mãn thêm một điều kiện A nào đó chẳng hạn thì hàm Max này có vẻ hơi khó sử dụng
 
Upvote 0
Web KT
Back
Top Bottom