Nhờ viết hàm tự tạo? (1 người xem)

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

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

311280

Thành viên hoạt động
Tham gia
12/7/09
Bài viết
111
Được thích
8
Nhờ các bác viết giùm e hàm tự tạo để tính công thức sau:
=IF(D16=0,"",IF(AND(Y16>=2*V16,Y16<=G9*(E16-V16)),(F16*10^2*(Z16+0.5*T16-(E16-V16)))/(P5*(E16-2*V16)),IF(Y16<2*V16,(F16*10^2*(Z16-(E16-2*V16)))/(P6*(E16-2*V16)),(F16*10^2*Z16-G5*G7*D16*T16*((E16-V16)-T16/2))/(P5*(E16-2*V16)))))
E cần hàm tự tạo vì trong công thức này tính nằm trong rất nhiều ô nên nặng file.Thanks.
 
Nhờ các bác viết giùm e hàm tự tạo để tính công thức sau:
=IF(D16=0,"",IF(AND(Y16>=2*V16,Y16<=G9*(E16-V16)),(F16*10^2*(Z16+0.5*T16-(E16-V16)))/(P5*(E16-2*V16)),IF(Y16<2*V16,(F16*10^2*(Z16-(E16-2*V16)))/(P6*(E16-2*V16)),(F16*10^2*Z16-G5*G7*D16*T16*((E16-V16)-T16/2))/(P5*(E16-2*V16)))))
E cần hàm tự tạo vì trong công thức này tính nằm trong rất nhiều ô nên nặng file.Thanks.
Bạn chỉ cần đưa file giả định & nói rõ yêu cầu thì......nhanh có câu trả lời, chứ nhìn công thức này lại phải "sui da, sui dô" cực lắm
Thân
 
Upvote 0
Bạn chỉ cần đưa file giả định & nói rõ yêu cầu thì......nhanh có câu trả lời, chứ nhìn công thức này lại phải "sui da, sui dô" cực lắm
Thân
Con Cò mà đi ăn đêm,
Đậu phải cành mềm lộn cổ xuống ao...
Híc! 4 cái "gì đó dài thòn".
 
Upvote 0
Bằng name có nặng file như công thức không bác?
Nếu công thức cũ khiến cho file "nặng" thì dù chuyển thành name cũng "nặng"... y chang (chỉ là công thức gọn lại thôi)
Kể cả việc chuyển thành hàm tự tạo cũng chẳng cải thiện được vụ nặng nhẹ gì đó cả (đàng nào thì cũng bao nhiêu đó phép tính)
 
Upvote 0
Bằng name có nặng file như công thức không bác?

Bằng Name làm cho công thức gọn gàng hơn, song đã nói là công thức thì tất cả cũng nặng tương đương nhau, cách tốt nhất là làm công thức bằng Name rồi kết hợp với VBA cho chạy lấy giá trị thì đỡ hơn tí.
 
Upvote 0
Vậy là bó tay không có cách gì cho file nó nhẹ được sao các bác?
 
Upvote 0
Vậy là bó tay không có cách gì cho file nó nhẹ được sao các bác?

Không phải là bó tay, mà tại vì bạn không biết sắp xếp dữ liệu! Nếu bạn cho nó vào List (Table) thì làm hàng nào nó nhảy công thức hàng đó thì không vấn đề gì.
 
Upvote 0
Em không hiểu,bác làm ví dụ cho 1 ô màu xanh cho e hiểu với.

Tôi làm cho bạn xem thử nhé!

Tôi kết hợp với Name và Table để thực hiện cho bạn.

Công thức ở các điểm tô màu xanh.

Trong table, bạn chỉ việc gõ gì đó vào cột đầu tiên rồi Enter sẽ tự động cho ra công thức, kể cả định dạng của hàng trên.
 

File đính kèm

Upvote 0
Tôi làm cho bạn xem thử nhé!

Tôi kết hợp với Name và Table để thực hiện cho bạn.

Công thức ở các điểm tô màu xanh.

Trong table, bạn chỉ việc gõ gì đó vào cột đầu tiên rồi Enter sẽ tự động cho ra công thức, kể cả định dạng của hàng trên.
Gõ vào không thấy gì bác ah?
 
Upvote 0
Gõ vào không thấy gì bác ah?

