Tự động điền số (2 người xem)

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

Tôi tuân thủ nội quy khi đăng bài

2007thanhlp

Thành viên mới
Tham gia
22/7/23
Bài viết
13
Được thích
-1
Mình có VD nhỏ :
- Giờ mình nhập tại SỐ Ô NHẬP, VD LÀ 13 thì các cell sẽ thể hiện theo như trên. Từ 1 => 13 theo thứ tự như vậy.
Nhờ cả nhà chỉ giúp.
 

File đính kèm

Mình có VD nhỏ :
- Giờ mình nhập tại SỐ Ô NHẬP, VD LÀ 13 thì các cell sẽ thể hiện theo như trên. Từ 1 => 13 theo thứ tự như vậy.
Nhờ cả nhà chỉ giúp.
Nếu chỉ có mỗi ô N5 là ô nhập dữ liệu đầu vào thì có thể làm được bằng VBA
nhập N5=13 lập tức các ô từ B5:K10 =1,2,3,... và tràn xuống dòng dưới B6=11,C6=12 và K6 =13.
nếu N5=xxx thì nó sẽ trải các số lấp đầy các ô Từ B5:K... riêng Kxxx=N5

Hỏi là có khi nào nhập N6 để ta cũng thư được 1 dãy số như nhập ở N5 không? và nếu có thì Những B6=11,C6=12,... sẽ bị xóa bỏ hay thế nào?
 
Nếu chỉ có mỗi ô N5 là ô nhập dữ liệu đầu vào thì có thể làm được bằng VBA
nhập N5=13 lập tức các ô từ B5:K10 =1,2,3,... và tràn xuống dòng dưới B6=11,C6=12 và K6 =13.
nếu N5=xxx thì nó sẽ trải các số lấp đầy các ô Từ B5:K... riêng Kxxx=N5

Hỏi là có khi nào nhập N6 để ta cũng thư được 1 dãy số như nhập ở N5 không? và nếu có thì Những B6=11,C6=12,... sẽ bị xóa bỏ hay thế nào?
Cám ơn bạn đã phản hồi.
Nếu ta nhập N7 thì ta cũng sẽ thu được 1 dãy số từ B đến K, khi N5 ta nhập 13 thì nó đã tràn xuống N6 các số 11 12 13 nên bắt buộc phải nhập xuống N7 và số từ B=>K sẽ là số tiếp nối, VD 14 15 16...
 

File đính kèm

Cám ơn bạn đã phản hồi.
Nếu ta nhập N7 thì ta cũng sẽ thu được 1 dãy số từ B đến K, khi N5 ta nhập 13 thì nó đã tràn xuống N6 các số 11 12 13 nên bắt buộc phải nhập xuống N7 và số từ B=>K sẽ là số tiếp nối, VD 14 15 16...
Bạn nhập thử mong muốn của mình khi nhập vào N5 = 12; N5 = 13 ...... và N5 = 4 trở xuống thì kết quả của bạn cần là gì ?
 
Cám ơn bạn đã phản hồi.
Nếu ta nhập N7 thì ta cũng sẽ thu được 1 dãy số từ B đến K, khi N5 ta nhập 13 thì nó đã tràn xuống N6 các số 11 12 13 nên bắt buộc phải nhập xuống N7 và số từ B=>K sẽ là số tiếp nối, VD 14 15 16...
Ý tôi là bạn đã nhập N5=13 (hoặc số khác>10) và đã thu được kết quả từ b5:k6 rồi , nhưng giò ta nhập tiếp vào n6 thì dữ liệu kết quả dduocj nhập vào đâu? nếu la tư b6:k6 thì dữ liệu cũ sẽ bị xóa. ý bạn thế nào?
 
