Cần giúp: Tách phần công thức trong chuỗi ra để tính toán (1 người xem)

Liên hệ QC

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

xuongrongdat

Có bao giờ bạn tự hỏi "Tôi là ai?"
Tham gia
30/6/08
Bài viết
1,703
Được thích
1,581
Donate (Momo)
Donate
Nghề nghiệp
Vô tư cùng bạn bè đi khắp nơi.
Tôi tính lương 250 người. Theo yêu cầu của bên phòng Kế toán thì tính xong phải ghi chú cách tính chi tiết lương từng người ngay bên dưới bảng lương (cột B) để người lao động xem tự kiểm tra được, và ô kiểm tra dòng công thức ghi chú có đúng kết quả không (cột K) để nhân viên kế toán nhìn dễ đối chiếu.
Nhờ các chú bác, anh chị giúp dùm công thức ở cột K. Nó phải y như trong file tôi gửi.
Cột B hoàn toàn bằng text hết và có cấu trúc chung giữa 2 dấu "=" y chang nguyên cột.
1598521315584.png

Trong hình và file tôi đã điền sẵn cột K để minh họa. Tôi làm thủ công đó.
Tôi cảm ơn.

PS: tôi còn đang khổ tâm cái vụ ghi chú lương chi tiết cho từng người. Tôi phải gõ tay cho từng người luôn. Đang suy nghĩ làm sao cho nhanh hơn, giờ mỗi khi làm phải mất 1 ngày mới xong vì phải làm xong rồi kiểm tra thật kỹ mới đưa qua phòng Kế toán kiểm tra chéo.
 

File đính kèm

Lần chỉnh sửa cuối:
Là sao ta. Có phải là coi như cột K chưa có gì, làm cách nào để được cột K giống y như trong file của bạn?
 
Tôi tính lương 250 người. Theo yêu cầu của bên phòng Kế toán thì tính xong phải ghi chú cách tính chi tiết lương từng người ngay bên dưới bảng lương (cột B) để người lao động xem, và ô kiểm tra dòng công thức có ghi chú có đúng kết quả không (cột K) để nhân viên kế toán nhìn dễ đối chiếu.
Nhờ các chú bác, anh chị giúp dùm công thức ở cột K. Nó phải y như trong file tôi gửi.
Cột B hoàn toàn bằng text hết và có cấu trúc chung giữa 2 dấu "=" y chang nguyên cột.
View attachment 244262

Tôi cảm ơn.
Bạn sử dụng Text to columns, phân tách bởi dấu"=" là được
 
Là sao ta. Có phải là coi như cột K chưa có gì, làm cách nào để được cột K giống y như trong file của bạn?
Đúng rồi anh.
Bạn sử dụng Text to columns, phân tách bởi dấu"=" là được
À, xong cái mình replace all dấu "." phân cách hàng ngàn bằng "" là xong hén. Để mình mò thử. Thanks bạn.
 
Tôi tính lương 250 người. Theo yêu cầu của bên phòng Kế toán thì tính xong phải ghi chú cách tính chi tiết lương từng người ngay bên dưới bảng lương (cột B) để người lao động xem, và ô kiểm tra dòng công thức có ghi chú có đúng kết quả không (cột K) để nhân viên kế toán nhìn dễ đối chiếu.
Nhờ các chú bác, anh chị giúp dùm công thức ở cột K. Nó phải y như trong file tôi gửi.
Cột B hoàn toàn bằng text hết và có cấu trúc chung giữa 2 dấu "=" y chang nguyên cột.
View attachment 244262

Trong hình và file tôi đã điền sẵn cột K để minh họa. Tôi làm thủ công đó.
Tôi cảm ơn.

PS: tôi còn đang khổ tâm cái vụ ghi chú lương chi tiết cho từng người. Tôi phải gõ tay cho từng người luôn. Đang suy nghĩ làm sao cho nhanh hơn, giờ mỗi khi làm phải mất 1 ngày mới xong vì phải làm xong rồi kiểm tra thật kỹ mới đưa qua phòng Kế toán kiểm tra chéo.
Nghĩa là bạn có 1 cột tính công thức ở đâu đó như cột K trong file
1. Giờ bạn phải gõ ghi chú công thức vào phần cuối cột B ( Ctrl ~ copy công thức sang 1 cột khác dạng text) Sau đó làm hàm nối chuỗi lại.
2. Sau đó bạn lại phải làm từ cột B để có công thức như cột K (Hàm Evaluate)
 
Nghĩa là bạ có 1 cột tính công thức ở đâu đó như cột K trong file
1. Giờ bạn phải gõ ghi chú công thức vào phần cuối cột B
2. Sau đó bạn lại phải làm từ cột B để có công thức như cột K
Đúng rồi á. Mà để ghi chú được cột B thì phải qua 1 loạt tính toán rồi á.
Bạn xem giúp thử file: (Cửa hàng 01 mình đã làm hoàn thiện rồi)
1598522188148.png
 

File đính kèm

Đúng rồi á. Mà để ghi chú được cột B thì phải qua 1 loạt tính toán rồi á.
Bạn xem giúp thử file: (Cửa hàng 01 mình đã làm hoàn thiện rồi)
View attachment 244266
Tôi hiểu file này rồi, để tối tôi thử xem bạn sẽ bớt phần gõ tay. từ ô B18 đến B22. Nhưng mục nghỉ phép bao nhiêu ngày trong ô B 18 đến B22 thì chắc công thức không làm được ( hoặc không có số liệu để làm)
Mục cột K còn lại nếu bạn tự tin về số tiền bạn tính đúng thì bạn lấy số tiền sau dấu bằng cuối cùng. Hoặc dùng Evaluate để tính toán. (phải thêm 1 cột phụ để tách đoạn công thức tính lương đó ra)
 
Đúng rồi á. Mà để ghi chú được cột B thì phải qua 1 loạt tính toán rồi á.
Bạn xem giúp thử file: (Cửa hàng 01 mình đã làm hoàn thiện rồi)
View attachment 244266
Đúng ra bảng nó phải theo kiểu Tên|ngày bắt đầu nghỉ|ngày kết thúc nghỉ|lý do nghỉ| ....
Kiểu như vậy chứ? ai mà làm một chuỗi tùm lum vậy. lấy ra cũng khổ mà nhập vào cũng khổ
P/s: mà cty nghỉ thứ 678 thì giành ở nhà mà nghiên cứu đi chứ, hỏi chi haha
 
