Tách 1 số ra thành tổng của các số 1 và phần thập phân.(TOPIC của DuongPhjDuong) (1 người xem)

Liên hệ QC

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

chuot0106

Thành viên gắn bó
Tham gia
20/1/13
Bài viết
2,567
Được thích
1,670
Thực ra đây là yêu câu của thành viên DuongPhjDuong . Tôi có trợ giúp nhưng khi tôi làm gần xong định đưa câu trả lời thì không thấy topic đó đâu nữa(Có lẽ đã bị khóa). Tôi xin phép BQT đưa File tôi đã giúp bạn đó lên đây với mục đích là muốn mọi người giúp đỡ bạn ấy, và nếu có thể hoàn thiện code của tôi với. Code tôi viết chỉ giải quyết được việc tách số còn vị trí các số trong mỗi cột thì chưa đúng. Mong anh chị em giúp đỡ!
Trong File có 2 sheet:
+ 1 sheet là mong muốn của tác giả.
+ 1 sheet là tôi làm.
 

File đính kèm

Tôi chỉ quan tâm tới câu hỏi của bạn, ngoài ra không liên quan nhé.

Code bạn viết sai yêu cầu. Bởi yêu cầu có thêm số chia mà Code bạn không hề đề cập tới, ngoài ra có dòng Code không được hay lắm
Mã:
cll.Offset(1).Resize(k) = Int(cll) / Int(cll)
Int(cll) / Int(cll) => luôn bằng 1

Bạn có thể thử với cách "củ chuối" này xem
Mã:
Sub Tach()
    Dim i As Long, k As Long, Tmp As Double
    Dim Cls As Range, Rng As Range, GTChia As Long
    Set Rng = Sheet1.Range("A1:E1")
    GTChia = Sheet1.[G1]
    k = 1
    Sheet1.[A2:E65000].ClearContents
    For Each Cls In Rng
        Tmp = Cls
        Do While Tmp > GTChia
            k = k + 1
            Cells(k, Cls.Column) = GTChia
            Tmp = Tmp - GTChia
        Loop
        If Tmp > 0 Then
            k = k + 1
            Cells(k, Cls.Column) = Tmp
        End If
    Next
End Sub
 
Upvote 0
Tôi chỉ quan tâm tới câu hỏi của bạn, ngoài ra không liên quan nhé.

Code bạn viết sai yêu cầu. Bởi yêu cầu có thêm số chia mà Code bạn không hề đề cập tới, ngoài ra có dòng Code không được hay lắm
Mã:
cll.Offset(1).Resize(k) = Int(cll) / Int(cll)
Int(cll) / Int(cll) => luôn bằng 1

Bạn có thể thử với cách "củ chuối" này xem
Rất cảm ơn anh!Qua code của anh em học hỏi được rất nhiều ạ!
 
Upvote 0
Nói chung có nhiều cách làm bạn có thể tham khảo cách này

[GPECODE=vb]
Sub Chia_1()
Dim i As Long, cll As Range, k As Long
Dim j As Long, tam As Long
Const sochia As Long = 2
k = 0
For Each cll In Range("A1:E1")
k = k + 1
tam = 0
For i = 1 To Application.WorksheetFunction.RoundUp(cll.Value / sochia, 0)
j = j + 1
tam = sochia + tam
Cells(j + 1, k).Value = IIf(cll.Value > tam, sochia, cll + sochia - tam)
Next

Next cll
End Sub


[/GPECODE]
 
Upvote 0
Cái này cũng có thể xài hàm người dùng, như sau:

PHP:
Option Explicit:                Option Base 1
Function TachNhom(fNum As Double, SoChia As Double)
 Dim J As Integer, Z As Integer
 J = 5 * fNum \ SoChia
 ReDim KQ(J, 1)
 Do
    Z = 1 + Z
    If fNum < SoChia Then
        KQ(Z, 1) = fNum:        Exit Do
    Else
        KQ(Z, 1) = SoChia:      fNum = fNum - SoChia
    End If
 Loop
 TachNhom = KQ()
End Function
 

File đính kèm

Upvote 0
...Code tôi viết ....
Mã:
Public Sub chia()
On Error Resume Next [COLOR="#FF0000"]' bẫy lỗi bừa bãi, lỡ sai làm sao biết?[/COLOR]
Dim i As Long, rng As Range, cll As Range, k As Long
Set rng = Sheet1.Range("A1:E1") [COLOR="#FF0000"]' làm việc sheet này lẫn sheet nọ, lung tung hết[/COLOR]
For Each cll In rng
k = Int(cll)
cll.Offset(1).Resize(k) = Int(cll) / Int(cll) [COLOR="#FF0000"]' Int(cll) tức là k, đã tính rồi, lặp lại mãi[/COLOR]
Cells(k + 2, cll.Column()) = cll - Int(cll)
k = k + Int(cll) [COLOR="#FF0000"]' con toán này vô ích, k được tính lại trong lần lặp kế tiếp [/COLOR]
Next cll
End Sub

Tôi chỉ đưa ra lỗi bạn xài vòng lặp thôi còn con toán luôn luôn bằng 1 thì bạn dhn46 đã nói rồi.

Mã:
Public Sub chiaX()
Dim cll, gt, sl
gt = Range("G1").Value[COLOR="#006400"] ' giá trị cần phân bổ[/COLOR]
For Each cll In Range("A1:E1")
sl = Int(cll / gt)[COLOR="#006400"] ' số lượt chia được[/COLOR]
If sl > 0 Then cll.Offset(1).Resize(sl) = gt
cll.Offset(1 + sl) = cll - gt * sl[COLOR="#006400"] ' số còn thừa[/COLOR]
Next cll
End Sub
 
Upvote 0
Cho mình cảm ơn tất cả mọi người đã giúp mình viết đoạn code trên. Mình có thể yều cầu mọi người điều chỉnh giúp mình ở cột B tách ra giá trị phải ở dưới dòng mà cột A tác ra. Ví dụ Cột A tách ra đến dòng số 3, như vậy cột B tách ra giá trị ghi bắt đầu dòng thứ 4. Lặp lại như vậy cho đến hết. Cảm ơn mọi người đã giúp đỡ.
 
Upvote 0
Mình xài hàm mảng tự tạo

Bạn xem theo file --=0 --=0 --=0
 

File đính kèm

Upvote 0

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

Back
Top Bottom