minhnc
Nguyễn Công Minh
- Tham gia
- 13/1/07
- Bài viết
- 160
- Được thích
- 490
- Nghề nghiệp
- Lang thang
cell D4 có dữ liệu: 2 người/3500000 đồng/tháng/1 ngườiminhnc đã viết:Tôi đang có 1 bảng tính, chỉ dùng công thức nhân thông thường nhưng vướng cái là cột số lượng và đơn giá bao gồm cả số và chữ, Nhưng tôi muốn cột thành tiền chỉ nhân số số tại 2 cột đó (xem file đính kèm). Mong mọi người giúp đỡ
2 người * 3500000 đồng/tháng/người
Hey!hoặc là 2 người*3500000 đồng/tháng/ người ???



Bạn nên bố trí lại số liệu bảng tính của bạn cho hợp lý xong tính toán bình thường là được, làm sao phải tự làm khó vậy.minhnc đã viết:Tôi đang có 1 bảng tính, chỉ dùng công thức nhân thông thường nhưng vướng cái là cột số lượng và đơn giá bao gồm cả số và chữ, Nhưng tôi muốn cột thành tiền chỉ nhân số số tại 2 cột đó (xem file đính kèm). Mong mọi người giúp đỡ
Công việc ko lặp đi lặp lại nhiều lần. Hiện tại mình đang dùng mỗi phép nhân, nếu có thể mọi người giải quyết triệt để làm sao có thể thực hiện được tất cả các công thức,tigertiger đã viết:cell D4 có dữ liệu: 2 người/3500000 đồng/tháng/1 người
thường thì tôi làm thế này thêm các ô phụ Vd: như F4=2,G4="người",H4=3500000,.... sau đó ô D4=F4&G4&H4&.... -> như thế khi này ta có thể dàng dùng phép nhân
cho hỏi thêm bạn:
+ D4= 2 người/3500000 đồng/tháng/1 người chính xác phải là 2 người * 3500000 đồng/tháng/người hoặc là 2 người*3500000 đồng/1 tháng/ 1 người ???
+ Liệu chỉ có phép nhân ko hay có khi lại có các phép tính khác như *, +, - vvv.. khi đó bài toán lại khác (chắc tôi đoán chỉ có phép nhân và chia thôi nhỉ) ???
+ Một điều nữa, đó là bạn có lặp đi lặp lại công việc này nhiều k? trong file bạn thường xử lý có nhiều dòng số liệu k? -> vì như thế cân nhắc có cần giải pháp triệt để hay chỉ một phần (chẳng hạn chỉ tách sô -> sau đó xử lý bước 2 bằng thao tác khác), tức là xét đến sự khả thi của giải pháp
+ cuối cùng là mong bạn mô tả rõ hơn và các trường hợp số liệu có thể xảy ra
0906732617 đã viết:Đơn giản nhất là FORMAT CUSTOM, thực hiện ghép chuỗi " &". sao này chỉ cần gõ con số, thì ô đó sẽ hiện đủ cả số lẫn chữ. Lúc này tính toán rất dễ dàng.Mặc dù hiện cả số và chữ nhưng ô đó vẫn là NUMBER.
Nguyễn Hương Thơm đã viết:Nhưng nếu dữ liệu của bạn đó không đồng nhất về ký tự thì làm sao mà dùng đc format custom như bạn nói đc. Theo mình nên tổ chức dữ liệu lại thì tốt hơn
+ minhnc cho biết: trên thực tế có còn nhiều loại đơn vị ko? và các đơn vị này có thường thống nhất theo chuẩn nào k?minhnc đã viết:Công việc ko lặp đi lặp lại nhiều lần. Hiện tại mình đang dùng mỗi phép nhân, nếu có thể mọi người giải quyết triệt để làm sao có thể thực hiện được tất cả các công thức,
Cảm ơn mọi người!







