Cần giúp đỡ kết hợp giữa For và If (1 người xem)

Liên hệ QC

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

eminem87

Thành viên mới
Tham gia
5/1/13
Bài viết
9
Được thích
2
em mới tự tìm hiểu về VBA nên gà mờ, có bài này nhờ các bác giúp đỡ.
Viết Sub trong VBA: Nếu 4 số đầu của ô B2 của sheet1 = với giá trị của 1 trong cột A(sheet2) thì ở sheet2 : cột C= cột A+1000 và Tô nền vàng, nếu sai thì C=0
tks các bác nhé!!!!!
đây là code mình viết(mình chưa biết cách tô nền vàng)

Sub MaSo()
Dim i As Long
For i = 2 To 13
If Cells(i, 1) = Left(Worksheets("sheet1").Range("B2"), 4) Then
Cells(i, 3) = Cells(i, 1) + 1000
Exit For
Else
Cells(i, 3) = “”
End If
Next
End Sub
 

File đính kèm

em mới tự tìm hiểu về VBA nên gà mờ, có bài này nhờ các bác giúp đỡ.
Viết Sub trong VBA: Nếu 4 số đầu của ô B2 của sheet1 = với giá trị của 1 trong cột A(sheet2) thì ở sheet2 : cột C= cột A+1000 và Tô nền vàng, nếu sai thì C=0
tks các bác nhé!!!!!
đây là code mình viết(mình chưa biết cách tô nền vàng)

Sub MaSo()
Dim i As Long
For i = 2 To 13
If Cells(i, 1) = Left(Worksheets("sheet1").Range("B2"), 4) Then
Cells(i, 3) = Cells(i, 1) + 1000
Exit For
Else
Cells(i, 3) = “”
End If
Next
End Sub
Với cách viết này dùng hàm left để tách mới ra được chuỗi text nên chưa đúng, phải biến chuỗi tách thành dữ liệu number bằng cách thêm hàm val(left(.....). cụ thể. Lấy theo code của bạn:
Sub MaSo()
Sheet2.Activate
Dim i As Long
For i = 2 To 13
If Cells(i, 1) = Val(Left(Worksheets("sheet1").Range("B2"), 4)) Then
Cells(i, 3) = Cells(i, 1) + 1000
Cells(i, 3).Interior.Color = vbRed 'Mau do, mau gi thi viet tiep Vb...
Else
Cells(i, 3) = 0
Cells(i, 3).Interior.Color = xlNone
End If
Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn bác, e làm được rồi. tkssssss
bác cho e hỏi là nếu e muốn marcro tự chạy khi e thay đổi dữ liệu bên cột B2 của sheet 1 và làm với vòng lặp là for each thì sửa code ntn? tkssssssssssssssssssssssssssssssssssssss
 
Upvote 0
Thử thế này xem thế nào:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
For Each rng In Sheet2.Range("A2", Sheet2.Range("A1000").End(xlUp))
If rng.Value = Val(Left(Worksheets("sheet1").Range("B2"), 4)) Then
rng.Offset(, 2).Value = rng.Value + 1000
rng.Offset(, 2).Interior.Color = 65535
Else
rng.Offset(, 2).Value = 0
rng.Offset(, 2).Interior.Color = xlNone
End If
Next
End Sub
 
Upvote 0
bác cho e hỏi vẫn ở ví dụ trên nhưng e muốn tách chuỗi B2(123456789) ở sheet1 ra lấy 1 phần tử ( ví dụ lấy 6) thì làm sao để chuyển 6 này thành số 6. e thử dùng hàm Val(Mid(worksheets("sheet1").Range("B2"),6,1)) nhưng sau khi + - thì toàn ra 0 tức là nó vẫn ở chuỗi thôi.
code của e đây. tkssssssssssssssssssssssssss
Sub MaSo()
Dim i As Long
For i = 2 To 13
If Cells(i, 1) = Val(Mid(Worksheets("sheet1").Range("B2"), 6, 1)) Then
Cells(i, 3) = Cells(i, 1) + 500
Cells(i, 3).Interior.Color = vbRed 'Mau do, mau gi thi viet tiep Vb...
Else
Cells(i, 3) = 0
Cells(i, 3).Interior.Color = xlNone
End If
Next
End Sub
 
Upvote 0
* Thứ nhất, khi post bài bạn phải đặt code vào trong tab [CODE ] ... [/CODE ] (không có dấu cách trước ] nhé) - hoặc bấm vào nút "Đổi sang khung lớn" ==> chọn dấu # để thêm tab này bao quanh code để hiện như sau

