Xin giúp e cách thêm dòng và chia nhỏ số liệu ( xem file để rõ ý hơn nhé các bác ) (1 người xem)

  • Thread starter Thread starter 843824
  • Ngày gửi Ngày gửi
Liên hệ QC

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

843824

Thành viên mới
Tham gia
23/12/09
Bài viết
40
Được thích
1
- Khó diễn tả là e xin cái gì trong tiêu đề quá nên e viết rõ ràng trong nội dung thế này :

1. Ô e cần chia nhỏ là ô khối lượng. ( và kéo theo là ô giá thành )
Các ô còn lại giữ nguyên giá trị cứ trên có thế nào dưới copy lại như thế ( kể cả đơn giá cho nhanh )

2. e muốn xin 1 nút khi mình bấm vào
=> nó sẽ hỏi : nhập giá trị chia nhỏ
=> e nhập vào ví dụ như trong file là 68000
( vì e sẽ nhập nhiều giá trị khác nhau cho nhiều dòng khác nhau nên ko thể cho GÍA TRỊ NÀY 1 số cố định )

=> mà việc chia nhỏ này phài do e tự làm tay cho những ô khối lượng muốn chia nhỏ.

3. Dòng được chia ra cuối cùng sẽ = tổng muốn chia - các giá trị ở trên đã chia.
( kể cá giá thành )

=> Cho nó sau khi được chia ra cộng lại bằng tổng cũ là OK.

4. Bảng excel sẽ gồm rất nhiều dòng như thế.
Nhưng có dòng e sẽ phải chia giá trị còn có dòng không chia.

Xin nhờ các bác giúp đỡ. }}}}}}}}}}}}}}}}}}}}
 

File đính kèm

Xem giúp e cái các bác ơi ... e đang cần gấp
 
Upvote 0
- Khó diễn tả là e xin cái gì trong tiêu đề quá nên e viết rõ ràng trong nội dung thế này :

1. Ô e cần chia nhỏ là ô khối lượng. ( và kéo theo là ô giá thành )
Các ô còn lại giữ nguyên giá trị cứ trên có thế nào dưới copy lại như thế ( kể cả đơn giá cho nhanh )

2. e muốn xin 1 nút khi mình bấm vào
=> nó sẽ hỏi : nhập giá trị chia nhỏ
=> e nhập vào ví dụ như trong file là 68000
( vì e sẽ nhập nhiều giá trị khác nhau cho nhiều dòng khác nhau nên ko thể cho GÍA TRỊ NÀY 1 số cố định )

=> mà việc chia nhỏ này phài do e tự làm tay cho những ô khối lượng muốn chia nhỏ.

3. Dòng được chia ra cuối cùng sẽ = tổng muốn chia - các giá trị ở trên đã chia.
( kể cá giá thành )

=> Cho nó sau khi được chia ra cộng lại bằng tổng cũ là OK.

4. Bảng excel sẽ gồm rất nhiều dòng như thế.
Nhưng có dòng e sẽ phải chia giá trị còn có dòng không chia.

Xin nhờ các bác giúp đỡ. }}}}}}}}}}}}}}}}}}}}
Xài tạm rừng code này trong khi chờ đợi code ngắn gọn hơn
PHP:
Sub chiachia()
Dim nguon(), kq(1 To 100000, 1 To 9), SOCHIA, i, j, n
SOCHIA = Val(InputBox("Hay Nhap So Chia"))
If SOCHIA = 0 Then Exit Sub
nguon = Sheet1.Range(Sheet1.[B2], Sheet1.[B65536].End(3)).Offset(, -1).Resize(, 9).Value
For i = 1 To UBound(nguon)
    If nguon(i, 6) > SOCHIA Then
        tam = nguon(i, 6)
        Do
            n = n + 1
            For j = 1 To 9
                kq(n, j) = nguon(i, j)
            Next
            kq(n, 6) = SOCHIA
            kq(n, 8) = kq(n, 6) * kq(n, 7)
            tam = tam - SOCHIA
        Loop Until tam < SOCHIA
        n = n + 1
        For j = 1 To 9
            kq(n, j) = nguon(i, j)
        Next
        kq(n, 6) = tam
        kq(n, 8) = kq(n, 6) * kq(n, 7)
    Else
        n = n + 1
        For j = 1 To 9
            kq(n, j) = nguon(i, j)
        Next
        kq(n, 8) = kq(n, 6) * kq(n, 7)
    End If