Tôi hiểu file này rồi, để tối tôi thử xem bạn sẽ bớt phần gõ tay. từ ô B18 đến B22. Nhưng mục nghỉ phép bao nhiêu ngày trong ô B 18 đến B22 thì chắc công thức không làm được ( hoặc không có số liệu để làm)
Có á, file Bảng chấm công của từng Cửa hàng. Mình phải xin 50 Cửa hàng trưởng nữa (chắc là quên nó đi, thấy cũng mắc công lắm). Vì họ in ra giấy rồi gửi về công ty hàng tháng. Còn cái bảng này là tổng hợp 1 Quý lận. Tui phải tổng hợp cộng lại hết 3 tháng trong 1 Quý để ghi chú. Làm thủ công rất nhiều luôn.

Đây là Bảng tính lương cho phần sản lượng từng Cửa hàng bán vượt chỉ tiêu trong Quý á.
Đúng ra bảng nó phải theo kiểu Tên|ngày bắt đầu nghỉ|ngày kết thúc nghỉ|lý do nghỉ| ....
Kiểu như vậy chứ? ai mà làm một chuỗi tùm lum vậy. lấy ra cũng khổ mà nhập vào cũng khổ
Bạn xem file mình gửi ở bài #7 chưa? Đây là Bảng tính lương cho phần sản lượng từng Cửa hàng bán vượt chỉ tiêu trong Quý á.
Kiểu bạn nói là bên file Bảng chấm công ở từng Cửa hàng á. Mình thì làm tại Văn phòng công ty. :(
 
Cái này mà hỏi ở chuyên mục hàm và công thức thì thua rồi :rolleyes:
 
Cái này mà hỏi ở chuyên mục hàm và công thức thì thua rồi :rolleyes:
Giúp em công thức cột K thôi anh. Cột B để em tìm cách.

Cột K em suy nghĩ vầy:
1. Dùng Mid cắt chuỗi ở cột B ra để được chuỗi từ dấu "=" thứ nhất đến trước dấu "=" thứ hai 2 ký tự.
2. Xong Substitute dấu "." thành "" (chuỗi 1.)
3. Xong Evaluate (chuỗi 2.) => ủa thấy bà, hàm này không có sẵn. Bị @n0thing1988 lừa. =))

Đúng không anh? Tại em chưa làm được 1. nên cũng chưa thử được 2. và 3. :|
 
Giúp em công thức cột K thôi anh. Cột B để em tìm cách.

Cột K em suy nghĩ vầy:
1. Dùng Mid cắt chuỗi ở cột B ra để được chuỗi từ dấu "=" thứ nhất đến trước dấu "=" thứ hai 2 ký tự.
2. Xong Substitute dấu "." thành "" (chuỗi 1.)
3. Xong Evaluate (chuỗi 2.) => ủa thấy bà, hàm này không có sẵn. Bị @n0thing1988 lừa. =))

Đúng không anh? Tại em chưa làm được 1. nên cũng chưa thử được 2. và 3. :|
Làm được. Nhưng cuối cùng công thức bạn nhìn thấy trong cột K là cái gì? Kế toán có kiểm tra được theo yêu cầu không? Nếu lấy kết quả thì lấy thẳng ở cuối chuỗi cột B cho nó nhanh, Evaluate chi cho cực.
 
Mình có công thức này rất tiện cho bạn nhá. Mình có xét thêm trường hợp bạn đánh có chỗ là "vnd" và có chỗ lại là "đ"
Công thức ở cột K18 như sau:
=SUBSTITUTE(TRIM(MID(SUBSTITUTE(TRIM(B18)," ",REPT(" ",LEN(TRIM(B18)))),(LEN(TRIM(B18))-LEN(SUBSTITUTE(B18," ",""))-1)*LEN(TRIM(B18))+1,LEN(TRIM(B18)))),".",",")

Anh minh họa này:
1598526827703.png
 

File đính kèm

Lần chỉnh sửa cuối:
Giúp em công thức cột K thôi anh. Cột B để em tìm cách.

Cột K em suy nghĩ vầy:
1. Dùng Mid cắt chuỗi ở cột B ra để được chuỗi từ dấu "=" thứ nhất đến trước dấu "=" thứ hai 2 ký tự.
2. Xong Substitute dấu "." thành "" (chuỗi 1.)
3. Xong Evaluate (chuỗi 2.) => ủa thấy bà, hàm này không có sẵn. Bị @n0thing1988 lừa. =))

Đúng không anh? Tại em chưa làm được 1. nên cũng chưa thử được 2. và 3. :|
Evaluate là làm đươc theo yêu cầu của bạn ngay. Nhưng như anh Thắng nói đúng. Kế toán muốn kiểm tra thì để tự họ nghĩ công thức. Chứ bạn làm công thức cho họ xong rồi họ cũng biết đúng sai đâu.
 
Nếu lấy số cuối vậy thì thêm một cách nửa. Tại ô K18 công thức như sau:
Mã:
=--TRIM(LEFT(SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(B18," = ",REPT(" ",200)), 200))," ",REPT(" ",20)),20))
 
Vấn đề không phải làm sao để ra kết quả. Vì để kiểm tra kết quả của biểu thức trong phần ghi chú ở cột B nên công thức bắt buộc phải là biểu thức trong chuỗi ở cột B. Do đó chỉ có thể dùng macro, không thể dùng công thức.
 
Nếu bạn muốn tham khảo thêm VBA thì bạn xem ví dụ dưới đây:

Bạn để ý S_ viết tắc cho Sanbi_ , nếu bạn hay tận dụng các hàm do tôi viết, bạn sẽ quen.
------------------------------
JavaScript:
Option Explicit
#If VBA7 Then
  Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
  Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal HWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
  Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If
#If Win64 Then
  Private gTimerID As LongPtr, gTimerID2 As LongPtr
#Else
  Private gTimerID As Long, gTimerID2 As Long
#End If
Private Val1OArgs(), Val1OIndex As Integer
Function S_Val1(ByVal text) As Variant
  On Error Resume Next
  KillTimer 0&, gTimerID: gTimerID = 0
  S_Val1 = ""
  Dim K As Integer
  K = UBound(Val1OArgs)
  ReDim Preserve Val1OArgs(1 To K + 1)
  Val1OArgs(K + 1) = VBA.Array(text, Application.Caller)
  gTimerID = SetTimer(0&, 0&, 1, AddressOf S_Val1_callback)
End Function
Private Sub S_Val1_callback()
  On Error Resume Next
  Call KillTimer(0&, gTimerID): gTimerID = 0
  Call KillTimer(0&, gTimerID2): gTimerID2 = 0
  Dim UA As Integer
  UA = UBound(Val1OArgs)
  On Error GoTo 0
  If UA > 0 Then
    Val1OIndex = Val1OIndex + 1
    Val1OArgs(Val1OIndex)(1).Formula = "=" & S_Val3(Val1OArgs(Val1OIndex)(0))
    If Val1OIndex >= UA Then
      Erase Val1OArgs: Val1OIndex = 0
    Else
      gTimerID2 = SetTimer(0&, 0&, 1, AddressOf S_Val1_callback2)
    End If
  End If
End Sub
Private Sub S_Val1_callback2()
  S_Val1_callback
End Sub

Private Sub S_Val_test()
   S_Val2 ("TL = 1.013.030*20/78/5,34*1+1.013.030*33/78/4,34*1 = 147.396 d")
End Sub

Function S_Val2(text)
  S_Val2 = S_ValE("\= ((?:[\u0000-\u003C\u003E-\uFFFF])+) .{1,3}$", text)
  S_Val2 = CDec(Replace(S_Val2, ".", ""))
End Function

Function S_Val3(text)
  S_Val3 = S_ValE("(?:TL *= *)*(?:TL *= *)(.*?) *\=", text)
  If Application.International(xlDecimalSeparator) = "." Then
    S_Val3 = Replace(S_Val3, ".", "")
    S_Val3 = Replace(S_Val3, ",", ".")
  End If
End Function

Function S_ValE(ByVal pattern$, _
                ByVal text$, _
       Optional ByVal FrontText As String = "", _
       Optional ByVal BehindText As String = "", _
       Optional ByVal InSubMatches As Integer = -1, _
       Optional ByVal InMatchs As Integer = -1, _
       Optional ByVal bEvaluate As Boolean = False, _
       Optional ByVal bGlobal As Boolean = True, _
       Optional ByVal IgnoreCase As Boolean = True, _
       Optional ByVal bMulLine As Boolean = True, _
       Optional ByVal Delimiter As String = "")
  With VBA.CreateObject("VBScript.RegExp")
    .Global = bGlobal: .IgnoreCase = IgnoreCase: .MultiLine = bMulLine: .pattern = pattern
    Dim M, M2, N, N2, i%, j%, s$
    Set M = .Execute(text)
    If M.Count Then
      If InMatchs >= 0 Then
        If InMatchs < M.Count Then i = InMatchs: GoSub SubMatches
      Else
        For i = 0 To M.Count - 1: GoSub SubMatches: Next
      End If
      If s <> "" Then
        s = FrontText & s & BehindText
        If bEvaluate Then
          S_ValE = Application.Evaluate(s)
        Else
          S_ValE = s
        End If
      End If
    End If
  End With
Exit Function:
SubMatches:
  Set N = M(i).SubMatches
  If N.Count Then
    If InSubMatches >= 0 Then
      If InSubMatches < N.Count Then
        s = s & IIf(s = "", "", Delimiter) & N(InSubMatches)
      End If
    Else
      For j = 0 To N.Count - 1
        s = s & IIf(s = "", "", Delimiter) & N(j)
      Next
    End If
  Else
    s = s & IIf(s = "", "", Delimiter) & M(i)
  End If
Return
End Function
Function S_ValR(ByVal pattern$, _
                ByVal sReplace$, _
                ByVal text$, _
       Optional ByVal FrontText As String = "", _
       Optional ByVal BehindText As String = "", _
       Optional ByVal bEvaluate As Boolean = False, _
       Optional ByVal bGlobal As Boolean = True, _
       Optional ByVal IgnoreCase As Boolean = True, _
       Optional ByVal bMulLine As Boolean = True)
  With VBA.CreateObject("VBScript.RegExp")
    .Global = bGlobal: .IgnoreCase = IgnoreCase: .MultiLine = bMulLine: .pattern = pattern
    Dim s$
    If .test(text) Then
      s = FrontText & .Replace(text, sReplace) & BehindText
      If bEvaluate Then
        S_ValR = Application.Evaluate(s)
      Else
        S_ValR = s
      End If
    End If
  End With
End Function
 
Lần chỉnh sửa cuối:
Mình có công thức này rất tiện cho bạn nhá. Mình có xét thêm trường hợp bạn đánh có chỗ là "vnd" và có chỗ lại là "đ"
Công thức ở cột K18 như sau:
=SUBSTITUTE(TRIM(MID(SUBSTITUTE(TRIM(B18)," ",REPT(" ",LEN(TRIM(B18)))),(LEN(TRIM(B18))-LEN(SUBSTITUTE(B18," ",""))-1)*LEN(TRIM(B18))+1,LEN(TRIM(B18)))),".",",")
Cảm ơn bạn, nhưng bạn hiểu sai ý mình. Cột K mình muốn vừa hiển thị kết quả của dòng công thức trong Ghi chú, vừa biểu diễn được cả đoạn công thức ấy luôn. Như trong file bạn xem đó, Kế toán yêu cầu y như vậy.
Evaluate là làm đươc theo yêu cầu của bạn ngay. Nhưng như anh Thắng nói đúng. Kế toán muốn kiểm tra thì để tự họ nghĩ công thức. Chứ bạn làm công thức cho họ xong rồi họ cũng biết đúng sai đâu.
Uhm. Kế toán họ biết công thức hết chứ. Nhưng Kế toán trưởng yêu cầu tui làm giống trong file á. Lúc tui chuyển file cứng + file mềm qua phòng kế toán, chủ yếu họ sẽ xem file mềm trên máy tính dùng mắt thường nhìn kiểm tra cột B (coi ghi chú đúng không), coi cột K (công thức và kết quả khớp cột B không).
Chắc như anh Thắng và Sanbi nói thì yêu cầu của bài này phải xử lý bằng VBA hén? Tui chưa hiểu được những gì Sanbi viết.
Nếu bạn muốn tham khảo thêm VBA thì bạn xem ví dụ dưới đây:

