- Tham gia
- 23/3/16
- Bài viết
- 705
- Được thích
- 52
Const GPE As Long = 65500
Sub TáchḌng()
ReDim Arr(1 To GPE, 1 To 2)
Dim J As Long, W As Long, Num As Double, Rws As Long
Dim TenHang As String
[F7].Resize(65500, 2).Value = Arr()
For J = 7 To [b7].End(xlDown).Row
Num = Cells(J, "C").Value: TenHang = Cells(J, "B").Value
If Num <= 0 Then
W = W + 1
Arr(W, 1) = TenHang: Arr(W, 2) = Num
Else
Do
If Num - 1 >= 1 Then
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = 1: Num = Num - 1
Else '*'
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = 1
If Num > 1 Then
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = Num - 1
End If
Exit Do
End If
Loop
End If
Next J
If W Then
[F7].Resize(W, 2).Value = Arr()
End If
End Sub
PHP:Const GPE As Long = 65500 Sub TáchḌng() ReDim Arr(1 To GPE, 1 To 2) Dim J As Long, W As Long, Num As Double, Rws As Long Dim TenHang As String [F7].Resize(65500, 2).Value = Arr() For J = 7 To [b7].End(xlDown).Row Num = Cells(J, "C").Value: TenHang = Cells(J, "B").Value If Num <= 0 Then W = W + 1 Arr(W, 1) = TenHang: Arr(W, 2) = Num Else Do If Num - 1 >= 1 Then W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = 1: Num = Num - 1 Else '*' W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = 1 If Num > 1 Then W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = Num - 1 End If Exit Do End If Loop End If Next J If W Then [F7].Resize(W, 2).Value = Arr() End If End Sub
PHP:Const GPE As Long = 65500 Sub TáchḌng() ReDim Arr(1 To GPE, 1 To 2) Dim J As Long, W As Long, Num As Double, Rws As Long Dim TenHang As String [F7].Resize(65500, 2).Value = Arr() For J = 7 To [b7].End(xlDown).Row Num = Cells(J, "C").Value: TenHang = Cells(J, "B").Value If Num <= 0 Then W = W + 1 Arr(W, 1) = TenHang: Arr(W, 2) = Num Else Do If Num - 1 >= 1 Then W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = 1: Num = Num - 1 Else '*' W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = 1 If Num > 1 Then W = W + 1: Arr(W, 1) = TenHang Arr(W, 2) = Num - 1 End If Exit Do End If Loop End If Next J If W Then [F7].Resize(W, 2).Value = Arr() End If End Sub
Sao học sinh ở chỗ anh mua sách giáo khoa mà mua có 0.5 quyển vậy nhỉ. Không biết 0.5 quyển còn lại để làm gìbác sữa lại cho em chưa. Em muốn SL<=0 không cần phải tách ra. Chứ bác làm vậy mắc công em Phải mất thêm 1 công đoạn lọc nữa
Sub Tach()
ReDim Arr(1 To GPE, 1 To 2)
Dim J As Long, W As Long, Num As Double, Rws As Long
Dim TenHang As String
[F7].Resize(65500, 2).Value = Arr()
For J = 7 To [b7].End(xlDown).Row
Num = Cells(J, "C").Value: TenHang = Cells(J, "B").Value
If Num > 0 Then
Do
If Num - 1 >= 1 Then
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = 1: Num = Num - 1
Else '*'
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = 1
If Num > 1 Then
W = W + 1: Arr(W, 1) = TenHang
Arr(W, 2) = Num - 1
End If
Exit Do
End If
Loop
End If
Next J
If W Then
[F7].Resize(W, 2).Value = Arr()
End If
End Sub
Sao học sinh ở chỗ anh mua sách giáo khoa mà mua có 0.5 quyển vậy nhỉ. Không biết 0.5 quyển còn lại để làm gì
Nửa cuốn còn lại là bí kíp võ lâm!Sao học sinh ở chỗ anh mua sách giáo khoa mà mua có 0.5 quyển vậy nhỉ. Không biết 0.5 quyển còn lại để làm gì
Public Sub TachSoLuong()
Dim inputArr(), OutputArr()
Dim i As Long, J As Long, k As Long
Dim Num1 As Double, Num2 As Long
inputArr = Range("B7", Range("C" & Rows.Count).End(xlUp)).Value
ReDim OutputArr(1 To 100000, 1 To 2)
For i = 1 To UBound(inputArr)
Num1 = inputArr(i, 2)
If Num1 > 0 Then
Num2 = Application.WorksheetFunction.Ceiling(Num1, 1)
For J = 1 To Num2
k = k + 1
OutputArr(k, 1) = inputArr(i, 1)
If J < Num2 Or Num1 = Num2 Then
OutputArr(k, 2) = 1
Else
OutputArr(k, 2) = Num1 - Int(Num1)
End If
Next J
End If
Next i
If k > 0 Then Range("F7").Resize(k, 2) = OutputArr
End Sub
Người ta chỉ giả lập file thôi mà! Có điều ví dụ này cũng hợp lý đóa nhoa, bởi nhiều khi người ta còn mua có 1 trang (cuối) chứ nửa quyển là nhiều rồi đóSao học sinh ở chỗ anh mua sách giáo khoa mà mua có 0.5 quyển vậy nhỉ. Không biết 0.5 quyển còn lại để làm gì
Hiện macro cho kết qủa vày nè; hay là bạn muốn sao khác?
Nửa cuốn còn lại là bí kíp võ lâm!
Mã:Public Sub TachSoLuong() Dim inputArr(), OutputArr() Dim i As Long, J As Long, k As Long Dim Num1 As Double, Num2 As Long inputArr = Range("B7", Range("C" & Rows.Count).End(xlUp)).Value ReDim OutputArr(1 To 100000, 1 To 2) For i = 1 To UBound(inputArr) Num1 = inputArr(i, 2) If Num1 > 0 Then Num2 = Application.WorksheetFunction.Ceiling(Num1, 1) For J = 1 To Num2 k = k + 1 OutputArr(k, 1) = inputArr(i, 1) If J < Num2 Or Num1 = Num2 Then OutputArr(k, 2) = 1 Else OutputArr(k, 2) = Num1 - Int(Num1) End If Next J End If Next i If k > 0 Then Range("F7").Resize(k, 2) = OutputArr End Sub
À hiểu rồi! Khi đó ta vô hiệu hóa 2 dòng lệnh này là được:Em muốn như câu hỏi em đó. Anh xẻm ảnh lài bài 1 của em đó. Em đã nói Nhưng ô nào có SL <=0 thì không cần phài xuất ra
If Num <= 0 Then
' W = W + 1 '
' Arr(W, 1) = TenHang: Arr(W, 2) = Num '
Cho tôi thử :ah! mà bài này nếu dùng 1 vòng lập thì được hôn ta?
Sub a()
Dim i As Long, rng, wf As WorksheetFunction
Set wf = WorksheetFunction
rng = Range("B7:C" & [B100000].End(xlUp).Row)
For i = 1 To UBound(rng)
If rng(i, 2) > 0 Then
[F100000].End(xlUp).Offset(1).Resize(wf.Ceiling(rng(i, 2), 1), 2) = Array(rng(i, 1), 1)
[G100000].End(xlUp) = IIf(rng(i, 2) = wf.Floor(rng(i, 2), 1), 1, rng(i, 2) - wf.Floor(rng(i, 2), 1))
End If
Next i
End Sub
Cho tôi thử :
Mã:Sub a() Dim i As Long, rng, wf As WorksheetFunction Set wf = WorksheetFunction rng = Range("B7:C" & [B100000].End(xlUp).Row) For i = 1 To UBound(rng) If rng(i, 2) > 0 Then [F100000].End(xlUp).Offset(1).Resize(wf.Ceiling(rng(i, 2), 1), 2) = Array(rng(i, 1), 1) [G100000].End(xlUp) = IIf(rng(i, 2) = wf.Floor(rng(i, 2), 1), 1, rng(i, 2) - wf.Floor(rng(i, 2), 1)) End If Next i End Sub