Bạn gõ vào cột A, ví dụ nó đang ở số 3, giả sử bạn gõ thêm số 4 tức gõ thêm gì đó ở hàng 19 cột A rồi Enter, sau đó bạn thử kiểm tra ở các cột chứa công thức màu xanh xem, nó tự động thêm công thức ở đó cho bạn.
 
Upvote 0
Theo mình bạn thử làm theo bạn Nghĩa xem sao, nếu không cải thiện được tý nào thì lúc đó sẽ xử nó bằng một Sub, cứ có bi nhiêu dữ liệu thì xử lý bấy nhiêu thôi, không còn công thức chắc nhẹ hơn nhiều, nhưng phải dùng thời gian chờ xem bóng đá mới lôi ra hết mấy cái cộng trừ nhân chia của bạn trong công thức
Híc, nhìn công thức chóng mặt quá Ba Tê ơi
 
Upvote 0
Tôi nghĩ chỉ với 4 công thức nhưng khi nhân cho 1000 dòng thì file đã quá tải, chỉ có cách dùng VBA, mỗi khi cần thì cập nhật số liệu thế thôi!
 
Upvote 0
Bạn gõ vào cột A, ví dụ nó đang ở số 3, giả sử bạn gõ thêm số 4 tức gõ thêm gì đó ở hàng 19 cột A rồi Enter, sau đó bạn thử kiểm tra ở các cột chứa công thức màu xanh xem, nó tự động thêm công thức ở đó cho bạn.
Bác giúp làm sao cho từ A16 trở xuống có dữ liệu là nó có công thức không cần enter từng cái được không?
 
Upvote 0

File đính kèm

Upvote 0
Cảm ơn bác,em muốn làm giống như bài 15 của bác chứ không muốn dùng marco vì không thể undo được.

Nếu muốn undo thì cài thêm lệnh save trước khi cập nhật - sau đó nếu thấy không đúng thì đóng file (không save) rồi mở lại.
 
Upvote 0
Theo mình, mục đích chính của bạn chủ topic là giảm bớt dung lượng & cải thiện tốc độ tính toán
Mình góp một cách làm, khi cột C có dữ liệu thì ở 4 cột có công thức sẽ copy công thức xuống, xóa luôn công thức ở Cell bên trên
Giữ lại công thức ở hàng đầu ( hàng 16) để dành rủi có trục trặc gì thì .......vẫn còn vốn làm ăn
Cách làm: cứ nhập dữ liệu ở cột C thì sẽ có công thức mới & cell bên trên chỉ còn giá trị
Hihi, vậy là trong sheet cũa bạn còn có 8 công thức( 4 dùng để copy & 4 để dành), "bảo hành" với bạn chạy nhanh như gió
Đây chỉ là ý riêng của mình
Híc
 

File đính kèm

Upvote 0
Theo mình, mục đích chính của bạn chủ topic là giảm bớt dung lượng & cải thiện tốc độ tính toán
Mình góp một cách làm, khi cột C có dữ liệu thì ở 4 cột có công thức sẽ copy công thức xuống, xóa luôn công thức ở Cell bên trên
Giữ lại công thức ở hàng đầu ( hàng 16) để dành rủi có trục trặc gì thì .......vẫn còn vốn làm ăn
Cách làm: cứ nhập dữ liệu ở cột C thì sẽ có công thức mới & cell bên trên chỉ còn giá trị
Hihi, vậy là trong sheet cũa bạn còn có 8 công thức( 4 dùng để copy & 4 để dành), "bảo hành" với bạn chạy nhanh như gió
Đây chỉ là ý riêng của mình
Híc

Cái vấn đề là chú này vừa muốn nhanh lại hay bị làm sai nên phải undo thì bó tay mi tà luôn, đã chạy code thì khó có thể chạy undo được!
 