Mã:
Sub MaSo()
    Dim i As Long
    For i = 2 To 13
        If Cells(i, 1) = Val(Mid(Worksheets("sheet1").Range("B2"), 6, 1)) Then
            Cells(i, 3) = Cells(i, 1) + 500
            Cells(i, 3).Interior.Color = vbRed 'Mau do, mau gi thi viet tiep Vb...
        Else
            Cells(i, 3) = 0
            Cells(i, 3).Interior.Color = xlNone
        End If
    Next
End Sub

* Nên soạn thảo code dạng khối như trên - nghĩa là dịch vào 1 tab cho các khối lệnh cấp dưới

* câu hỏi của bạn - bạn phải xem có ô nào thuộc cuộc A sheet2 thỏa mãn đ/k không (tức là chứa số 6 không)??? -- vì không có nên tất nhiên là cột C sẽ 0 hết --> Nhập vài số 6 vào cột A sẽ thấy ngay là sub của bạn đúng mục đích rùi

* dĩ nhiên là code của bạn còn nhiều điều cần sửa, song mới tiếp xúc VBA thì thế này là rất khá rùi, chúc bạn tiếp tục phát triển khả năng đầy tiềm năng này
 
Upvote 0
tks bạn nhé, mình mới tập làm VBA nên còn nhiều điểm không biết, tks các bạn đã hướng dẫn nhiệt tình^^
 
Upvote 0
bạn sửa giúp mình code nhé! mình muốn: Nếu cột A chia không hết cho 3 thì cột C sẽ bằng cột B+1000 và nền cột C là đỏ. nếu cột A chia hết cho 3 thì cột C=0. Mình làm code này thì cột C =0 hết là sao?
Mã:
Sub Khongchiahet()
Dim i As Integer
Dim a As Integer
For i = 2 To 20
    For a = 1 To 9
        If Cells(i, 1) Mod 3 = a Then ' Cot A khong chia het cho 3
        Cells(i, 3) = Cells(i, 2) + 1000 'Cot C= Cot B+1000
        Cells(i, 3).Interior.Color = vbRed
        Else
        Cells(i, 3) = 0
        Cells(i, 3).Interior.Color = xlNone
        End If
    Next
    Next
    End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
bạn sửa giúp mình code nhé! mình muốn: Nếu cột A chia không hết cho 3 thì cột C sẽ bằng cột B+1000 và nền cột C là đỏ. nếu cột A chia hết cho 3 thì cột C=0. Mình làm code này thì cột C =0 hết là sao?
Mã:
Sub Khongchiahet()
Dim i As Integer
Dim a As Integer
For i = 2 To 20
    For a = 1 To 9
        [B]If Cells(i, 1) Mod 3 = a Then ' Cot A khong chia het cho 3[/B] 
        Cells(i, 3) = Cells(i, 2) + 1000 'Cot C= Cot B+1000
        Cells(i, 3).Interior.Color = vbRed
        Else
        Cells(i, 3) = 0
        Cells(i, 3).Interior.Color = xlNone
        End If
    Next
    Next
    End Sub

If Cells(i, 1) Mod 3 = a Then ' Cot A khong chia het cho 3 ------ Vấn đề nằm ở đây, không chia hết cho 3 thì chỉ cần là cells(i,1) mod 3 <> 0 thôi chứ sao bạn lại cho nó = a?

Khi bạn thấy lỗi bạn tốt nhất nên chạy từng dòng một, tức là bấm F8 đó, khi đó bạn có thể dò biến được a có giá trị là bao nhiêu, khi đó bạn sẽ thấy được giá trị trong ô của bạn chia 3 không bằng a, và đó là lý do nó chuyển xuống cho cột C của bạn bằng 0.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom