Hỏi cách tính tổng số ngày với 2 giá trị ngày để tính bị định dạng không đồng nhất (1 người xem)

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

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

Zoids

Thành viên mới
Tham gia
12/3/12
Bài viết
2
Được thích
0
Em có 1 file excel cần tính số ngày nằm viện của bệnh nhân nhưng 2 giá trị ngày vào viện và ngày ra viện bị định dạng lung tung, lúc thì dạng text lúc thì dạng date, lúc thì lộn dạng mm/dd/yyyy va dd/mm/yyyy.

Công thức thì em coi thấy có hàm DATEDIF và công thức A1-B1 thì ra nhưng kẹt 1 cái là những ô khác định dạng nó lại báo là value

Em có thử mấy cách chỉnh region trong controlpanel và dạng trục phải format cell rồi, dùng hàm left(text() và copy qua file khác máy khác luôn mà vẫn không được nên mấy anh chị chỉ giúp em cách với.

PS: em có gửi file đính kèm, ô cần tính tô màu vàng, các anh chị xem và làm thử dùm em với
 

File đính kèm

Dữ liệu cảu bạn như thế này thì tôi pó tay, các thành viên khác giúp nha.
 
Upvote 0
Với dữ liệu từ file bạn đưa lên, mình thử hướng dẫn từ xa, bạn tiến hành thử nha:

(b1) Tại [J9] bạn nhập 'Tmp1" làm tên trường; & ô fải liền kề là chuỗi 'Tmp2'

(b2)
(B2.1) Tại ô dưới liền kề [J9] ta nhập hàm =DAY(D10) & ô fải nó được chép công thức sang bằng fương thức FillRight (Chớ quan tâm đến kết quả công thức vội!)

(B2.2) Dùng chuột tô chọn 2 ô có công thức mà bạn vừa nhập & cũng dùng fương thức FillDown chép xuống đến dòng dữ liệu cuối cùng.


(b3) Bạn chép macro & hàm tự tạo sau đây vô ngăn Module 1:

PHP:
Option Explicit
Sub gpeDate()
 Dim Cls As Range, Rng As Range
 
 Set Rng = Columns("J:K").SpecialCells(xlCellTypeFormulas, 16)
 For Each Cls In Rng
    Cls.Value = ChuyenNgay(Cls.Offset(, -6).Value)
 Next Cls
End Sub

Mã:
[B]Function ChuyenNgay(sDat As String)
[/B]Const FC As String = "/"
 Dim VTr1 As Byte, VTr2 As Byte, Ng As Byte, Th As Byte, Nm As Long
 
 VTr1 = InStr(sDat, FC):            Ng = CByte(Left(sDat, VTr1 - 1))
 VTr2 = InStr(VTr1 + 1, sDat, FC):  Th = CByte(Mid(sDat, VTr1 + 1, VTr2 - VTr1 - 1))
 Nm = CLng(Mid(sDat, VTr2 + 1, 4))
 ChuyenNgay = DateSerial(Nm, Th, Ng)
[B]End Function
[/B]


(b4) Cho chạy macro để những ô báo lỗi nhận trị mới;

/(/hững mong là khỏi đưa file lên!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
(b1) Tại [J9] bạn nhập 'Tmp1" làm tên trường; & ô fải liền kề là chuỗi 'Tmp2'

(b2)
(B2.1) Tại ô dưới liền kề [J9] ta nhập hàm =DAY(D10) & ô fải nó được chép công thức sang bằng fương thức FillRight (Chớ quan tâm đến kết quả công thức vội!)

(B2.2) Dùng chuột tô chọn 2 ô có công thức mà bạn vừa nhập & cũng dùng fương thức FillDown chép xuống đến dòng dữ liệu cuối cùng.


(b3) Bạn chép macro & hàm tự tạo sau đây vô ngăn Module 1:

PHP:
Option Explicit
Sub gpeDate()
 Dim Cls As Range, Rng As Range
 
 Set Rng = Columns("J:K").SpecialCells(xlCellTypeFormulas, 16)
 For Each Cls In Rng
    Cls.Value = ChuyenNgay(Cls.Offset(, -6).Value)
 Next Cls
End Sub

Mã:
[B]Function ChuyenNgay(sDat As String)
[/B]Const FC As String = "/"
 Dim VTr1 As Byte, VTr2 As Byte, Ng As Byte, Th As Byte, Nm As Long
 
 VTr1 = InStr(sDat, FC):            Ng = CByte(Left(sDat, VTr1 - 1))
 VTr2 = InStr(VTr1 + 1, sDat, FC):  Th = CByte(Mid(sDat, VTr1 + 1, VTr2 - VTr1 - 1))
 Nm = CLng(Mid(sDat, VTr2 + 1, 4))
 ChuyenNgay = DateSerial(Nm, Th, Ng)
[B]End Function
[/B]


(b4) Cho chạy macro để những ô báo lỗi nhận trị mới;

/(/hững mong là khỏi đưa file lên!

Mình làm theo cách của bạn thì ra được những ô ngày định dạng text còn những ô ngày định dạng là Date thì chỉ ra được kết quả ngày của ô giá trị D10 thôi (hiện ra số 1, 4, 5,...) nên đối với những ô dạng Date mình dùng hàm =LEFT(TEXT(D11,"dd/mm/yyyy"),10) nhưng phải paste vô từng ô rất lâu mà số liệu bệnh nhân ở BV rất nhiều không thể paste nổi, không biết bạn còn cách nào chỉnh sửa để ra nốt chỗ cuối này không?

-->huyhoang1768: mình không hiểu rõ cách của bạn lắm nhưng mình làm cũng không ra, cảm ơn bạn
 
Upvote 0
Mình làm theo cách của bạn thì ra được những ô ngày định dạng text còn những ô ngày định dạng là Date thì chỉ ra được kết quả ngày của ô giá trị D10 thôi (hiện ra số 1, 4, 5,...) nên đối với những ô dạng Date mình dùng hàm =LEFT(TEXT(D11,"dd/mm/yyyy"),10) nhưng phải paste vô từng ô rất lâu mà số liệu bệnh nhân ở BV rất nhiều không thể paste nổi, không biết bạn còn cách nào chỉnh sửa để ra nốt chỗ cuối này không?

Bạn thay bước 2.2 có nội dung:
[thongbao](B2.1) Tại ô dưới liền kề [J9] ta nhập hàm =DAY(D10) & ô fải nó được chép công thức sang bằng fương thức FillRight (Chớ quan tâm đến kết quả công thức vội!)
[/thongbao]

bằng nội dung sau:
B2.1 Tại ô dưới liền kề ta nhập hàm =DATE(YEAR(D10),MONTH(D10),DAY(D10)) & ô fải liền kề được . . . . .

(Lúc đó nơi nào dữ liệu kiểu Date sẽ giữ nguyên, khỏi cho macro rờ tới như trên)

Bạn tiếp đi nha & chúc thành công
 
Upvote 0

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

Back
Top Bottom