Không hiểu lắm? Bạn để nhiều thứ trong project quá, chẳng biết đằng nào mà lần! Bạn nên sửa lại file, chỉ để cái nào liên quan trực tiếp đến bài toán. Thêm câu lệnh:Đưa những dòng trong khung vàng vào khung xanh, mỗi lẫn đưa vậy thì so sánh cái cell ngày nếu trùng thì không thêm ngày vào
Option explicit
Option Explicit
Sub CopyAndDel()
Dim Ngay, lRow As Long: Dim Rng As Range, Clls As Range
Ngay = Range("F4")
Set Rng = Range("E7:F" & Range("F65432").End(xlUp).Row)
Set Clls = Range("M" & Range("M65432").End(xlUp).Row + 1)
If Ngay <> Range("L65432").End(xlUp) Then Clls.Offset(, -1) = Ngay
6 Rng.Copy Destination:=Clls
Set Rng = Nothing: Set Clls = Nothing
End Sub
ptm0412 đã viết:Cho mình góp 1 câu:
Rng.Clear
vì Sub là Copy and delete mà chưa delete.
Union(Rng, Range("F4")).ClearContents
Thích thì chìu:vumian đã viết:Giả sử mình muốn dùng vòng lặp chạy từ L7 và M7 xuống thì sao ạ ?
Ngay = Range("F4")
If Ngay <> Range("L65432").End(xlUp) Then Clls.Offset(, -1) = Ngay
SA_DQ đã viết:Giã dụ tôi có 9 ô liên tục theo hàng hay theo cột ( SuDoKu í mà)
(Hai đề chọn 1):
Đề I :Khi tôi nhập đến con số thừ 8,thì macro sẽ tự động nhập cho tôi con số còn lại vô ô còn trống còn lại
Đề 2: các chữ cái cần nhập là A, B, C, D, E, F, G, H, I (không theo trật tự).
Giải pháp gọn sẽ được động viên!
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Range("RgnHC"), Target) Is Nothing) _
And Application.WorksheetFunction.CountBlank(Range("RgnHC")) = 1 Then
Dim iJ As Integer, Cll As Range
For Each Cll In Range("RgnHC")
If Cll.Value = "" Then Cll.Value = 45 - Application.WorksheetFunction.Sum(Range("RgnHC"))
Next
End If
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
Dim AdCll As String, MyStr As String
MyStr = "ABCDEFGHI"
If (Not Intersect(Range("RgnHC"), Target) Is Nothing) _
And Application.WorksheetFunction.CountBlank(Range("RgnHC")) = 1 Then
For Each Cll In Range("RgnHC")
MyStr = Trim(Replace(MyStr, Cll.Value, " "))
If Cll = "" Then AdCll = Cll.Address
Next
Range(AdCll) = MyStr
End If
End Sub
iJ = Application.WorksheetFunction.Sum(Range("RgnHC"))
sửa lại thêm Exit For cho nhanh hơn, khi điền xong giá trị rồi thì thoát lun,tigertiger đã viết:Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Range("RgnHC"), Target) Is Nothing) _
And Application.WorksheetFunction.CountBlank(Range("RgnHC")) = 1 Then
Dim iJ As Integer, Cll As Range
For Each Cll In Range("RgnHC")
If Cll.Value = "" Then Cll.Value = 45 - Application.WorksheetFunction.Sum(Range("RgnHC"))
Next
End If
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Range("RgnHC"), Target) Is Nothing) _
And Application.WorksheetFunction.CountBlank(Range("RgnHC")) = 1 Then
Dim iJ As Integer, Cll As Range
For Each Cll In Range("RgnHC")
If Cll.Value = "" Then
Cll.Value = 45 - Application.WorksheetFunction.Sum(Range("RgnHC"))
Exit For
End If
Next
End If
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Range("RgnHC"), Target) Is Nothing) _
And Application.WorksheetFunction.CountBlank(Range("RgnHC")) = 1 Then
Dim Cll As Range
Dim AdCll As String, MyStr As String
MyStr = "ABCDEFGHI"
For Each Cll In Range("RgnHC")
MyStr = Trim(Replace(MyStr, Cll.Value, " "))
If Cll = "" Then AdCll = Cll.Address
Next
Range(AdCll) = MyStr
End If
End Sub
Để tránh trường hợp như bác SA_DQ nói thì em sửa dòng code thứ 7 của bác VodaSA_DQ đã viết:To VoDa: Nhập chữ thường vô là biết liền á!
MyStr = Trim(Replace(MyStr, Cll.Value, " "))
MyStr = Trim(Replace(MyStr, Ucase(Cll.Value), " "))
SA_DQ đã viết:Có thể sửa đoạn mã của VoDa thành trường hợp tổng quát cho ký số (của Tiger^2) & ký tự không các bạn nhỉ?!