Next
Sheet2.[A1].Resize(n, 9) = kq
Sheet2.Select
End Sub
 
Upvote 0
Xài tạm rừng code
...
[/PHP]
theo em hiểu,
thì tác giả chỉ chia cho từng row 1 (từng khối lượng 1) vì có nói là:
...
( vì e sẽ nhập nhiều giá trị khác nhau cho nhiều dòng khác nhau nên ko thể cho GÍA TRỊ NÀY 1 số cố định )
'----
@843824
mình muốn hỏi lại về vùng: A2:I4 và A10:I15.
Cột Đơn giá và Thanh Toán của 2 vùng đó ko thống nhất với nhau: vùng trên thì dùng công thức cho cột Đơn giá, cột Thanh toán thì ko và vùng dưới thì ngược lại.
Khi mình viết code thì thấy bị chõi ở 2 cột đó (lỗi vòng lặp --> chỉ có thể viết công thức theo Đơn giá hoặc Thanh toán)
 
Lần chỉnh sửa cuối:
Upvote 0
theo em hiểu,
thì tác giả chỉ chia cho từng row 1 (từng khối lượng 1) vì có nói là:

'----
@843824
mình muốn hỏi lại về vùng: A2:I4 và A10:I15.
Cột Đơn giá và Thanh Toán của 2 vùng đó ko thống nhất với nhau: vùng trên thì dùng công thức cho cột Đơn giá, cột Thanh toán thì ko và vùng dưới thì ngược lại.
Khi mình viết code thì thấy bị chõi ở 2 cột đó (lỗi vòng lặp --> chỉ có thể viết công thức theo Đơn giá hoặc Thanh toán)


=================================== Đúng là như vậy a ạ ...
E xin kể lại bước làm tay của e như thế này :

Bây giờ cứ cho là có sẵn luôn 3 cột Kluong - Dgia - TToan ( tất cả đều là giá trị - chứ ko có công thức gì )

===> nhưng vì nó nằm sát nhau với 1 list dài ... sẽ có cột K Lượng nhỏ ( dưới 70000 ) e sẽ không cần chia nhỏ ra.
Nên cách e làm tay là :

E copy cả 3 cái KL DG TT sang 3 cột kế bên !
Và làm lại e cho các giá trị ( cho đại thôi < 70000 ) ở các dòng và nó sẽ thay luôn giá trị của dòng cần chia nhỏ.

Dòng cuối cột KL = KL cần chia - các gí trị chia ở trên.
=> DG thì chép lại
TT thì = DG * KL

ô TT cuối = TT ( tổng ) - các TT ở trên.

==============
@ a quanghai :::
Đúng là e sẽ làm cho từng dòng đó a ... có dòng KL cần chia - dòng sẽ không cần như trong file ví dụ là dòng đầu tiên ko cần chia

...... a đợi xíu e Test thử code của a nhé
 
Lần chỉnh sửa cuối:
Upvote 0
@ a quanghai : e Test => nhập số vào thì báo lỗi Type mismatch

========== Về việc muốn thêm cột hay thêm vùng tạm để tính toạn a cứ thêm thoải mái ...
 
Upvote 0
=================================== Đúng là như vậy a ạ ...
E xin kể lại bước làm tay của e như thế này :
Bây giờ cứ cho là có sẵn luôn 3 cột Kluong - Dgia - TToan ( tất cả đều là giá trị - chứ ko có công thức gì )
...
do bạn nói vậy nên mình cứ phỏng đoán và làm tạm vậy đã :-=,

'-----
- bạn tải file đính kèm, cho chạy Macro.
- do sheet đó chưa điền đầy đủ số liệu + bạn ko có yêu cầu rõ (chỉ đề cập đến KHOI LUONG, DON GIA, THANH TOAN, ko thấy nói các cột khác) ----> có thể các điều kiện mình cài vào còn thiếu.
'-----
- bạn Double click vào các ô thuộc vùng F18:F20:
-> show 1 InputBox --> nhập khối lượng.
-> sau khi chèn số liệu xong thì sẽ hỏi bạn có muốn xóa row góc ko? (để kiểm tra số liệu cũ thì click No)

'----
file đính kèm ----> #16
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn chạy thử code này bằng cách bấm vô mũi tên & nhập số liệu bạn muốn

