Phân đoạn trong Excel?? (1 người xem)

Liên hệ QC

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

nguyentieu

Thành viên hoạt động
Tham gia
12/2/09
Bài viết
109
Được thích
10
Nghề nghiệp
Sinh viên
Em đang có một vấn đề như sau muốn nhờ ACE chỉ giáo:
Nhập vào một ô bất kì trong Excel 1 giá trị chẳng hạn như 10.5 thì tự động chia nhỏ thành 10 khoảng trong đó 9 khoảng 1 và 1 khoảng 0.5.
Chi tiết e có đính kèm trong file excel.
Thanks
 

File đính kèm

Bạn thử dùng công thức sau, fill xuống!
Tác giả nói rằng:
Em đang có một vấn đề như sau muốn nhờ ACE chỉ giáo:
Nhập vào một ô bất kì trong Excel 1 giá trị chẳng hạn như 10.5 thì tự động chia nhỏ thành 10 khoảng trong đó 9 khoảng 1 và 1 khoảng 0.5.
Chi tiết e có đính kèm trong file excel.
Thanks
Tôi nghĩ chắc luôn luôn là 10 khoảng, có nghĩa là chia số nhập 10 phần, 9 cell trên là phần nguyên của phép chia và cell thứ 10 là phần thừa
Đúng ý tác giả không nhỉ?
 
Bạn thử dùng công thức sau, fill xuống!

Cảm ơn bạn!
Bạn có thể nói thêm cho mình là "Nên hiểu công thức này như thế nào vậy?"
Bởi vì khoảng chia của mình sao động trong khoảng từ 1, 1.1, 1.2,...,2 chứ ko phải lúc nào cũng chia đều là 1 cả.
Còn một việc nữa là có cách nào tự chương trình nó chia cho mình không nhỉ? (nghĩa là mình ko phải fill)
 
Cảm ơn bạn!
Bạn có thể nói thêm cho mình là "Nên hiểu công thức này như thế nào vậy?"
Bởi vì khoảng chia của mình sao động trong khoảng từ 1, 1.1, 1.2,...,2 chứ ko phải lúc nào cũng chia đều là 1 cả.
Còn một việc nữa là có cách nào tự chương trình nó chia cho mình không nhỉ? (nghĩa là mình ko phải fill)
Muốn tự động và hiệu quả cao ta dùng code VBA ---> Nếu bạn đồng ý thì chúng ta tiếp tục (đại khái sẽ tạo 1 Form cho bạn nhập điều kiện đầu vào)
 
Muốn tự động và hiệu quả cao ta dùng code VBA ---> Nếu bạn đồng ý thì chúng ta tiếp tục (đại khái sẽ tạo 1 Form cho bạn nhập điều kiện đầu vào)

Cảm ơn bạn.
Bạn có thể giới thiệu cho mình 1 đoạn code để giải quyết vấn đề này ko??
 
Cảm ơn bạn!
Bạn có thể nói thêm cho mình là "Nên hiểu công thức này như thế nào vậy?"
Bởi vì khoảng chia của mình sao động trong khoảng từ 1, 1.1, 1.2,...,2 chứ ko phải lúc nào cũng chia đều là 1 cả.
Còn một việc nữa là có cách nào tự chương trình nó chia cho mình không nhỉ? (nghĩa là mình ko phải fill)
Phân bao nhiêu cũng đươc, nhưng bạn hãy đưa quy luật rõ ràng, có thí dụ mà bạn cũng hà tiện nữa, hãy nêu quy luật và vài thí dụ điển hình thì anh em mới hiểu để giúp bạn chứ. Hổng biết có phải tại làm mấy ve (mừng Việt Nam chiến thắng) hông nữa mà mình đọc hoài cũng chẳng hiểu
Thân
 
Cảm ơn mọi ngưởi, có thể yêu cầu mình đưa ra là chưa cụ thể, mình sẽ mô tả cụ thể như sau:
Ví dụ: theo phương thẳng đứng từ trên xuống có 2 đoạn thẳng đoạn 1 dài 6,25m (C4), đoạn 2 dài 5,5m (C5). Yêu cầu chia mỗi đoạn thẳng thành các đoạn <= 2m, kết quả như ở vùng (H4:H10).
E đã đính kèm file kèm theo hình minh họa.
Mong các ACE chỉ giáo.
Thanks
 

