Nhờ hỗ trợ về cách tạo dãy số giảm dần.

Liên hệ QC

heyhey1994

Thành viên chính thức
Tham gia
16/3/17
Bài viết
78
Được thích
18
Chào tất cả mọi người trong diễn đàn,
Hiện mình đang làm 1 bảng tính mà gặp vài vấn đề nên nhờ mọi người giúp đỡ ạ.
Mình đang muốn là tạo 1 dãy số thẳng đứng như sau: sẽ trừ 1 từ số lớn nhất, có điều đặc biệt là khi nó qua lớp thứ 2 thì cái số 41.5 đó sẽ lặp lại 2 lần. mình dựa vào code của 1 anh trên diễn đàn và hiệu chỉnh lại nhưng bây giờ nó có 1 vấn đề là: nếu cái số thứ 1 trừ số thứ 2 là số nguyên thì nó không lặp lại, lúc đó nó sẽ 41.5 đến 40.5 luôn. Mình gửi kèm file tính ạ.
Xin cảm ơn.

50.5
49.5
...
...
41.5
41.5

40.5
...
4
4

3
...
1624348755373.png
 

File đính kèm

  • Example.xlsm
    147.1 KB · Đọc: 10
Chào tất cả mọi người trong diễn đàn,
Hiện mình đang làm 1 bảng tính mà gặp vài vấn đề nên nhờ mọi người giúp đỡ ạ.
Mình đang muốn là tạo 1 dãy số thẳng đứng như sau: sẽ trừ 1 từ số lớn nhất, có điều đặc biệt là khi nó qua lớp thứ 2 thì cái số 41.5 đó sẽ lặp lại 2 lần. mình dựa vào code của 1 anh trên diễn đàn và hiệu chỉnh lại nhưng bây giờ nó có 1 vấn đề là: nếu cái số thứ 1 trừ số thứ 2 là số nguyên thì nó không lặp lại, lúc đó nó sẽ 41.5 đến 40.5 luôn. Mình gửi kèm file tính ạ.
Xin cảm ơn.

50.5
49.5
...
...
41.5
41.5

40.5
...
4
4

3
...
View attachment 261076
Kiểm tra lại kết quả, nếu không đúng nhập tay kết quả gởi lại file
Mã:
Sub ABC()
  Dim sArr(), Res(1 To 300, 1 To 7)
  Dim i&, k&, t#
  Range("L3:R1000").ClearContents
  sArr = Range("C2", Range("I" & Rows.Count).End(xlUp)).Value
  t = sArr(1, 6)
  For i = 2 To UBound(sArr)
    If t < sArr(i - 1, 6) Then t = sArr(i - 1, 6)
    Do
      If t <> sArr(i - 1, 6) Then t = Int(t) + 0.5
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = t
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = sArr(i, 3)
      Res(k, 5) = sArr(i, 4)
      Res(k, 7) = sArr(i, 5)
      t = t - 1
      If i = UBound(sArr) Then d = t + 0.01 Else d = t
    Loop Until d <= sArr(i, 6)
  Next i
  Range("L3").Resize(k, 7) = Res
 End Sub
 
Upvote 0
Kiểm tra lại kết quả, nếu không đúng nhập tay kết quả gởi lại file
Mã:
Sub ABC()
  Dim sArr(), Res(1 To 300, 1 To 7)
  Dim i&, k&, t#
  Range("L3:R1000").ClearContents
  sArr = Range("C2", Range("I" & Rows.Count).End(xlUp)).Value
  t = sArr(1, 6)
  For i = 2 To UBound(sArr)
    If t < sArr(i - 1, 6) Then t = sArr(i - 1, 6)
    Do
      If t <> sArr(i - 1, 6) Then t = Int(t) + 0.5
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = t
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = sArr(i, 3)
      Res(k, 5) = sArr(i, 4)
      Res(k, 7) = sArr(i, 5)
      t = t - 1
      If i = UBound(sArr) Then d = t + 0.01 Else d = t
    Loop Until d <= sArr(i, 6)
  Next i
  Range("L3").Resize(k, 7) = Res
 End Sub
Em cảm ơn anh. Nhưng em đang muốn lớp 1 sẽ kết thúc ở 41.5 và lớp 2 bắt đầu ở 41.5 ạ. Tương tự cho mấy lớp khác.
 

File đính kèm

  • Example.xlsm
    150 KB · Đọc: 7
Upvote 0
Em cảm ơn anh. Nhưng em đang muốn lớp 1 sẽ kết thúc ở 41.5 và lớp 2 bắt đầu ở 41.5 ạ. Tương tự cho mấy lớp khác.
Chỉnh lại
Mã:
Sub ABC()
  Dim sArr(), Res(1 To 300, 1 To 7)
  Dim i&, k&, t#
  Range("L3:R1000").ClearContents
  sArr = Range("C2", Range("I" & Rows.Count).End(xlUp)).Value
  For i = 2 To UBound(sArr)
    t = sArr(i - 1, 6)
    Do
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = t
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = sArr(i, 3)
      Res(k, 5) = sArr(i, 4)
      Res(k, 7) = sArr(i, 5)
      If t = sArr(i, 6) Then Exit Do
      t = Int(t) - 0.5
      If t < sArr(i, 6) Then t = sArr(i, 6)
    Loop
  Next i
  Range("L3").Resize(k, 7) = Res
 End Sub
 
Upvote 0
Chỉnh lại
Mã:
Sub ABC()
  Dim sArr(), Res(1 To 300, 1 To 7)
  Dim i&, k&, t#
  Range("L3:R1000").ClearContents
  sArr = Range("C2", Range("I" & Rows.Count).End(xlUp)).Value
  For i = 2 To UBound(sArr)
    t = sArr(i - 1, 6)
    Do
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = t
      Res(k, 3) = sArr(i, 2)
      Res(k, 4) = sArr(i, 3)
      Res(k, 5) = sArr(i, 4)
      Res(k, 7) = sArr(i, 5)
      If t = sArr(i, 6) Then Exit Do
      t = Int(t) - 0.5
      If t < sArr(i, 6) Then t = sArr(i, 6)
    Loop
  Next i
  Range("L3").Resize(k, 7) = Res
 End Sub
Ok rồi ạ. Em cảm ơn anh nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom