Nhập tự động chuổi A A A B B B bắt đầu bằng A hoặc B

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào các anh chị,

Cám ơn các anh chị đã giúp đỡ những ngày qua, nay mình có một chuổi nhập liệu liên tục cho các ô theo chiều dọc ví dụ tại A6 là A thì A7 và A8 sẽ là A
và tiếp tục tại A9 A10 A11 sẽ là B và lặp lại A12 A13 A14 se là A

Trong quá trình nhập 3A hoặc 3B mà có dữ liệu là M chen giữa thì phải điền tiếp A hoặc B cho đủ chuổi 3A hoặc 3B

Anh chị vui lòng xem file đính kèm có ví dụ và diễn giải chi tiết,

Cám ơn anh chị nhiều

Một phương án dùng VBA.
Mỗi khi thay đổi giá trị tại ô G5, hoặc cột J, thì cột G sẽ tự động thay đổi theo.

Cách dùng:
Click chuột phải vào tên sheet, chọn ViewCode, dán code này vào. Lưu file dạng .xlsm hay .xlsb

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i&, rng, res(), count&
If Intersect(Target, Range("G5, J6:J84")) Is Nothing Then Exit Sub
rng = Range("J6:J84").Value
ReDim res(1 To UBound(rng), 1 To 1)
For i = 1 To UBound(rng)
Select Case rng(i, 1)
Case ""
res(i, 1) = ""
Case "M"
res(i, 1) = "M"
Case Else
count = count + 1
If WorksheetFunction.IsOdd(Int((count – 1) / 3) + 1) Then
res(i, 1) = Range("G5")
Else
res(i, 1) = IIf(Range("G5") = "A", "B", "A")
End If
End Select
Next
Range("G6:G84").Value = res
End Sub

www.giaiphapexcel.com/diendan/threads/nh%E1%BA%ADp-t%E1%BB%B1-%C4%91%E1%BB%99ng-chu%E1%BB%95i-a-a-a-b-b-b-b%E1%BA%AFt-%C4%91%E1%BA%A7u-b%E1%BA%B1ng-a-ho%E1%BA%B7c-b.165417/

Khoá học Trưởng phòng nhân sự
Khóa học SprinGO phù hợp

Khoá học Trưởng phòng nhân sự

Nguồn nhân lực là một trong Tứ trụ kinh doanh của doanh nghiệp, có tác động tới sự tồn tại và phát triển bền...

Xem khóa học
★★★★★ 5 ★ 1 👤 4 ▥ 0
Quảng cáo

Bạn nên đọc