+-+-+-+ &&&%$r -0-/. )*&^)
 

File đính kèm

Upvote 0


Code của bác rất hay và nhanh .......

Nhưng có điều chắc còn lỗi bác ạ :

1. Sau khi làm xong thì bấm cancle hoặc dấu X khỏng 5 6 lần mới tắt.

2. ( Quan trọng )
Đó là các giá trị KL DG TT của e nếu bác để ý thì lấy KL * DG sẽ ko ra được TT ( vì DG e đã tính trước từ 1 file khác và nó đã được e làm tròn ( ko lấy số lẽ nào )
==> Chỉ có KL và TT là còn đúng thôi chứ DG là số ko đúng
==> Nên khi e thử với các giá trị đúng thì nó chạy tốt.
Còn bỏ số liệu e vào thì nó ko chạy đc dòng nào.

* Góp ý ô TT cuối cùng ( của các dòng tách ra ) bác đừng để là = KL * DG mà là TT tổng ( trước khi tách ) - các giá trị TT đã chia nhỏ ở trên nó !

Thanks bác nhiều !
 
Upvote 0
do bạn nói vậy nên mình cứ phỏng đoán và làm tạm vậy đã :-=,

'-----
- bạn tải file đính kèm, cho chạy Macro.
- do sheet đó chưa điền đầy đủ số liệu + bạn ko có yêu cầu rõ (chỉ đề cập đến KHOI LUONG, DON GIA, THANH TOAN, ko thấy nói các cột khác) ----> có thể các điều kiện mình cài vào còn thiếu.
'-----
- bạn Double click vào các ô thuộc vùng F18:F20:
-> show 1 InputBox --> nhập khối lượng.
-> sau khi chèn số liệu xong thì sẽ hỏi bạn có muốn xóa row góc ko? (để kiểm tra số liệu cũ thì click No)


============= Rất hay bác ạ ............
Và các giá trị tính toán ra đều đúng .
Nhưng nó còn 1 lỗi kì lạ :
Đó là ví dụ ô 100000 => e double và nhập 60000
Lẽ ra nó ra 1 dòng 60k 1 dòng 40k là xong ... nhưng nó lại ra 2 dòng 60K 1 dòng - 20k

Lỗi ko phải luôn luôn - vì dòng 211000 thì nó ra đúng => ko có phần âm.

E đưa tiếp vào 1 giá trị của em 171k ===> nhập 65k => nó lại đưa ra 3 dòng 65k và 1 dòng - lại cho bằng giá trị cũ.

E xin THANKS BÁC NHIỀU ...
Vì từ trưa giờ bác đã mày mò giúp e ! Sắp ok rồi bác ạ

============= E lại thử lại thêm:: có lỗi - nhưng lần này thì 100k không lỗi mà 206k lỗi ....
 

File đính kèm

  • 1.jpg
    1.jpg
    21.1 KB · Đọc: 25
Lần chỉnh sửa cuối:
Upvote 0
mình muốn hỏi lại,
bạn muốn Doube Click từng row như vậy hay là chia khối lượng hàng loạt như bác SA_DQ đã làm? :-=


E muốn double từng ô nhưng của bác làm đó bác !

E dễ kiểm tra lại hơn - chứ nếu so với làm hàng loạt thì chắc cũng ko hơn thua nhau bao nhiêu thời gian
( vì mỗi con số chia nhỏ vẫn do e nhập )

.................

Giờ e đã kiểm tra lại thêm 2 3 lần ... lần thì nó ra ok hết

Lần thì nó lại sai bác ạ !

================= E gà hỏi thêm tí bác ạ :
Đó là sau khi chạy xong ==> không Undo được hả bác ?


* Với lại bác bỏ luôn dùm e bước hỏi có xoa dòng không - mà trực tiếp xóa luôn đi bác.
Bỏ bớt bước này cho gọn
 
Lần chỉnh sửa cuối:
Upvote 0
Code của bác, nhưng có điều chắc còn lỗi bác ạ :

1. Sau khi làm xong thì bấm cancle hoặc dấu X khỏng 5 6 lần mới tắt.

2. ( Quan trọng )
Đó là các giá trị KL DG TT của e nếu bác để ý thì lấy KL * DG sẽ ko ra được TT ( vì DG e đã tính trước từ 1 file khác và nó đã được e làm tròn ( ko lấy số lẽ nào )
==> Chỉ có KL và TT là còn đúng thôi chứ DG là số ko đúng
==> Nên khi e thử với các giá trị đúng thì nó chạy tốt.
Còn bỏ số liệu e vào thì nó ko chạy đc dòng nào.

(*) Góp ý ô TT cuối cùng ( của các dòng tách ra ) bác đừng để là = KL * DG mà là TT tổng ( trước khi tách ) - các giá trị TT đã chia nhỏ ở trên nó !
!

(1) Nếu không muốn tách dòng thì cứ {ENTER} để macro sang dòng tiếp & chờ bạn cho í kiến;

(2) Bạn chạy thử macro sau

(*) : Chưa tiêu hóa kịp
 

File đính kèm

Upvote 0
bạn tải lại file và kiểm tra xem sao nhé ! (code đã ổn định hơn nhiều rồi đó :-=)

E muốn double từng ô ...
Đó là sau khi chạy xong ==> không Undo được hả bác ?
khi chạy 1 Macro thì "thông thường" là ko thể Undo.

...
* Với lại bác bỏ luôn dùm e bước hỏi có xoa dòng không - mà trực tiếp xóa luôn đi bác.
Bỏ bớt bước này cho gọn

nếu số liệu row gốc là quan trọng, bạn nên nhìn sơ qua các Row đã tạo so với Row gốc (chỉ cần bạn Enter tiếp theo là nó sẽ xoá ngay thôi)

(nếu vẫn muốn xoá và ko hỏi thì bạn off 3 dòng này:
Mã:
mSg = mSg & "Xoa' row goc' (row dang chon / Row=" & Target.Row & ")"
        Answer = MsgBox(mSg, vbYesNo + vbQuestion)
        If Answer = vbNo Then Exit Sub
)

[GPECODE=vb]
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Hoi, Answer 'Khai bao' bien' cuc. bo^.
Dim FinalTotal As Variant
Dim i As Long, x As Long

If Not Intersect(Target, Range("F18:F1000")) Is Nothing Then
If Target <> "" And Target <> 0 Then
Cancel = True
Hoi = Application.InputBox(Evaluate(ThisWorkbook.Names("InputBox1").Value)) 'InputBox1 la` 1 Name

If Hoi = False Or Val(Hoi) = 0 Then Exit Sub 'khi dung` Cancel hoac de trong'
If Val(Hoi) > Target.Value Then MsgBox ("So luong chia nho? chua hop ly"), vbExclamation: Exit Sub

x = Application.WorksheetFunction.Quotient(Target.Value, Val(Hoi))
For i = 1 To x
Call GPE_copy(Target, i, Val(Hoi))
'MsgBox ("stop") & i
Next i

If Val(Hoi) * x <> Target.Value Then
With Target
FinalTotal = .Offset(, 2).Value - (Val(Hoi) * x * .Offset(, 1).Value)
Call GPE_copy(Target, x + 1, FinalTotal / .Offset(, 1).Value)
End With
End If

mSg = mSg & "Xoa' row goc' (row dang chon / Row=" & Target.Row & ")"
Answer = MsgBox(mSg, vbYesNo + vbQuestion)
If Answer = vbNo Then Exit Sub

Target.EntireRow.Delete
End If
End If
End Sub

Private Sub GPE_copy(rTarget As Range, iRow As Long, KLuong As Variant)
With rTarget
.Offset(iRow).EntireRow.Insert
Range("B" & .Offset(iRow).Row).Resize(, 2).Value = Range("B" & .Row).Resize(, 2).Value 'NGUOI BAN, DIA CHI
.Offset(iRow) = KLuong 'cot KHOI LUONG
.Offset(iRow, 1) = .Offset(, 1).Value 'DON GIA
.Offset(iRow, 2).FormulaR1C1 = "=RC[-1]*RC[-2]" 'THANH TOAN
End With
End Sub

[/GPECODE]
'---
(hehe, bài của bạn có nhiều cao thủ tham gia quá !!!)

Link:
https://www.mediafire.com/?w7py6ml4eyf8n72
 
Lần chỉnh sửa cuối:
Upvote 0
(1) Nếu không muốn tách dòng thì cứ {ENTER} để macro sang dòng tiếp & chờ bạn cho í kiến;

(2) Bạn chạy thử macro sau

(*) : Chưa tiêu hóa kịp


=========== Xin cảm ơn bác đã rất nhiệt tình
* E Đã hiểu cách chạy của chương trình của bác.
Thì ra là nó quét từ dưới lên => đến chổ nào e muốn chia thì mới chia
Và để thoát ra thì phải enter đến hết vòng lập => chứ không phải 1 cái enter là xong

1. Cái này bất tiện lắm bác ạ. Vì khi e đưa dữ liệu của e vào 1 tháng có trung bình 300 400 dòng là thường.
Cá biệt có tháng 800 - 1000 dòng mà cứ chờ nó chạy vậy thì ko được.
===> Nếu vậy thì chắc bác phải viết thêm 1 câu lệnh nhỏ : là nhập vào giá trị Định mức
( VD của e ở đây là KLuong trên 70000 e mới cần chia ) ==> Rồi nó nhảy tới dòng đó.

Chứ cứ lướt từ dưới lên thế này thì chết e rồi.

2. E gửi thêm 1 ảnh để bác có thể hiểu rõ hơn cách tính :
( và cũng là nguyên nhân Ctrình của bác tính ra số sai ( so với ycầu của e )

- Đó là cái ĐG e đã làm tròn => nếu bác tính lại tổng KL * DG sẽ = giá trị dưới muỗi tên chứ ko phải giá trị của e.

=> Do đó KL 60701 = 231148 - 3 dòng KL trên
Tương tự TT 95658621 = 364112646 - 3 dòng TT trên

( Giá trị e cho nó chia nhỏ là 231148 và 364112646 đó bác )
 

File đính kèm

  • 2.jpg
    2.jpg
    13 KB · Đọc: 23
Upvote 0
Chỉ là vấn đền chưa hiểu hết í của nhau thôi;

Giờ ta lấy chàng thứ 2 làm ví dụ; Số liệu chàng ta đang là:

Ngày|NguoiBan|DiaChi|KhoiLuong|ĐGiá|TTien
01/21/2013|Lê & Hải| Ch Thành TN|204.014| 2.084 |425.165.176

(Màu đó cho ta biết ô chứa trị là công thức)

Sau khi chạy macro đang nhận được những số liệu sau:

1/21/2013|Lê & Hải|Ch Thành TN|68.000|2.084| 141.712.000
1/21/2013|Lê & Hải|Ch Thành TN|68.000|2.084| 141.712.000
1/21/2013|Lê & Hải|Ch Thành TN|68.000|2.084| 141.712.000
1/21/2013|Lê & Hải|Ch Thành TN|14|2.084| 29.176


Vậy bạn cho biết số liệu mong muốn được thể hiện của bạn
 
Upvote 0
Pro phucbugis ơi ... e nhờ pro bổ sung thêm giúp e 1 cái này được không ?

Đó là trước đó e có nhờ pro chép dùm e các nội dung của dòng cần tách xuống các dòng đã được tách.

Nhưng khi chạy thì chỉ chép được tên và địa chỉ ( chính xác trong file của a là cột B và C )

giờ e nhờ a chép giúp e thêm nội dung của cột A và D xuống nữa ( chính xác theo file của bác )

( là ngày và CMND ) bác chỉnh sửa giúp e thêm chút xíu này nữa nhé !
 
Upvote 0
Pro phucbugis ơi ... e nhờ pro bổ sung thêm giúp e 1 cái này được không ?
Đó là trước đó e có nhờ pro chép dùm e các nội dung của dòng cần tách xuống các dòng đã được tách.
Nhưng khi chạy thì chỉ chép được tên và địa chỉ ( chính xác trong file của a là cột B và C )
giờ e nhờ a chép giúp e thêm nội dung của cột A và D xuống nữa ( chính xác theo file của bác )
( là ngày và CMND ) bác chỉnh sửa giúp e thêm chút xíu này nữa nhé !
hehe,
tại Private Sub GPE_copy
bạn off dòng này:
Mã:
Range("B" & .Offset(iRow).Row).Resize(, 2).Value = Range("B" & .Row).Resize(, 2).Value

đổi lại thành:
Mã:
Range("A" & .Offset(iRow).Row).Resize(, 4).Value = Range("A" & .Row).Resize(, 4).Value
(từ cột A -> cột D là 4 cột ---> Resize(, 4))
 
Upvote 0

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

Back
Top Bottom