Trả dữ liệu vào ô đã được chỉ định (1 người xem)

Liên hệ QC

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

toandiennuoc123

Thành viên thường trực
Tham gia
7/3/12
Bài viết
239
Được thích
9
Chào tất cả các ACE trên diễn đàn, xin được ACE giúp đỡ tôi vấn đề nầy ( xem file đính kèm) . Cám ơn tất cả các ACE.
 

File đính kèm

Bạn dùng thử macro sự kiện worksheet_change sau (copy vào cửa sổ mã nhé):
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, [B9]) Is Nothing) Or Target(1) > 99 Then Exit Sub
Dim k As Long, Sig As Long
    k = Target.Value
    Sig = 1
    If k < 0 Then
        k = -k
        Sig = -1
    End If
    Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) = Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) + Sig
    Target(1).Select
End Sub

Trong code, tôi có dùng tên "bdulieu" là vùng chứa các giá trị sẽ cộng dồn. (Bạn nhớ đặt tên)
Ngoài ra, code còn cho phép nhập giá trị âm giảm số lần nhập (trong trường hợp nhỡ nhập sai).
 
Upvote 0
Thêm 1 tham khảo cho bạn

PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B9]) Is Nothing Then
    Dim sRng As Range, Rng As Range
    
    Set Rng = [H20].Resize(10, 10)
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With sRng.Offset(-11)
            .Value = .Value + 1
            .Interior.ColorIndex = 34 + sRng.Column Mod 10
        End With
    End If
 End If
End Sub
 
Upvote 0
Bạn ơi nó bị lỗi ở dòng này
Me.Range("bdulieu")((k Mod 10) + 1, (k 10) + 1) = Me.Range("bdulieu")((k Mod 10) + 1, (k 10) + 1) + Sig

Đặc biệt là chỗ này: (k 10)
Mong bạn sửa giúp, cám ơn bạn
 
Upvote 0
PHP:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B9]) Is Nothing Then
    Dim sRng As Range, Rng As Range
    
    Set Rng = [H20].Resize(10, 10)
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With sRng.Offset(-11)
            .Value = .Value + 1
            .Interior.ColorIndex = 34 + sRng.Column Mod 10
        End With
    End If
 End If
End Sub
Cái code này chạy ngon lành tuy chỉ bị mỗi cái là nhập sai thì không sửa được, mong bạn giúp đỡ,"cho phép nhập giá trị âm giảm số lần nhập (trong trường hợp nhỡ nhập sai)." cám ơn bạn
 
Upvote 0
Do GPE tự xóa mất dấu chia nguyên (\), bạn sửa lại 2 vị trí như sau:

Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) = Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) + Sig

(\ là phép toán chia lấy phần nguyên)
 
Upvote 0
Cái code này chạy ngon lành tuy chỉ bị mỗi cái là nhập sai thì không sửa được, mong bạn giúp đỡ,"cho phép nhập giá trị âm giảm số lần nhập (trong trường hợp nhỡ nhập sai)." cám ơn bạn
Với dữ liệu kiểu text như bạn nói:
Lấy VD bằng số cho dễ hiểu, trong thực tế thì có cả chữ ( ABD09, MN15,v…v....)
Thì nếu thêm dấu "-" phía trước để giảm số lần phải thêm điều kiện trong code thôi.
Xin mượn code của ChanhTQ@ thêm điều kiện có dấu "-" phía trước nhé.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B9]) Is Nothing Then
    Dim sRng As Range, Rng As Range, Tem As String, N As Long
        If Left(Target, 1) = "-" Then
            N = -1: Tem = Mid(Target, 2, 100)
        Else
            N = 1: Tem = Target.Value
        End If
    Set Rng = [H20].Resize(10, 10)
    Set sRng = Rng.Find(Tem, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        With sRng.Offset(-11)
            .Value = .Value + N
            .Interior.ColorIndex = 34 + sRng.Column Mod 10
        End With
    End If
    Set Rng = Nothing
    Set sRng = Nothing
 End If
End Sub

Trong File đính kèm là tôi viết cách khác.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If (Intersect(Target, [B9]) Is Nothing) Or Target(1) > 99 Then Exit Sub
Dim k As Long, Sig As Long
    k = Target.Value
    Sig = 1
    If k < 0 Then
        k = -k
        Sig = -1
    End If
    Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) = Me.Range("bdulieu")((k Mod 10) + 1, (k \ 10) + 1) + Sig
    Target(1).Select
End Sub

Trong code của bạn có phần đặc biệt hơn là ô nhập dữ liệu (B9) nó vẫn đứng im sau khi Enter, "bình thường thì Enter xong nó nhảy xuống hoặc phải trái". Bạn giải thích cho tôi được không ? để tôi áp dụng cho những việc khác, Cám ơn bạn
 
Upvote 0
Bạn có thấy câu lệnh gần cuối: Target(1).Select : đây chính là câu lệnh làm cho vị trí con trỏ sau khi nhập dữ liệu quay trở lại ô cũ.
 
Upvote 0
Do GPE tự xóa mất dấu chia nguyên (\), . . .

Cái ni là do
PHP:
. . . [ /php] nó chén; Chứ không fải GPE.COM chén đâu mà đổ oan cho hắn;

Trong ~ trường hợp như vậy, mình fải chuyển sang xài [Code ]. . . [/code]

Thân!
 
Upvote 0
Web KT

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

Back
Top Bottom