File đính kèm

Lần chỉnh sửa cuối:
Ko có bác nào giúp e với sao?? ////////////
 
Cảm ơn mọi ngưởi, có thể yêu cầu mình đưa ra là chưa cụ thể, mình sẽ mô tả cụ thể như sau:
Ví dụ: theo phương thẳng đứng từ trên xuống có 2 đoạn thẳng đoạn 1 dài 6,25m (C4), đoạn 2 dài 5,5m (C5). Yêu cầu chia mỗi đoạn thẳng thành các đoạn <= 2m, kết quả như ở vùng (H4:H10).
E đã đính kèm file kèm theo hình minh họa.
Mong các ACE chỉ giáo.
Thanks

Không biết có phải là như thế này không? (Làm đại, trúng / trật = hên xui + ráng chịu)
 

File đính kèm

Cảm ơn bác, công thức bác đưa ra rất ok tuy nhiên khi có nhiều đoạn thẳng có chiều dài khác nhau thì phải làm thủ công nên hơi cực. Bác có thế giúp e chỗ đó nữa ko ạ?
 
Cảm ơn bác, công thức bác đưa ra rất ok tuy nhiên khi có nhiều đoạn thẳng có chiều dài khác nhau thì phải làm thủ công nên hơi cực. Bác có thế giúp e chỗ đó nữa ko ạ?

Cụ thể là thế nào?


Chia thành nhiều đoạn có độ dài khác nhau ah? cụ thể là chia theo kiểu cách nào? mấy đoạn lớn (dài), mấy đoạn nhỏ (ngắn), bao nhiêu đoạn nhầng nhầng ??? --=0 --=0 --=0
 
Cụ thể như trong file e đã gửi đấy ạ. Sau khi chia đoạn 6.25 (ĐOẠN 1) rồi thì tiếp tục chia đoạn 5.5 (ĐOẠN 2). File bác giúp e chỉ chia 1 đoạn 6.25 thôi!
 
Cụ thể như trong file e đã gửi đấy ạ. Sau khi chia đoạn 6.25 (ĐOẠN 1) rồi thì tiếp tục chia đoạn 5.5 (ĐOẠN 2). File bác giúp e chỉ chia 1 đoạn 6.25 thôi!

Trời ơi, nhập số 5.5 vô B1 và độ dài đoạn lớn nhất vô B2 là nó tự chia rồi còn gì?
 
Trời ơi, nhập số 5.5 vô B1 và độ dài đoạn lớn nhất vô B2 là nó tự chia rồi còn gì?
Bác hiểu sai ý em rồi. E muốn là khi nhập vào hai ô là 6.25 và 5.5 thì sau khi chia xong đoạn 6.25 rồi thì chia tiếp cho đoạn 5.5 ko tách ra làm 2 lần như bác. Cụ thể như file e gửi sau.
 

File đính kèm

File đính kèm

Xem thế này đã đúng ý chưa?

Thật tuyệt vời!/-*+//-*+/

Rất cảm ơn bác boyxin đã giúp e.
Bác có thể bớt chút thời gian để hướng dẫn e sử dụng file đó ko ạ? E nhìn vào mà ko hiểu tại sao làm được như vậy? Tại sao đi đưa chuột vào ô nhập chiều dài đoạn thì lại có "comment" (hình như ko phải vậy) là: "Input number here"? E có đọc qua macro nhưng cũng ko hiểu? Mong bác giúp đỡ.
Thanks
 
Thật tuyệt vời!/-*+//-*+/

Rất cảm ơn bác boyxin đã giúp e.
Bác có thể bớt chút thời gian để hướng dẫn e sử dụng file đó ko ạ? E nhìn vào mà ko hiểu tại sao làm được như vậy? Tại sao đi đưa chuột vào ô nhập chiều dài đoạn thì lại có "comment" (hình như ko phải vậy) là: "Input number here"? E có đọc qua macro nhưng cũng ko hiểu? Mong bác giúp đỡ.
Thanks