Tất nhiên một bài toán khó mới hay nhưng nó phải có một cái gì đó để ta định hướng giải quyết. Như file của bạn đưa lên ở cột đơn giá nó không có một quy luật hay một cái gì đó mà ta bám vào. Ở ô D4 đó nó như là một diễn giải.minhnc đã viết:Như salam thì ko nói làm gì.
Vì nội dung công việc khác nhau dẫn đến số lượng, đơn giá khác do vậy Tôi nghĩ chỉ có cách là làm sao để tác được số trong các cột C và D, sau đó dùng công thức. Mong mọi người bàn và giúp đỡ tiếp.
Oh, chắc bạn minhnc viết nhầm 2 người/350000 đồng / ... phải chính xác là 2 người * 35000 đồng /... như thế thì mới tính đượcsalam đã viết:Tất nhiên một bài toán khó mới hay nhưng nó phải có một cái gì đó để ta định hướng giải quyết. Như file của bạn đưa lên ở cột đơn giá nó không có một quy luật hay một cái gì đó mà ta bám vào. Ở ô D4 đó nó như là một diễn giải.
2 người/350000 đồng .... 1/tháng có ý là 3500000*2 người * số tháng 2.5 =
anhtuan1066 đã viết:Tôi thì ko sợ đơn vị ko đồng nhất... mà ngán nhất cell D4..
Tôi nghĩ trong file thực tế chắc còn rất nhiều cái lộn xộn tương tự thế: Dấu / có khi hiểu là chia, nhưng có khi lại phải hiểu là nhân mới ác... vân vân và vân vân...
Thế thì đâu là nguyên tắc đễ ta bám vào nhỉ?
ANH TUẤN
Public Function GiaTri(StringTinhToan As String, Optional DauPcach000 = ",") As Double
Application.Volatile
Dim RgnDM As Range, iI As Integer, Dvi
StringTinhToan = Replace(StringTinhToan, " ", ""): StringTinhToan = UCase(StringTinhToan)
Set RgnDM = Range("DM")
For Each Dvi In RgnDM: StringTinhToan = Replace(StringTinhToan, UCase(Dvi.Value), ""): Next
StringTinhToan = Trim(Replace(StringTinhToan, "X", "*"))
StringTinhToan = Replace(StringTinhToan, DauPcach000, "")
If DauPcach000 = "." Then StringTinhToan = Replace(StringTinhToan, ",", ".")
If StringTinhToan = "1" Then StringTinhToan = "1*1"
GiaTri = Evaluate(StringTinhToan)
End Function
Public Function Gtri(Dulieu As String, Optional Pcach = ",")
If Len(Dulieu) = 0 Then Exit Function
For i = 1 To Len(Dulieu)
If Pcach = "." Then
If Mid(Dulieu, i, 1) = "," Then temp = temp & "."
Else
If Mid(Dulieu, i, 1) = "." Then temp = temp & "."
End If
If Mid(Dulieu, i, 1) = "x" Then temp = temp & "*"
If Mid(Dulieu, i, 1) = ":" Then temp = temp & "/"
Select Case Mid(Dulieu, i, 1)
Case "+", "-", "*", "/", "(", ")", 0 To 9
temp = temp & Mid(Dulieu, i, 1)
End Select
Next
For i = 1 To Len(Dulieu)
If Right(temp, 1) = "-" Or Right(temp, 1) = "+" _
Or Right(temp, 1) = "*" Or Right(temp, 1) = "/" Then _
temp = Left(temp, Len(temp) - 1)
Next
Gtri = Evaluate(temp)
End Function
minhlev đã viết:Dựa vào code của bác TigerTiger, tôi cũng xin mạnh dạn góp 1 hàm tính toán. Hàm của tôi không cần đến thư viện. Khi áp dụng vào file của bác TigerTiger thì thấy kết quả ra cũng đúng. Do chưa thử hết tất cả các trường hợp nên không biết hàm của tôi có lỗi gì hay không. Nhờ các bác kiểm tra giúp.
PHP:Public Function Gtri(Dulieu As String, Optional Pcach = ",") If Len(Dulieu) = 0 Then Exit Function For i = 1 To Len(Dulieu) If Pcach = "." Then If Mid(Dulieu, i, 1) = "," Then temp = temp & "." Else If Mid(Dulieu, i, 1) = "." Then temp = temp & "." End If If Mid(Dulieu, i, 1) = "x" Then temp = temp & "*" If Mid(Dulieu, i, 1) = ":" Then temp = temp & "/" Select Case Mid(Dulieu, i, 1) Case "+", "-", "*", "/", "(", ")", 0 To 9 temp = temp & Mid(Dulieu, i, 1) End Select Next For i = 1 To Len(Dulieu) If Right(temp, 1) = "-" Or Right(temp, 1) = "+" _ Or Right(temp, 1) = "*" Or Right(temp, 1) = "/" Then _ temp = Left(temp, Len(temp) - 1) Next Gtri = Evaluate(temp) End Function
Public Function Gtr(Dulieu As String, Optional Pcach = ",")
If Len(Dulieu) = 0 Then Exit Function
Dulieu = Replace(Dulieu, Pcach, "")
Dulieu = Replace(Dulieu, ",", ".")
For i = 1 To Len(Dulieu)
Select Case Mid(Dulieu, i, 1)
Case "x": temp = temp & "*"
Case ":": temp = temp & "/"
Case "+", "-", "*", "/", "(", ")", 0 To 9: temp = temp & Mid(Dulieu, i, 1)
End Select
Next i
For i = 1 To Len(Dulieu)
If Right(temp, 1) = "-" Or Right(temp, 1) = "+" _
Or Right(temp, 1) = "*" Or Right(temp, 1) = "/" Then _
temp = Left(temp, Len(temp) - 1)
Next
Gtr = Evaluate(temp)
End Function
Public Function Gtr(Dulieu As String, Optional Pcach = ",")
Dim i, temp
If Len(Dulieu) = 0 Then Exit Function
Dulieu = Replace(Dulieu, Pcach, "")
Dulieu = Replace(Dulieu, ",", ".")
For i = 1 To Len(Dulieu)
Select Case Mid(Dulieu, i, 1)
Case "x": temp = temp & "*"
Case ":": temp = temp & "/"
Case "+", "-", "*", "/", "(", ")", ".", 0 To 9: temp = temp & Mid(Dulieu, i, 1)
End Select
Next i
For i = 1 To Len(Dulieu)
Select Case Right(temp, 1)
Case "-", "+", "*", "/": temp = Left(temp, Len(temp) - 1)
End Select
Next
Gtr = Evaluate(temp)
End Function
Đúng là mấy thằng nước ngoài thì làm hay rồi, nhưng không có gì họ làm đượ mà mình không thể chỉ có điều mình có chịu làm không thôi.minhnc đã viết:Cảm ơn tigertiger nhiều. Sau khi anh post bài tôi có nhấn nút thank và có 1 bài viết về vấn đề này, ko hiểu sao mấy hôm quay lại chỉ thấy nút thạnk được còn bài viết ko thấy đâu????
Thục sự là rất cảm ơn mọi người đã rất nhiệt tình giải quyết 1 vấn đề mà lâu nay tôi nghĩ chỉ có mấy anh Trung Quốc mới làm được, Là thế này, tôi thấy bảng chào thầu của thằng tàu nó cũng có bảng như thế, ko hiều sao?? . Nhưng ở GFE mọi người đã giải quyết được vấn đề 1 cách triệt để. Chỉ có điều là thêm 1 sheet thư viện nữa. Trong file của thằng TQ ko có điều đó mà nó vẫn làm được, có thể xong rồi nó chỉ copy number thôi.
Lần nữa cảm ơn mọi người, đặc biệt là tigertiger nhiều nhiều.>@@@@