Upvote 0
Theo mình, mục đích chính của bạn chủ topic là giảm bớt dung lượng & cải thiện tốc độ tính toán
Mình góp một cách làm, khi cột C có dữ liệu thì ở 4 cột có công thức sẽ copy công thức xuống, xóa luôn công thức ở Cell bên trên
Giữ lại công thức ở hàng đầu ( hàng 16) để dành rủi có trục trặc gì thì .......vẫn còn vốn làm ăn
Cách làm: cứ nhập dữ liệu ở cột C thì sẽ có công thức mới & cell bên trên chỉ còn giá trị
Hihi, vậy là trong sheet cũa bạn còn có 8 công thức( 4 dùng để copy & 4 để dành), "bảo hành" với bạn chạy nhanh như gió
Đây chỉ là ý riêng của mình
Híc
Cảm ơn bác nhưng ý e là khi copy rất nhiều hàng bỏ vào cột C thì sẽ hiện công thức 4 ô đó luôn và không cần xoá công thức.File của bác là phải nhập từng cell một trong cột C nó mới hiện giá trị trong 4 ô đó.Cảm ơn sự quan tâm của các bác.
 
Upvote 0
Cảm ơn bác nhưng ý e là khi copy rất nhiều hàng bỏ vào cột C thì sẽ hiện công thức 4 ô đó luôn và không cần xoá công thức.File của bác là phải nhập từng cell một trong cột C nó mới hiện giá trị trong 4 ô đó.Cảm ơn sự quan tâm của các bác.

Theo cái bài của tôi (bài 23) thì bạn cứ làm, cứ nhập thoải mái đi, muốn undo gì cũng được, sửa xoá gì cũng được, khi muốn nhập công thức thì bấm nút thôi, khi đã có công thức rồi thì cái nào sai thì sửa lại ô đó, công thức vẫn nằm ở đó, chẳng mất đâu mả lo.
 
Upvote 0
Theo cái bài của tôi (bài 23) thì bạn cứ làm, cứ nhập thoải mái đi, muốn undo gì cũng được, sửa xoá gì cũng được, khi muốn nhập công thức thì bấm nút thôi, khi đã có công thức rồi thì cái nào sai thì sửa lại ô đó, công thức vẫn nằm ở đó, chẳng mất đâu mả lo.
Để em xem kỹ lại.Thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
Các ô có công thức đấy nó không đi theo hàng bác ah.Nếu hàng 16 thì giá trị trong cột khi tương ứng với 16,trừ những cel đã được $$.Xuống hàng 17 thì khi tương ứng là 17........

Tôi không hiểu cái bạn nói như thế nào, công thức là tôi "cắt ghép" và đặt lại tên cho nó thôi, nguyên tắc là khi ô cột C có giá trị thì từ ô C16 đến ô C có giá trị sẽ tự chạy công thức theo đó mà thôi.
 
Upvote 0
Cảm ơn bác nhưng ý e là khi copy rất nhiều hàng bỏ vào cột C thì sẽ hiện công thức 4 ô đó luôn và không cần xoá công thức.File của bác là phải nhập từng cell một trong cột C nó mới hiện giá trị trong 4 ô đó.Cảm ơn sự quan tâm của các bác.
Viết cái
khi copy rất nhiều hàng bỏ vào cột C thì sẽ hiện công thức 4 ô đó luôn
thì dễ thôi, nhưng
và không cần xoá công thức
thì đến lúc nào đó dữ liệu lên vài ngàn dòng thì ta .......TRỞ LẠI ĐÚNG CÁI BÀI ĐẦU TIÊN CỦA BẠN TRONG TOPIC NÀY
:=\+Híc:=\+
 
Upvote 0
Theo cái bài của tôi (bài 23) thì bạn cứ làm, cứ nhập thoải mái đi, muốn undo gì cũng được, sửa xoá gì cũng được, khi muốn nhập công thức thì bấm nút thôi, khi đã có công thức rồi thì cái nào sai thì sửa lại ô đó, công thức vẫn nằm ở đó, chẳng mất đâu mả lo.
Nhờ bác thêm để khi nhấn dấu Chạy công thức nó tự động đóng khung các cell có giá trị từ hàng 16 trở xuống với ah.Nếu không có giá trị thì xoá đóng khung từ hàng 16 trở xuống.Thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ bác thêm để khi nhấn dấu Chạy công thức nó tự động đóng khung các cell có giá trị từ hàng 16 trở xuống với ah.Nếu không có giá trị thì xoá đóng khung từ hàng 16 trở xuống.Thanks.

Cái này chỉ chỉnh thêm tí thôi chứ gì đâu. Lấy hàng thứ 16 làm chuẩn về định dạng nhé, tôi sẽ chiếu theo hàng đó mà copy định dạng cho các hàng sau. Gõ vào cột C bất cứ ở hàng nào từ hàng 16 trở đi rồi bấm nút sẽ thấy.