paperclip.png
1) Phần code là thực hiện theo yêu cầu của bạn thôi (Thay đoạn code sau đây gọn hơn chút và chuẩn hơn)
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("b:b")) Is Nothing Then
Application.ScreenUpdating = False
    [e2].CurrentRegion.Offset(1).Clear
If (IsNumeric([b1]) = False) Or [b1] <= 0 Then Exit Sub
For Each clls In Range([b2], [b65535].End(xlUp).Offset(1))
    If (IsNumeric(clls) = True) And (clls > 0) Then
        d = d + 1: j = 0
        [e65535].End(xlUp).Offset(1, 1) = [f1] & " " & d
        Do: j = j + 1: On Error Resume Next
            With [f65535].End(xlUp).Offset(j - 1, -2)
                .Offset(, 1) = IIf(clls < [b1] * j, clls - [b1] * (j - 1), [b1])
                .Resize(, 3).BorderAround LineStyle:=1
                .Resize(, 3).Borders(11).LineStyle = 1
                .Resize(, 3).Interior.ColorIndex = 35 + (d Mod 2)
            End With
        Loop Until [b1] * j >= clls
    End If
Next
    If d > 0 Then Range([d2], [e1].End(xlDown).Offset(, -1)) = Evaluate("ROW(a:a)")
Application.ScreenUpdating = True
End If
End Sub
2) Bạn chọn ô có ... "Input Number Here!". Vào Data\Validation... chọn thẻ Input Message ;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;; +-+-+-+ +-+-+-+ +-+-+-+ --=0 --=0 --=0
 

File đính kèm

Lần chỉnh sửa cuối:
paperclip.png
1) Phần code là thực hiện theo yêu cầu của bạn thôi (Thay đoạn code sau đây gọn hơn chút và chuẩn hơn)

Hjx.. e gặp chút rắc rối khi vận dụng nó vào trong bài làm của e. Khi đó phải di chuyển các ô xuống dòng thứ 10 của sheet. Còn ô Phần lớn nhất B2 thì nằm tại vị trí B9.
Có cách nào chuyển cái code của bác thành một công thức ko vậy?

Mong bác giúp e chỉnh lại code.
Thanks
 
Hjx.. e gặp chút rắc rối khi vận dụng nó vào trong bài làm của e. Khi đó phải di chuyển các ô xuống dòng thứ 10 của sheet. Còn ô Phần lớn nhất B2 thì nằm tại vị trí B9.
Có cách nào chuyển cái code của bác thành một công thức ko vậy?

Mong bác giúp e chỉnh lại code.
Thanks

cấu trúc file của bạn thế nào, chỗ nào cần nhập số, chô nào hiện kết quả, bạn xem code có thể thấy mà, hoạc là gửi file để mình sửa code giúp
 
cấu trúc file của bạn thế nào, chỗ nào cần nhập số, chô nào hiện kết quả, bạn xem code có thể thấy mà, hoạc là gửi file để mình sửa code giúp

Em gửi bác file e đang cần thực hiện phân đoạn, trong đó:

  • Phần lớn nhất: ô V3
  • Số cần chia: từ ô W6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Stt: ô X6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Vị trí: ô AA6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Đoạn: ô AE6 nhưng vì cần rút trích nên những Vị trí nào thuộc Đoạn nào thì bác cứ trả hết về Đoạn đó (VD: Số cần chia là 4 -> chia làm 2 Vị trí -> ở cột Đoạn e muốn cả 2 dòng này đều có chữ là "Đoạn 1")
 

File đính kèm

Em gửi bác file e đang cần thực hiện phân đoạn, trong đó:


  • Phần lớn nhất: ô V3
  • Số cần chia: từ ô W6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Stt: ô X6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Vị trí: ô AA6 trở xuống, nếu W6= 0 hoặc W6="" thì bỏ qua.
  • Đoạn: ô AE6 nhưng vì cần rút trích nên những Vị trí nào thuộc Đoạn nào thì bác cứ trả hết về Đoạn đó (VD: Số cần chia là 4 -> chia làm 2 Vị trí -> ở cột Đoạn e muốn cả 2 dòng này đều có chữ là "Đoạn 1")
paperclip.png
Tập tin đính kèm