Bạn để ý S_ viết tắc cho Sanbi_ , nếu bạn hay tận dụng các hàm do tôi viết, bạn sẽ quen.
------------------------------
Cảm ơn bạn. Mình chưa hiểu được những gì bạn viết, bạn thông cảm. :(

@huuthang_bd , @n0thing1988 : nếu đụng đến VBA thì định dạng file đâu còn là đuôi xlsx phải không? Nó chuyển sang thành xlam, xlsb, xlsm. Mà như vậy nó sẽ "khác" với định dạng chung xưa giờ của file Bảng lương năm này qua năm nọ của Công ty á. File này mình làm trực tiếp nhưng sau đó có ít nhất 5 người nữa (đa phần là cấp trên) xem qua.
Sao mình ngồi nghiệm nghiệm mà chưa ra giải pháp ta?!

Hiện tại mình đang xử lý thủ công ở cột K bằng cách sau: phủ khối dòng công thức bên cột B, sang cột K paste và Enter 2 lần, Excel sẽ tự fix bỏ các dấu "." phân cách hàng ngàn để ra kết quả luôn. Và mình vẫn đang làm từ từ như vậy trong khi chờ giải pháp khác.
Cảm ơn mọi người nhiều.
1598574615818.png
 
@huuthang_bd , @n0thing1988 : nếu đụng đến VBA thì định dạng file đâu còn là đuôi xlsx phải không? Nó chuyển sang thành xlam, xlsb, xlsm
Không nhất thiết phải như vậy. xlam là dạng add-in, một file khác không phải file làm việc của bạn, bạn dùng nó để xử lý file làm việc của bạn và kết quả hoàn toàn giống như làm bằng tay.
Nếu rảnh rỗi sẽ có giải pháp thỏa đáng cho bạn.
 
Cảm ơn bạn. Mình chưa hiểu được những gì bạn viết, bạn thông cảm.
Các hàm trên sử dụng Biểu thức chính quy để tách chuỗi.

Sau khi copy code vào một Module:
Bác gõ vào ô K18: =S_Val1(B18) Hàm này tách công thức tính
Bác gõ vào ô L18: =S_Val2(B18) Hàm này tách kết quả
Bác gõ vào ô M18: =K18=L18

Hàm S_Val1, Có đối số làm tròn số mặc định là 0
 
Các hàm trên sử dụng Biểu thức chính quy để tách chuỗi.

Sau khi copy code vào một Module:
Bác gõ vào ô K18: =S_Val1(B18) Hàm này tách công thức tính
Bác gõ vào ô L18: =S_Val2(B18) Hàm này tách kết quả
Bác gõ vào ô M18: =K18=L18

Hàm S_Val1, Có đối số làm tròn số mặc định là 0
Đã làm y như bạn hướng dẫn. Nó ra vầy: TRUE.
1598576841373.png
Ý mình không phải vầy.

Phải y như hình bên dưới nè:
Con trỏ chuột mình đang để ở ô K18. Bạn xem trên thanh công thức á. Nó phải có dòng:
=1013030*20/78/5,34*1+1013030*33/78/4,34*1
1598576967022.png
 

File đính kèm

  • 1598576785347.png
    1598576785347.png
    377.5 KB · Đọc: 5
Hiện tại mình đang xử lý thủ công ở cột K bằng cách sau: phủ khối dòng công thức bên cột B, sang cột K paste và Enter 2 lần, Excel sẽ tự fix bỏ các dấu "." phân cách hàng ngàn để ra kết quả luôn. Và mình vẫn đang làm từ từ như vậy trong khi chờ giải pháp khác.
Cảm ơn mọi người nhiều.
Ồ bạn muốn cột K hiện như vậy thì chịu rồi. Vì nếu dùng hàm thì nó ra kết quả luôn, chứ nó không có hiện được như thế.

Tôi có thử làm theo chỗ màu đỏ của bạn thì không tự bỏ dấu "." dấu "," đâu
 
Ồ bạn muốn cột K hiện như vậy thì chịu rồi. Vì nếu dùng hàm thì nó ra kết quả luôn, chứ nó không có hiện được như thế.

Tôi có thử làm theo chỗ màu đỏ của bạn thì không tự bỏ dấu "." dấu "," đâu
Bởi vậy, từ đầu Topic tới giờ có anh @huuthang_bd là hiểu ý tui đó.

Đâu, máy tui Office 2016 nó tự fix được nè, fix bỏ dấu "." hà, dấu "," đúng mà đâu cần bỏ. Máy tui định dạng gõ dấu "." bên bàn phím số nó sẽ ra dấu "," và đối số ngăn công thức là dấu ";".
@n0thing1988 xem nè: auto correct á.
1598580122680.png

Chia lương, tính lương đã cực. Mà ghi chú cột B với cột K còn cực hơn. (hông có than nhưng mà cũng giống than thiệt :D )
Chủ yếu cột B ghi chú á, tui thường bị bắt lỗi sai cột đó, vì ghi chú nhiều riết quáng. Kiểm đi kiểm lại 2-3 lần vẫn có sai sót.
 
Bởi vậy, từ đầu Topic tới giờ có anh @huuthang_bd là hiểu ý tui đó.

Đâu, máy tui Office 2016 nó tự fix được nè, fix bỏ dấu "." hà, dấu "," đúng mà đâu cần bỏ. Máy tui định dạng gõ dấu "." bên bàn phím số nó sẽ ra dấu "," và đối số ngăn công thức là dấu ";".
@n0thing1988 xem nè: auto correct á.
View attachment 244296

Chia lương, tính lương đã cực. Mà ghi chú cột B với cột K còn cực hơn. (hông có than nhưng mà cũng giống than thiệt :D )
Chủ yếu cột B ghi chú á, tui thường bị bắt lỗi sai cột đó, vì ghi chú nhiều riết quáng. Kiểm đi kiểm lại 2-3 lần vẫn có sai sót.
Máy của tôi thì hiện như sau 1598580523563.png
 
Phải y như hình bên dưới nè:
Con trỏ chuột mình đang để ở ô K18. Bạn xem trên thanh công thức á. Nó phải có dòng:
=1013030*20/78/5,34*1+1013030*33/78/4,34*1

Vậy bây giờ bạn copy một lần nữa và thử lại với Hàm S_Val1

Hàm tự động phân biệt dấu thập phân
 
Lần chỉnh sửa cuối:
Đằng nào cũng phải nhập biểu thức tính toán, nhập vô K18 trước
Sau đó dùng hàm FORMULATEXT lấy nó ra:

Mã:
="Ô. Huy nghỉ ốm ngày 01/4, NP 3 ngày từ 02/4->05/4, ĐCTT đến CH34 từ ngày 06/4->29/4, lv 53 ngày: TL "&FORMULATEXT(K18)&"="&TEXT(I12,"0,000")&"đ"
 
Không muốn dùng VBA bạn có thể tách cái chuỗi sau dấu = ra bằng công thức sau đó copy paste value sang cột K ="="&SUBSTITUTE(TRIM(MID(SUBSTITUTE("="&$B18;"=";REPT(" ";999));(LEN($B18)-LEN(SUBSTITUTE($B18;"=";"")))*999;999));".";"")
1598588442229.png
 

File đính kèm

Đúng ra bảng nó phải theo kiểu Tên|ngày bắt đầu nghỉ|ngày kết thúc nghỉ|lý do nghỉ| ....
Kiểu như vậy chứ? ai mà làm một chuỗi tùm lum vậy. lấy ra cũng khổ mà nhập vào cũng khổ
P/s: mà cty nghỉ thứ 678 thì giành ở nhà mà nghiên cứu đi chứ, hỏi chi haha
Nên lập bảng như ý bác này, liệt kê mỗi lí do một cột, cột B thì nối text qua, cột K tính lập công thức tính (công thức kiểm tra chuẩn là ok rồi).
 
Vậy bây giờ bạn copy một lần nữa và thử lại với Hàm S_Val1

Hàm tự động phân biệt dấu thập phân
Nó hiện debug rồi ! :(
Đằng nào cũng phải nhập biểu thức tính toán, nhập vô K18 trước
Sau đó dùng hàm FORMULATEXT lấy nó ra:

Mã:
="Ô. Huy nghỉ ốm ngày 01/4, NP 3 ngày từ 02/4->05/4, ĐCTT đến CH34 từ ngày 06/4->29/4, lv 53 ngày: TL "&FORMULATEXT(K18)&"="&TEXT(I12,"0,000")&"đ"
Cảm ơn bạn rất nhiều. Nhưng làm như bạn sẽ vẫn chậm hơn là hiện tại mình làm thủ công vầy nè:
"Hiện tại mình đang xử lý thủ công ở cột K bằng cách sau: phủ khối dòng công thức bên cột B, sang cột K paste và Enter 2 lần, Excel sẽ tự fix bỏ các dấu "." phân cách hàng ngàn để ra kết quả luôn. Và mình vẫn đang làm từ từ như vậy trong khi chờ giải pháp khác."
=> Nghĩa là mình ghi chú cột B trước, xong mình copy dòng công thức, paste sang cột K, Enter 2 lần là ra y như mong muốn của mình.
Không muốn dùng VBA bạn có thể tách cái chuỗi sau dấu = ra bằng công thức sau đó copy paste value sang cột K ="="&SUBSTITUTE(TRIM(MID(SUBSTITUTE("="&$B18;"=";REPT(" ";999));(LEN($B18)-LEN(SUBSTITUTE($B18;"=";"")))*999;999));".";"")
View attachment 244321
Mình làm theo thì nó hiện ra nguyên cái chuỗi, chứ không hiện kết quả. Nghĩa là copy paste value sang cột K xong ngay đó nó hiểu là 1 cái chuỗi là 1 dòng công thức có dấu "=" ở đầu tiên.
Nên lập bảng như ý bác này, liệt kê mỗi lí do một cột, cột B thì nối text qua, cột K tính lập công thức tính (công thức kiểm tra chuẩn là ok rồi).
Ý là xử lý ghi chú ở cột B hén. Mình cũng nghĩ tới hướng này. Nghĩa là mình phải tập hợp 50 file là 50 Bảng chấm công của 50 Cửa hàng để tổng hợp lại thành 1 file/1sheet chấm công. Sau đó sẽ xử lý cái mớ ngày công, ngày phép các kiểu trong đây. Hiện tại mình đang chưa làm được việc này. :(
Xong giai đoạn 1, tạm thời thế này đã.
Em vô thì thấy mấy chữ BÓ TAY !!! Em không hiểu gì luôn. Alt-F11 xem thì càng... bó tay :)

Cảm ơn mọi người lắm lắm luôn.
Làm thủ công sáng giờ cũng xong, bị dí phải làm xong trong hôm nay nên không xem bài của mọi người kịp. Để nghiên cứu tiếp. Chứ tháng nào, quý nào mình cũng làm 2-3 Bảng lương dạng này hết á (lương tháng, thưởng quý theo sản lượng, giảm trừ quý theo sản lượng đều có cột B, cột K như này) .
 
Bạn tích vào từng ô xong bấm enter là được vì nó đàn hiểu là chuỗi. Nó sẽ nhanh hơn là cop trong cột B ra
 
Bạn tích vào từng ô xong bấm enter là được vì nó đàn hiểu là chuỗi. Nó sẽ nhanh hơn là cop trong cột B ra
Enter xong nó cũng không thay đổi gì luôn á. Chuỗi vẫn còn đó như bên dưới nè.
1598608108467.png

Kích vô ô rồi Enter thấy hết BÓ TAY !!! đấy o_O
Đang làm theo mà chưa có được nè.

Vậy chắc bó tay rồi. Add in hoàn chỉnh như video. Nhưng tháng này làm xong rồi, đến kỳ lương tháng sau ta lại trao đổi tiếp :D

Em đang xem clip nóng này. Hay quá chừng quá đất, nhưng em chưa tự áp dụng được. Hay tại em chưa cài cái nút Thần chú "Ba cái đồ yêu. Xong rồi đó!" ????
1 là nó hiện chữ BÓ TAY !!!, 2 là nó lỗi Value!
 
Add-in trên máy tôi thì làm sao bạn áp dụng được :D. Bài #15 tôi nói là xong giai đoạn 1 mà.
Giai đoạn 1 là có cái hàm như trong video đó bạn, chưa có nút. Chưa biết vì sao máy bạn bị lỗi.
 
Add-in trên máy tôi thì làm sao bạn áp dụng được :D. Bài #15 tôi nói là xong giai đoạn 1 mà.
Giai đoạn 1 là có cái hàm như trong video đó bạn, chưa có nút. Chưa biết vì sao máy bạn bị lỗi.
Nếu được như clip của anh em thấy ngon rồi mà ta. Sao anh nói mới giai đoạn 1?
Bên máy em nó vầy nè.
Mới mở lên thì thấy vầy nha, chắc vầy mới đúng:
1598609976659.png

Sau khi em nhấn Update, hoặc nhấn Don't Update, hoặc nhấn dấu X hộp thoại này thì nó hiện ra chữ BÓ TAY!!! Em click vào ô đó nhấn Enter lại nó cũng hiện chữ BÓ TAY!!! như bên dưới:
1598610076969.png

Em Alt-F11 vào tìm sao không thấy chữ BÓ TAY ở đâu????!!
 
Giai đoạn 1 là gửi lên GPE rồi (bài #15) còn "ngon rồi" hiện vẫn ở trên máy tôi :D
BÓ TAY có thể là do máy bạn cài đặt định dạng hệ thống có dấu phân cách thập phân là dấu phẩy (,)
 
Evaluate là làm đươc theo yêu cầu của bạn ngay. Nhưng như anh Thắng nói đúng. Kế toán muốn kiểm tra thì để tự họ nghĩ công thức. Chứ bạn làm công thức cho họ xong rồi họ cũng biết đúng sai đâu.
Bài #15 là của @n0thing1988 mà anh.
Xong giai đoạn 1, tạm thời thế này đã.
Anh nói bài #30 này của anh phải không? Bài anh upload file XYZ.xlsm đó hả?
Bài đã được tự động gộp:

Giai đoạn 1 là gửi lên GPE rồi (bài #15) còn "ngon rồi" hiện vẫn ở trên máy tôi :D
BÓ TAY có thể là do máy bạn cài đặt định dạng hệ thống có dấu phân cách thập phân là dấu phẩy (,)
Dám lắm à nha.
 
Mình viết công thức ở cột M copy paste value sang cột L và tích vào từng ô ở cột L để thành phép tính mà
 
File ví dụ cho bạn, các hàm tự động phân biệt dấu công thức và dấu thập phân.
 

File đính kèm

@hongtrang26 , @n0thing1988 : cảm ơn 2 bạn rất nhiều, 2 bạn đã giải quyết được 99% bài toán này. Quá tốt luôn rồi!
Cột K đúng yêu cầu đề bài. Và mình quyết định giữ luôn cột L vì nó tường minh cho bên Kế toán kiểm tra chéo. Còn bản giấy in ra tất nhiên chỉ in đến hết cột J. :)
1599101889286.png

@huuthang_bd , @HeSanbi : cảm ơn 2 anh rất nhiều luôn. VBA tuyệt vời. Nhưng ở đây có lẽ em sẽ chưa dùng đến ! :)
 
Công thức của @hongtrang26
Mã:
="="&MID(SUBSTITUTE("="&$B2;"=";REPT(" ";999));(LEN($B2)-LEN(SUBSTITUTE($B2;"=";"")))*999;999)

Công thức của @n0thing1988 :
Mã:
=MID(B2,FIND("zzz",SUBSTITUTE(B2,"=","zzz",1)),FIND("=",SUBSTITUTE(B2,"=","zzz",1))-FIND("zzz",SUBSTITUTE(B2,"=","zzz",1))-3)

Từ ý tưởng 2 công thức trên của 2 bạn, tui tự chế ra công thức của tui luôn nè (hông dùng Substitute với Rept để xử lý chuỗi, hi):
Mã:
=MID(B2;FIND("=";B2);FIND("=";B2;FIND("=";B2)+1)-FIND("=";B2))

Công thức của mình chắc hơi rừng rú. Hông biết có trường hợp nào sẽ sai không nữa.
Cả 3 công thức trên đều ra kết quả như nhau. Ồ de. Một lần nữa, cám ơn 2 bạn.
 
Công thức của @hongtrang26
Mã:
="="&MID(SUBSTITUTE("="&$B2;"=";REPT(" ";999));(LEN($B2)-LEN(SUBSTITUTE($B2;"=";"")))*999;999)

Công thức của @n0thing1988 :
Mã:
=MID(B2,FIND("zzz",SUBSTITUTE(B2,"=","zzz",1)),FIND("=",SUBSTITUTE(B2,"=","zzz",1))-FIND("zzz",SUBSTITUTE(B2,"=","zzz",1))-3)

Từ ý tưởng 2 công thức trên của 2 bạn, tui tự chế ra công thức của tui luôn nè (hông dùng Substitute với Rept để xử lý chuỗi, hi):
Mã:
=MID(B2;FIND("=";B2);FIND("=";B2;FIND("=";B2)+1)-FIND("=";B2))

Công thức của mình chắc hơi rừng rú. Hông biết có trường hợp nào sẽ sai không nữa.
Cả 3 công thức trên đều ra kết quả như nhau. Ồ de. Một lần nữa, cám ơn 2 bạn.
Công thức 1 lấy đoạn chuỗi giữa dấu = kề cuối và dấu = cuối, lỗi khi không có dấu = nào. Công thức 2 và 3 lấy đoạn chuỗi giữa dấu = thứ 1 và thứ 2, lỗi khi có ít hơn 2 dấu =. Công thức 2 xử lý hơi rườm rà.
Mã:
=TRIM(MID(SUBSTITUTE(B2&"==","=",REPT(" ",999),999,999))
 
Anh chị cho em hỏi:
Ở cột Z em có công thức xử lý chuỗi ở cột B như sau: (đúng ý em rồi)
1599529616977.png

Sau đó em copy paste Value cột Z sang cột Y để nhấn F2, Enter để ra kết quả. Tuy nhiên trên Excel 2016 thì tốt, nó không tự động có dấu nháy đơn ' ở đầu chuỗi. Còn em sang máy khác xài Excel 2010 thì khi Paste Value sang cột Y nó tự động thêm vào dấu nháy đơn ở đầu như vầy:
1599529820709.png
Nên khi F2 trước khi Enter phải xóa dấu nháy đơn nữa.

Anh chị cho em hỏi làm sao để Copy paste Value sang mà không tự động xuất hiện dấu nháy đơn?
Không lẽ khác biệt duy nhất ở chỗ là Office 2010 và Office 2016 sao?
 

File đính kèm

  • 1599529557232.png
    1599529557232.png
    481.6 KB · Đọc: 10
Sau đó em copy paste Value cột Z sang cột Y để nhấn F2, Enter để ra kết quả. Tuy nhiên trên Excel 2016 thì tốt, nó không tự động có dấu nháy đơn ' ở đầu chuỗi. Còn em sang máy khác xài Excel 2010 thì khi Paste Value sang cột Y nó tự động thêm vào dấu nháy đơn ở đầu như vầy:
Mình gõ thử trên máy khác cài 2010 cũng đâu có xuất hiện dấu ' đâu
 
Mình gõ thử trên máy khác cài 2010 cũng đâu có xuất hiện dấu ' đâu
Bây giờ bạn thử nghiệm vầy nha:
Tại ô Y627 bạn F2, tự gõ vào dấu nháy đơn ở đầu, Enter. Xong giờ delete ô đó đi, hoặc bạn copy paste value lại từ ô Z627 sang. Bây giờ ô Y627 nó "chết" cái dấu nháy đơn ở đó luôn rồ iá. Mình nghĩ bên Excel 2010, chính xác hơn là cái máy tính kia có Format cột Y nó khác máy tính mình, mà khác sao thì mình không biết. :(
 
Bây giờ bạn thử nghiệm vầy nha:
Tại ô Y627 bạn F2, tự gõ vào dấu nháy đơn ở đầu, Enter. Xong giờ delete ô đó đi, hoặc bạn copy paste value lại từ ô Z627 sang. Bây giờ ô Y627 nó "chết" cái dấu nháy đơn ở đó luôn rồ iá. Mình nghĩ bên Excel 2010, chính xác hơn là cái máy tính kia có Format cột Y nó khác máy tính mình, mà khác sao thì mình không biết. :(
chọn cái này cho nó mất
1599536793805.png
Sao không có chỗ đăng video lên diễn đàn nhỉ quay xong không thấy chỗ đăng
 
Bạn thử vào đây coi thử xem mình làm được mà
 
Đăng lại thử cái file bạn đang dùng xem nào
 

File đính kèm

Bạn thử lại coi cái định dạng tại ô công thức của bạn mình cũng ko biết tại sao bị thế, mình quét lại định dạng xong cop như mình làm thì được, không hiểu luôn
Để đầu giờ chiều mình nghiên cứu tiếp. Mình mở file bạn mới upload lại thì thấy được đó, kỳ lạ thật.
Cảm ơn bạn nhiều nha.
 
Bạn thử lại coi cái định dạng tại ô công thức của bạn mình cũng ko biết tại sao bị thế, mình quét lại định dạng xong cop như mình làm thì được, không hiểu luôn
File bạn up thì mình down về làm giống vậy nó được.
Mình đóng lại mở file của mình thì lại không được. Không hiểu luôn á.
1599547750734.png

Để mình hỏi thử bác này xem. Cảm ơn bạn nhiều.

@ndu96081631 : bác biết hiện tượng này là nó "bị" gì không bác? Bài #47 con có trình bày á.
 
Chính thức mình cũng không hiểu cái file của bạn bị do nguyên nhân ở đâu rõ dàng mình chọn định dạng giống như nhau mà không được nhưng quét thì lại được
 
Chính thức mình cũng không hiểu cái file của bạn bị do nguyên nhân ở đâu rõ dàng mình chọn định dạng giống như nhau mà không được nhưng quét thì lại được
Mà mình cảm ơn bạn nhiều nha. Một việc "nhỏ" vậy chứ đỡ mất thời gian nhiều lắm luôn, vì làm nhiều lần lắm. Máy mình 2016 thì ngon rồi. Nhưng tại khi mình chép qua máy 2010 (máy tính ở nhà mình cũng 2010) là nó bị vụ "dấu nháy đơn" nên hơi khó chịu. Chắc phải update cho tụi nó lên 2016 hết quá. :D
 
Mà mình cảm ơn bạn nhiều nha. Một việc "nhỏ" vậy chứ đỡ mất thời gian nhiều lắm luôn, vì làm nhiều lần lắm. Máy mình 2016 thì ngon rồi. Nhưng tại khi mình chép qua máy 2010 (máy tính ở nhà mình cũng 2010) là nó bị vụ "dấu nháy đơn" nên hơi khó chịu. Chắc phải update cho tụi nó lên 2016 hết quá. :D
Bạn quét định dạng thử như mình làm ở video thứ 2 trên file của bạn xem có được không chứ không phải sửa ở ô công thức
 
Bạn quét định dạng thử như mình làm ở video thứ 2 trên file của bạn xem có được không chứ không phải sửa ở ô công thức
Format Painting mình có thử rồi. Nó vẫn còn "vướng" dấu nháy đơn á, không có mất.
Mà bạn hiểu tại sao có cái sự copy paste value sang cái nó tự động thêm vào dấu nháy đơn ở đầu không? Mình biết chỗ nào thiết lập sự auto này thì mình bỏ cái là xong. :D
 
Công thức 1 lấy đoạn chuỗi giữa dấu = kề cuối và dấu = cuối, lỗi khi không có dấu = nào. Công thức 2 và 3 lấy đoạn chuỗi giữa dấu = thứ 1 và thứ 2, lỗi khi có ít hơn 2 dấu =. Công thức 2 xử lý hơi rườm rà.
Mã:
=TRIM(MID(SUBSTITUTE(B2&"==","=",REPT(" ",999),999,999))
Hôm nay em có quay lại bài này 1 xíu. Em có thử công thức này của anh (vì thấy nó quá gọn) nhưng nó báo lỗi chỗ 999 như sau:
1602032579086.png
Sao công thức của bạn @hongtrang26 cũng có Rept và 999 nhưng không bị lỗi này? Em sử dụng Excel 2016.
 

File đính kèm

  • 1602032563017.png
    1602032563017.png
    457.8 KB · Đọc: 3
Hôm nay em có quay lại bài này 1 xíu. Em có thử công thức này của anh (vì thấy nó quá gọn) nhưng nó báo lỗi chỗ 999 như sau:
View attachment 246912
Sao công thức của bạn @hongtrang26 cũng có Rept và 999 nhưng không bị lỗi này? Em sử dụng Excel 2016.
Vấn đề nằm ở dấu ngoặc ")"
Bài đã được tự động gộp:

Vấn đề nằm ở dấu ngoặc ")"
Còn vị trí ở đâu thì tự nghiên cứu nhé :D
 
Hôm nay em có quay lại bài này 1 xíu. Em có thử công thức này của anh (vì thấy nó quá gọn) nhưng nó báo lỗi chỗ 999 như sau:
View attachment 246912
Sao công thức của bạn @hongtrang26 cũng có Rept và 999 nhưng không bị lỗi này? Em sử dụng Excel 2016.
Hôm đó tôi trả lời bằng điện thoại nên không phát hiện ra lỗi. Công thức đó bị thiếu 1 dấu ngoặc (màu đỏ).
Rich (BB code):
=TRIM(MID(SUBSTITUTE(B2&"==","=",REPT(" ",999)),999,999))
 
Mã:
=TRIM(MID(SUBSTITUTE(B2&"==","=",REPT(" ",999)),999,999))
Em áp dụng công thức trên ra kết quả đúng luôn rồi. Cảm ơn anh.

@Nhattanktnn : tớ hỏi cậu để khỏi hỏi thầy huuthang điều này vì còn hơi vướng vướng:
Ở công thức trên tại sao lại thim 2 dấu "=" vào cuối chuỗi vậy? Thêm 1 dấu hoặc không thêm tớ thấy kết quả cũng ra y chang. Với cả chỗ đối số trong hàm Rept á, tại sao lại là 999 mà không phải là 1 số khác nhỏ nhẹ nhàng hơn? Trong chuỗi dữ liệu của tớ luôn có tối thiểu là 2 dấu "=", lại thêm 2 dấu "=" nữa thành ra là 4. Mà mỗi dấu "=" được thay bằng 999 " " thành 1 chuỗi dài cả cây số luôn thì có làm trì trệ công thức và cả bảng tính Excel không?
:oops:
 
Mã:
=TRIM(MID(SUBSTITUTE(B2&"==","=",REPT(" ",999)),999,999))
Em áp dụng công thức trên ra kết quả đúng luôn rồi. Cảm ơn anh.

@Nhattanktnn : tớ hỏi cậu để khỏi hỏi thầy huuthang điều này vì còn hơi vướng vướng:
Ở công thức trên tại sao lại thim 2 dấu "=" vào cuối chuỗi vậy? Thêm 1 dấu hoặc không thêm tớ thấy kết quả cũng ra y chang. Với cả chỗ đối số trong hàm Rept á, tại sao lại là 999 mà không phải là 1 số khác nhỏ nhẹ nhàng hơn? Trong chuỗi dữ liệu của tớ luôn có tối thiểu là 2 dấu "=", lại thêm 2 dấu "=" nữa thành ra là 4. Mà mỗi dấu "=" được thay bằng 999 " " thì có làm trì trệ công thức và cả bảng tính Excel không?
:oops:
Mấy bài trước đã đọc đâu =)), Công thức này đang xử lý cho bài # mấy vậy? hoặc bác đưa ví dụ lên em xem sao
 
Úy, ngay bài #1 luôn mà.
1/ 999 là con số đủ lớn vì không xác định được chuỗi của bác trước dấu = có độ dài bao nhiêu, nếu lấy tầm 100 mà trước dấu = là 200 ký tự aaa... chẳng hạn thì khi dùng mid từ 100 sẽ có kết quả kiểu "aa 1*2*2 " chẳng hạn. Sau đó trim sẽ không loại được phần đầu (vì không có khoảng trắng mà nó dính chữ a).
2/ Còn "==" thì em cũng không rõ ý đồ bác ấy là gì cả (như em thì em để SUBSTITUTE(B2,...)
 
tại sao lại thim 2 dấu "=" vào cuối chuỗi vậy?
Không thêm cũng không ảnh hưởng gì đến kết quả cả.
Lý do công thức nối thêm 2 dấu "=": Như đã nói, tôi trả lời trên điện thoại, viết công thức chay (không có excel), tôi không nhớ là hàm MID có trả về lỗi khi vị trí cắt lớn hơn độ dài chuỗi hay không (Ví dụ chuỗi có 2 ký tự mà bảo cắt 1000 ký tự từ ký tự thứ 100) nên thêm vào để tránh lỗi (nếu có).
 
@Nhattanktnn : cảm ơn cậu, mà sao cậu không giúp tớ giải đáp cái ý bên dưới luôn?

Công thức này tớ fill xuống hơn 1000 dòng á.
1/ bác nên bỏ bớt 2 dấu bằng phía sau đi.
2/ công thức này nó chỉ tham chiếu tới 1 cell, cho nên theo em biết, fill 1000 dòng phép tính này không có vấn đề gì. Chỉ tham chiếu tới mảng thì mới làm cho phép tính trở nên chậm chạp.
Tất nhiên là em chưa test thử =)))
 

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

Back
Top Bottom