Mã:
Private Sub CommandButton1_Click()
    Dim i As Long
    i = [C65536].End(xlUp).Row
    If i <= 15 Then Exit Sub
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
            Range("J16:J" & i).Formula = "=CotJ"
            Range("P16:P" & i).Formula = "=CotP"
            Range("R16:R" & i).Formula = "=CotR"
            Range("T16:T" & i).Formula = "=CotT"
            [COLOR=#ff0000][B]Range("A" & i + 1 & ":AH65536").Clear[/B][/COLOR]
            [COLOR=#0000cd]Range("A16:AH16").Copy
            Range("A17:AH" & i).PasteSpecial xlPasteFormats[/COLOR]
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lấy hàng 16 làm chuẩn thí dụ khi nhập giá trị cột C ở hàng 19,20 rồi bỏ hàng 21 nhập tiếp giá trị hàng 22 trở xuống xong nhấn nút Chay công thức sao nó không xóa hàng 21 vậy bác vì nó đâu có dữ liệu.
 
Upvote 0
Lấy hàng 16 làm chuẩn thí dụ khi nhập giá trị cột C ở hàng 19,20 rồi bỏ hàng 21 nhập tiếp giá trị hàng 22 trở xuống xong nhấn nút Chay công thức sao nó không xóa hàng 21 vậy bác vì nó đâu có dữ liệu.

Sao mà "zắc zối" quá!

Mã:
Private Sub CommandButton1_Click()
    Dim i As Long, rng As Range
    i = [C65536].End(xlUp).Row
    If i <= 15 Then Exit Sub
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
            Range("A" & i + 1 & ":AH65536").Clear
            Range("A16:AH16").Copy
            Range("A17:AH" & i).PasteSpecial xlPasteFormats
            For Each rng In Range("C16:C" & i)
                With rng
                    If .Value = "" Then
                        .Offset(, -2).Resize(, 34).ClearContents
                    Else
                        .Offset(, 7).Formula = "=CotJ"
                        .Offset(, 13).Formula = "=CotP"
                        .Offset(, 15).Formula = "=CotR"
                        .Offset(, 17).Formula = "=CotT"
                    End If
                End With
            Next
            Range("A" & i & ":AH" & i).Select
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
 

File đính kèm

Upvote 0
Ý e là xóa luôn hàng chứ không phải xóa công thức bác ah.Cảm ơn sự nhiệt tình giúp đỡ của bác!
 
Upvote 0
Ý e là xóa luôn hàng chứ không phải xóa công thức bác ah.Cảm ơn sự nhiệt tình giúp đỡ của bác!

Bạn thử chưa mà nói là chỉ xóa công thức? Xóa tất cả, trừ định dạng thôi. Chẳng lẽ lại xóa luôn định dạng? một hàng ở trên trời và một hàng ở dưới đất giống nhau, còn ở giữa trắng bóc hả?

Hay ý bạn muốn sau khi bạn đánh bất kỳ vào ô nào của cột C rồi khi bấm nút nó sẽ lọc những hàng nào mà ở cột C không có rồi delete luôn hàng đó? Rồi đôn những hàng dưới lên trên?
 
Lần chỉnh sửa cuối:
Upvote 0
Thôi, dù là ô rỗng hay ô bằng 0 gì cũng cho đi die hết:

Mã:
Private Sub CommandButton1_Click()
    Dim i As Long, j As Long
    i = [C65536].End(xlUp).Row
    If i <= 15 Then Exit Sub
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .Calculation = xlCalculationManual
            For j = i To 16 Step -1
                With Range("C" & j)
                    If .Value = "" Or .Value = 0 Then
                        .Offset(, -2).Resize(, 34).Delete 2
                    End If
                End With
            Next
            i = [C65536].End(xlUp).Row
            Range("J16:J" & i).Formula = "=CotJ"
            Range("P16:P" & i).Formula = "=CotP"
            Range("R16:R" & i).Formula = "=CotR"
            Range("T16:T" & i).Formula = "=CotT"
            Range("A16:AH16").Copy
            Range("A17:AH" & i).PasteSpecial xlPasteFormats
            Range("A" & i + 1 & ":AH65536").Clear
            Range("A" & i & ":AH" & i).Select
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub
 

File đính kèm

Upvote 0

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

Back
Top Bottom