Bạn chép đoạn code này vào Sheets("3. SCT coc") và gõ chữ Đoạn vào ô [AE4]
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Selection.Address = "$V$3" Then              'Chon o [V3] de kich hoat code ...
Application.ScreenUpdating = False
    [X6].Resize([x65535].End(xlUp).Row).Clear                           'Xoa "Phan to"
    [AA6].Resize([AA65535].End(xlUp).Row).Clear                         'Xoa "Chieu day"
    [AE6].Resize([AE65535].End(xlUp).Row).Clear                         'Xoa "Lop dat"
If (IsNumeric([V3]) = False) Or [V3] <= 0 Then Exit Sub                 'Chi xu ly [Phan lon nhat]=[So] > 0
For Each clls In Range([W6], [W65535].End(xlUp).Offset(1))              'Vung so can chia Doan
    If (IsNumeric(clls) = True) And (clls > 0) Then                     'Chi xu ly [Kq Tinh toan]=[So] > 0
        d = d + 1: j = 0
        [AA65535].End(xlUp).Offset(1, 4) = [AE4] & " " & d              'Bat dau "Lop dat moi"
        Do: j = j + 1: On Error Resume Next
            With [AE65535].End(xlUp).Offset(j - 1, -4)
                .Value = IIf(clls < [V3] * j, clls - [V3] * (j - 1), [V3])                          'Ghi "Chieu day"
                Union(.Offset(, -3), .Offset(), .Offset(, 4)).BorderAround LineStyle:=1             'Ke vien
                Union(.Offset(, -3), .Offset(), .Offset(, 4)).Interior.ColorIndex = 19 + (d Mod 2)  'To mau
            End With
        Loop Until [V3] * j >= clls
        Range([AE65535].End(xlUp), [AA65535].End(xlUp).Offset(, 4)) = [AE4] & " " & d               'Ghi "Lop dat"
    End If
Next
    If d > 0 Then Range([X6], [AA65535].End(xlUp).Offset(, -3)) = Evaluate("ROW(a:a)")             
Application.ScreenUpdating = True
End If
End Sub
Tạo bản lưu dự phòng rồi Test các trường hợp, khả năng có thể xem còn lỗi gì không nhé (Chọn ô [V3] để kích hoạt CODE)
 
Lần chỉnh sửa cuối:
Em đã làm như bác nhưng có lỗi như sau: !$@!!!$@!!
attachment.php

Bác test lại dùm e với nhé!

Bạn xóa bỏ chữ chú thích trong code đi là được mà
(hoặc thêm dấu nháy đơn như phần chú thích bên trên ý)

(mình ghi vào đó để bạn biết được code nó làm những gì, làm thế nào để có thể tùy chỉnh theo mục đích của mình - ai ngờ bạn bê nguyên xi như vậy mà không thềm nhòm ngó xem code ra làm sao --=0)

Khi đưa code lên web nó tự cắt bớt dấu nháy đơn, tưởng đưa thiếu nhưng khi vào sửa lại bài thì nó vẫn có nhưng gửi bài lên thì nó không hiện (đây là 1 lỗi của trang mà admin chưa khắc phục hoặc chưa biết để khắc phục)
 
Lần chỉnh sửa cuối:
Thương bác boyxin quá, mất nhiều thời gian để trả lời mà không thấy chủ topic nhấn cảm ơn gì. Thôi để em thay mặt chủ topic nhấn cảm ơn bác nhé.
 
[/PHP]Tạo bản lưu dự phòng rồi Test các trường hợp, khả năng có thể xem còn lỗi gì không nhé (Chọn ô [V3] để kích hoạt CODE)

Chào bác boyxin, e đã test code của bác khá kĩ. Tuy nhiên vì điều kiện in ấn nên e gặp 2 vấn đề sau:
1/ E đã sắp lại bảng tính nhưng khi edit theo hướng dẫn của bác 1 tẹo thì có gặp trục trặc là chạy ra kết quả ko đúng?? **~**
2/ Font chữ trả về là Font Time New Romans, Size 12 và có border như file e gửi cho bác.

Mong bác giúp đỡ
Thanks
 

File đính kèm

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

Back
Top Bottom