Ý tôi là bạn đã nhập N5=13 (hoặc số khác>10) và đã thu được kết quả từ b5:k6 rồi , nhưng giò ta nhập tiếp vào n6 thì dữ liệu kết quả dduocj nhập vào đâu? nếu la tư b6:k6 thì dữ liệu cũ sẽ bị xóa. ý bạn thế nào?
nếu nhập dữ liệu vào n6 thì sẽ như thế này :

1784959835504.png
 

File đính kèm

Code thì có code đây:
PHP:
Public LastNum As Long
'_______________________'
Sub DienSoPtm()
LastNum = 0
Dim LastRw As Long, NumArr
With Sheets("VD")
    .Range("B6:L100").ClearContents
    LastRw = .[N1000].End(xlUp).Row
    NumArr = .Range("N5:N" & LastRw).Value
    If LastRw = 5 Then
        Dien1So NumArr, 0
    Else
        For j = 1 To UBound(NumArr)
            Dien1So NumArr(j, 1), LastNum
        Next j
    End If
End With
End Sub
'_____________________'
Sub Dien1So(ByVal So As Long, LastNum As Long)
r = Sheets("VD2").[L1000].End(xlUp).Row + 1
c = 1
Dim NextNum As Long
For i = 1 To So
    NextNum = LastNum + i
    If i = So And c < 12 Then c = 12 Else c = c + 1
    If c > 12 Then r = r + 1: c = 2
    Sheets("VD").Cells(r, c).Value = NextNum
Next
LastNum = LastNum + So
End Sub

1784991623590.png
 

File đính kèm

Lần chỉnh sửa cuối:
Code dùng mảng và fix lỗi số là 12 hoặc (bội của 11) + 1
PHP:
Public LastNum As Long, r As Long, ResArr(1 To 10000, 1 To 12)
'______________'
Sub DienSoPtm()
LastNum = 0
r = 0
Dim LastRw As Long, NumArr
With Sheets("VD")
    .Range("A6:L10000").ClearContents
    LastRw = .[N1000].End(xlUp).Row
    NumArr = .Range("N5:N" & LastRw).Value
    If LastRw = 5 Then
        Dien1So NumArr, 0
    Else
        For j = 1 To UBound(NumArr)
            Dien1So NumArr(j, 1), LastNum
        Next j
    End If
    .[A6].Resize(r, 12).Value = ResArr
End With
Erase ResArr
End Sub
'_________'
Sub Dien1So(ByVal So As Long, LastNum As Long)
r = r + 1
c = 1
Dim NextNum As Long

For i = 1 To So
    NextNum = LastNum + i
    If i = So And c < 12 Then c = 12 Else c = c + 1
    If c > 12 Then r = r + 1: c = 2
    If i = So And c = 2 Then c = 12
    If i = 1 Then ResArr(r, 1) = So
    ResArr(r, c) = NextNum
Next
LastNum = LastNum + So
End Sub
 
Kết quả từ cột "B" đến cột "K"
Mã:
Sub xyz()
  Dim Sh As Worksheet, eR&, N&, r&, i&, k&, t&, col&
 
  Set Sh = Sheets("VD")
  i = Sh.Range("K1000000").End(xlUp).Row
  If i >= 5 Then Sh.Range("B5:K" & i).ClearContents
  eR = Sh.Range("N1000000").End(xlUp).Row
  If eR >= 5 Then
    r = 5 'Dòng ket qua dau tien
    Application.ScreenUpdating = False
    For i = 5 To eR
      col = 1 'Thu tu cot ket qua "B" - 1 = 1
      N = Sh.Range("N" & i).Value - 1
      For k = 1 To N
        t = t + 1
        col = col + 1
        Sh.Cells(r, col).Value = t
        If col = 11 Then 'Cot cuoi cua ket qua là cot "K"
          r = r + 1:         col = 1
        End If
      Next k
      If k > 1 Then ' dong nhap >=1
        t = t + 1
        Sh.Cells(r, 11).Value = t
        r = r + 1
      End If
    Next i
    Application.ScreenUpdating = True
  End If
End Sub
 

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

Back
Top Bottom