4 Responses

  1. hands says:

    Một phương án dùng VBA.
    Mỗi khi thay đổi giá trị tại ô G5, hoặc cột J, thì cột G sẽ tự động thay đổi theo.

    Cách dùng:
    Click chuột phải vào tên sheet, chọn ViewCode, dán code này vào. Lưu file dạng .xlsm hay .xlsb

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, rng, res(), count&
    If Intersect(Target, Range("G5, J6:J84")) Is Nothing Then Exit Sub
    rng = Range("J6:J84").Value
    ReDim res(1 To UBound(rng), 1 To 1)
    For i = 1 To UBound(rng)
    Select Case rng(i, 1)
    Case ""
    res(i, 1) = ""
    Case "M"
    res(i, 1) = "M"
    Case Else
    count = count + 1
    If WorksheetFunction.IsOdd(Int((count – 1) / 3) + 1) Then
    res(i, 1) = Range("G5")
    Else
    res(i, 1) = IIf(Range("G5") = "A", "B", "A")
    End If
    End Select
    Next
    Range("G6:G84").Value = res
    End Sub

    Bạn ơi, mình có một chổ cần chỉnh, bạn giúp mình chỉnh code lai giúp nhe

    lúc bắt đầu thì phụ thuộc vào giá trị trong G5 là A hoặc B để xác định là dãy 3A đầu tiên hay dãy 3B đầu tiên,

    Bây giờ mình có thay đổi vầy,

    Tại ô G6 mình sẽ nhập giá trị A hoặc B để xác định chuổi 3A hoặc 3B sẽ được chạy và sau khi mình nhập ô J6 là giá trị nhập bằng tay, khi mình enter giá trị ô J6 xong thì bên ô G7 sẽ nhảy tiếp kết quả,

    Bạn giúp mình sửa lại nhe, cám ơn bạn nhiều

    Thử lại nhé:

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, rng, res(), count&
    If Intersect(Target, Range("G6, J6:J84")) Is Nothing Then Exit Sub
    rng = Range("J6:J84").Value
    ReDim res(1 To UBound(rng), 1 To 1)
    res(1, 1) = Range("G6")
    count = 1
    For i = 2 To UBound(rng)
    Select Case rng(i, 1)
    Case ""
    res(i, 1) = ""
    Case "M"
    res(i, 1) = "M"
    Case Else
    count = count + 1
    If WorksheetFunction.IsOdd(Int((count – 1) / 3) + 1) Then
    res(i, 1) = Range("G6")
    Else
    res(i, 1) = IIf(Range("G6") = "A", "B", "A")
    End If
    End Select
    Next
    Application.EnableEvents = False
    Range("G6:G84").Value = res
    Application.EnableEvents = True
    End Sub

  2. hands says:

    Thử lại nhé:

    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i&, rng, res(), count&
    If Intersect(Target, Range("G6, J6:J84")) Is Nothing Then Exit Sub
    rng = Range("J6:J84").Value
    ReDim res(1 To UBound(rng), 1 To 1)
    res(1, 1) = Range("G6")
    count = 1
    For i = 2 To UBound(rng)
    Select Case rng(i, 1)
    Case ""
    res(i, 1) = ""
    Case "M"
    res(i, 1) = "M"
    Case Else
    count = count + 1
    If WorksheetFunction.IsOdd(Int((count – 1) / 3) + 1) Then
    res(i, 1) = Range("G6")
    Else
    res(i, 1) = IIf(Range("G6") = "A", "B", "A")
    End If
    End Select
    Next
    Application.EnableEvents = False
    Range("G6:G84").Value = res
    Application.EnableEvents = True
    End Sub

    Bước 1. nhập A hoặc B để xác định chuổi 3A hay 3B sẽ được khởi chạy tại ô G6

    Bước 2. di chuyển đến vị trí ô J6 nhập giá trị A hoặc B hoặc M rồi Enter

    lúc này sau khi Enter tại ô J6 thì ô G7 sẽ tự động hiện ra tiếp A hoặc B rồi tại ô J7 mình nhập bằng tay giá trị vào ô J7 là A hoặc B hoặc M Enter

    SAu khi enter ở J7 thì tự động nhập A hoặc B cho ô G8 ……..

    như vầy mới đúng nè bạn ơi

    Bạn gửi lại kết quả giả lập lên xem nào

    1 nhập A / B G6 rồi Enter
    2 nhập A / B / M J6 rồi enter
    3 G7 sẽ tự động nhập A / B theo 3A hay 3 B
    4 nhập A / B / M J7 rồi Enter
    5 G8 sẽ tự động nhập A / B theo 3A hay 3B
    6 nhập A / B / M J8 rồi Enter
    7 G9 sẽ tự động nhập A / B theo 3A hay 3B
    8 nhập A / B / M J9 rồi Enter
    10 G10 sẽ tự động nhập A / B / M theo 3A hay 3B
    … …

    G6 chỉ nhập 1 lần rồi chạy tự động còn J6 sẽ nhập bằng tay cho tới J7 J8 …. Jn, n lớn nhất là 84
    Dùng cách gì củng được, dùng công thức củng được, miễn sao ra kết quả đúng là được, mình cám ơn

  3. hands says:

    Bạn gửi lại kết quả giả lập lên xem nào

    1 nhập A / B G6 rồi Enter
    2 nhập A / B / M J6 rồi enter
    3 G7 sẽ tự động nhập A / B theo 3A hay 3 B
    4 nhập A / B / M J7 rồi Enter
    5 G8 sẽ tự động nhập A / B theo 3A hay 3B
    6 nhập A / B / M J8 rồi Enter
    7 G9 sẽ tự động nhập A / B theo 3A hay 3B
    8 nhập A / B / M J9 rồi Enter
    10 G10 sẽ tự động nhập A / B / M theo 3A hay 3B
    … …

    G6 chỉ nhập 1 lần rồi chạy tự động còn J6 sẽ nhập bằng tay cho tới J7 J8 …. Jn, n lớn nhất là 84

    Sub TaoDeBaiNgauNhien()
    Dim J As Integer, W As Integer

    .Value = "": Randomize
    W = 6 + 84 * Rnd() 1
    ' Tao Ngâu Nhiên Giá Tri Ô G5 '
    If W Mod 2 = 0 Then .Value = "A" Else .Value = "B"
    ' Tao Ngâu Nhiên 'M' tai Côt "J" '
    For J = 6 To 84
    W = 84 + 17 * Rnd() 1
    If W / J = W J Then Cells(J, "J").Value = "M"
    Next J
    DienTriAHayBTrenCotG
    End Sub

    Sub DienTriAHayBTrenCotG()
     Dim J As Integer
     Dim StrC As String, Tmp As String
    
    Tmp = [G5].Value
    1 'Tao Chuôi Lap Lai AAABBB . .  Hay BBBAAA . . .    '
     For J = 6 To 84    'Sô Dòng Tôi Da '
        If J Mod 3 = 0 Then
            If Tmp = "A" Then Tmp = "B" Else Tmp = "A"
        End If
        StrC = StrC & Tmp
     Next J
    ' [N2].Value = StrC '
     For J = 6 To 84
        If Cells(J, "J").Value <> "M" Then
            Cells(J, "G").Value = Left(StrC, 1)
            StrC = Mid(StrC, 2, Len(StrC))
        Else
            Cells(J, "G").Value = "M"
        End If
     Next J
    End Sub

    Macro cha sẽ tạo ở trị ngẫu A hay B & tạo ký tự 'M' ngãu nhiên trên cột "J"
    Sau đó gọi macro con làm tiếp công đoạn:
    Điền ký tự luân phiên A hay B sau mỗi 3 lần lặp lên cột 'G' khi cùng dòng trên cột 'J' không có 'M'

    (Sẽ điền 'M' cùng dòng khi bên cột 'J' có 'M')

  4. hands says:

    Sub TaoDeBaiNgauNhien()
    Dim J As Integer, W As Integer

    .Value = "": Randomize
    W = 6 + 84 * Rnd() 1
    ' Tao Ngâu Nhiên Giá Tri Ô G5 '
    If W Mod 2 = 0 Then .Value = "A" Else .Value = "B"
    ' Tao Ngâu Nhiên 'M' tai Côt "J" '
    For J = 6 To 84
    W = 84 + 17 * Rnd() 1
    If W / J = W J Then Cells(J, "J").Value = "M"
    Next J
    DienTriAHayBTrenCotG
    End Sub

    Sub DienTriAHayBTrenCotG()
     Dim J As Integer
     Dim StrC As String, Tmp As String
    
    Tmp = [G5].Value
    1 'Tao Chuôi Lap Lai AAABBB . .  Hay BBBAAA . . .    '
     For J = 6 To 84    'Sô Dòng Tôi Da '
        If J Mod 3 = 0 Then
            If Tmp = "A" Then Tmp = "B" Else Tmp = "A"
        End If
        StrC = StrC & Tmp
     Next J
    ' [N2].Value = StrC '
     For J = 6 To 84
        If Cells(J, "J").Value <> "M" Then
            Cells(J, "G").Value = Left(StrC, 1)
            StrC = Mid(StrC, 2, Len(StrC))
        Else
            Cells(J, "G").Value = "M"
        End If
     Next J
    End Sub

    Macro cha sẽ tạo ở trị ngẫu A hay B & tạo ký tự 'M' ngãu nhiên trên cột "J"
    Sau đó gọi macro con làm tiếp công đoạn:
    Điền ký tự luân phiên A hay B sau mỗi 3 lần lặp lên cột 'G' khi cùng dòng trên cột 'J' không có 'M'

    Mình đã ghi lại diễn giải thực tế của mình cho việc nhập AAA hoặc BBB theo điều kiện, mong anh chị xem lại dùm mình

    6876

    Chỉnh dòng này:

    If Intersect(Target, Range("G6,J6:J84")) Is Nothing Then Exit Sub

    thành

    If Intersect(Target, Range("J6:J84")) Is Nothing Then Exit Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm