Custom Format cells với dữ liệu ngày tháng ?

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Mình muốn tạo một cột ngày trong tháng để phục vụ cho một số công việc.
Vd: khi chọn tháng 1 thì trong cột xuất hiện từ ngày 1 đến ngày 31; khi chọn tháng 2 thì trong cột xuất hiện từ ngày 1 đến ngày 28...

Hiện tại mình đã làm được bằng công thức nhưng dữ liệu ngày không sử dụng được với Cutom Format cells (xem file đính kèm)

Bạn nào biết giúp mình với. Xin cảm ơn !
 

File đính kèm

Em thì dùng VBA. Bác xem thử nha!
Thân.
 

File đính kèm

Cũng chỉ là format cell, nhưng sửa công thức lại 1 tí để cho kết quả là ngày:
G3 = IF (LEN(TEXT(ROW(G3)-2&"/"&G$2;"dd/mm/yyyy"))<5;"";DATE(2009;G$2;ROW(G3)-2))
Note:
- Trường hợp 1: số 4 riêng rẽ là tương đương với 04/01/1900 là phải rồi
- Trường hợp 2: Kết quả công thức là text thì làm sao định dạng kiểu ngày tháng được?
 

File đính kèm

Cảm ơn Po_pikachu! mình đã test thử cách cuả bạn được rôì.
File của bạn thiếu 1 tham số quan trọng, đó là YEAR (có ngày, tháng, nhưng năm mấy mới được chứ)
Bạn xem file nhé! Chỉ 1 name là đủ
Thật ra khỏi cần name nào cũng được (gán công thức trực tiếp vào Validation là xong)... nhưng tôi vẫn muốn giữ name này, phòng trường hợp ta dùng list vào sheet khác
 

File đính kèm

Cảm ơn Ndu! trúng phóc ý của mình rồi.

@ Po_pikachu: lúc mình down về test thử thì thấy được sau khi lưu lại vào máy mở ra thì lại không được, nó báo lỗi ở dòng có Calendar1 hay là do máy mình không có Calendar1 ? cách khắc phục thế nào nhỉ ?
 
Cảm ơn Ndu! trúng phóc ý của mình rồi.

@ Po_pikachu: lúc mình down về test thử thì thấy được sau khi lưu lại vào máy mở ra thì lại không được, nó báo lỗi ở dòng có Calendar1 hay là do máy mình không có Calendar1 ? cách khắc phục thế nào nhỉ ?
Nếu xài Calendar thì đâu cần tạo list
Bạn mở 1 file Excel trên, trên thanh Control Toolbox có 1 nút tên là More Control (hình cái búa)... bạn bấm vào sẽ thấy 1 list xổ xuống!.. xem thử trong list có mục Calendar Control 11 không? (đúng ra là phải có chứ nhỉ)
Còn code báo lổi thế nào, bạn đưa lên xem thử
 
Mình muốn tạo một cột ngày trong tháng để phục vụ cho một số công việc.
Vd: khi chọn tháng 1 thì trong cột xuất hiện từ ngày 1 đến ngày 31; khi chọn tháng 2 thì trong cột xuất hiện từ ngày 1 đến ngày 28...

Hiện tại mình đã làm được bằng công thức nhưng dữ liệu ngày không sử dụng được với Cutom Format cells (xem file đính kèm)

Bạn nào biết giúp mình với. Xin cảm ơn !


Xem file này được không?
 

File đính kèm

Lần chỉnh sửa cuối:
Gửi Lão Cheettitduchuynh103.

Những công thức này (tại G3):
  • [Ptm0412] =IF(LEN(TEXT(ROW(G3)-2&"/"&G$2,"dd/mm/yyyy"))<5, "", DATE(2009,G$2,ROW(G3)-2))

  • [duchuynh103] =IF(LEN(TEXT(ROW(G3)-2&"/"&G$2,"dd/mm/yyyy"))<5, "", TEXT(ROW(G3)-2&"/"&G$2,"dd/mm/yyyy"))
Đã đứng ngay tại G3 gõ công thức rồi, thì đâu cần ROW(G3) nữa? Chỉ cần ROW() thôi mà?
 
Công thức đó là của TrungChinh, chỉ "sửa 1 tí" (sic) phần bị lỗi, không sửa hết. Sửa luôn thì còn ngắn gọn hơn nữa.
 
Cảm ơn duchuynh103.
Thì ra là Cutom Format Cells "cập nhật lần cuối " @ hôm nay mới biết thêm cái này.

Nếu xài Calendar thì đâu cần tạo list
Bạn mở 1 file Excel trên, trên thanh Control Toolbox có 1 nút tên là More Control (hình cái búa)... bạn bấm vào sẽ thấy 1 list xổ xuống!.. xem thử trong list có mục Calendar Control 11 không? (đúng ra là phải có chứ nhỉ)
Còn code báo lổi thế nào, bạn đưa lên xem thử

@ Ndu: đúng là xài Calendar thì không cần tạo list, làm theo bài của bạn thì OK rồi nhưng mình muốn nghiên cứu cả cách của Po_pikachu, mình đã kiểm tra trong máy có Control 11.0 vì vậy có thể là do code mình đã sửa sai (fỉle đính kèm) bạn xem giúp mình nhé !
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
@ Ndu: đúng là xài Calendar thì không cần tạo list, làm theo bài của bạn thì OK rồi nhưng mình muốn nghiên cứu cả cách của Po_pikachu, mình đã kiểm tra trong máy có Control 11.0 vì vậy có thể là do code mình đã sửa sai (fỉle đính kèm) bạn xem giúp mình nhé !
Code đúng toàn bộ... vấn đề làm bạn chưa vẽ ra Calendar lên bảng tính ---> Vậy thôi
Bấm nút More Control trên thanh Cotrol Toolbox, chọn Calendar Control 11 rồi vẽ ra là xong!
-----------
Mạn phép sửa lại code cho gọn!
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Calendar1.Visible = (Target.Address = "$H$1")
End Sub
PHP:
Private Sub Calendar1_Click()
   [H1].Value = Calendar1
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
@ Ndu: đúng là xài Calendar thì không cần tạo list, làm theo bài của bạn thì OK rồi nhưng mình muốn nghiên cứu cả cách của Po_pikachu, mình đã kiểm tra trong máy có Control 11.0 vì vậy có thể là do code mình đã sửa sai (fỉle đính kèm) bạn xem giúp mình nhé !
Phần lỗi thì bác NDU đã chỉ rồi. Chỉ là do chưa có Calendar1 thôi.
Còn phần code nếu muốn có thêm phần text thì viết như vầy sẽ ngắn hơn.
PHP:
Private Sub Calendar1_Click()
   [H1].Value = "Cap nhat ngay " & Format(Calendar1, "dd/mm/yyyy")
   Calendar1.Visible = False
   [H2].Select
End Sub
Thân.
 
Phần lỗi thì bác NDU đã chỉ rồi. Chỉ là do chưa có Calendar1 thôi.
Còn phần code nếu muốn có thêm phần text thì viết như vầy sẽ ngắn hơn.
PHP:
Private Sub Calendar1_Click()
   [H1].Value = "Cap nhat ngay " & Format(Calendar1, "dd/mm/yyyy")
   Calendar1.Visible = False
   [H2].Select
End Sub
Thân.
Theo tôi không nên thêm TEXT vào... (sẽ không tính toán được) ---> Phần này nên "giao" cho Custom Format làm (như trong file đính kèm của tôi đã làm ấy)
 
Tôi muốn sửa ActiveCell.Select code này
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Calendar1.Visible = ActiveCell.Select
End Sub
Private Sub Calendar1_Click()
   ActiveCell.Value = Calendar1
   Calendar1.Visible = falde
End Sub
Để code này chỉ chạy khi chọn 1 ô trong vùng nhất định ví dụ: khi chọn 1 ô H5 hoặc I7 trong vùng H3:J100 thì sửa như thế nào ? Thank !
 
Lần chỉnh sửa cuối:
Đoạn này:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      Calendar1.Visible = ActiveCell.Select
End Sub
Bạn sửa lại thành:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Calendar1.Visible = (Not Intersect(Union([H5], [I7]), Target) Is Nothing)
End Sub
Hay viết dài dòng (nhưng rõ ràng hơn):
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not Intersect(Union([H5], [I7]), Target) Is Nothing Then
    Calendar1.Visible = True
  Else
    Calendar1.Visible = False
  End If
End Sub
 
Lần chỉnh sửa cuối:
@ Ndu. Mình Xin lỗi vì câu hỏi không rõ: ý mình muốn hỏi là chọn 1 ô bất kỳ trong vùng H3:J100 (H5; I7 chỉ là ô ví dụ).
Các bạn giúp mình với nhé. Thank !
 
@ Ndu. Mình Xin lỗi vì câu hỏi không rõ: ý mình muốn hỏi là chọn 1 ô bất kỳ trong vùng H3:J100 (H5; I7 chỉ là ô ví dụ).
Các bạn giúp mình với nhé. Thank !
Vậy càng khỏe:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Calendar1.Visible = (Not Intersect([H3:J100], Target) Is Nothing)
End Sub
Nói thêm:
- Nếu vùng dử liệu là KHÔNG LIÊN TỤC, bắt buộc bạn phải dùng Union nhé (giống như tôi xài ở code trên)
------------
Thêm nữa:
Vì vùng chọn của bạn khá rộng, để thuận tiện hơn thì khi chọn cell nào, Calendar sẽ "chạy theo" và xuất hiện cạnh bên! Đồng ý chứ
Bạn dùng code này:
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
    Calendar1.Visible = (Not Intersect([H3:J100], Target) Is Nothing)
    Calendar1.Top = .Top: Calendar1.Left = .Offset(, 1).Left
  End With
End Sub
 
Lần chỉnh sửa cuối:
Cảm ơn Ndu Tôi đã test thử, kết quả đúng yêu cầu rồi. (loay hoay từ sáng đến giờ làm không được)

Làm thế nào để Calendar1 luôn xuất hiện tại vùng ActiveCell ? Thank!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Làm thế nào để Calendar1 luôn xuất hiện tại vùng ActiveCell ? Thank!
Là sao ta? Ý bạn muốn nó luôn xuất hiện à? Nếu thế thì xóa đoạn:
Calendar1.Visible = (Not Intersect([H3:J100], Target) Is Nothing)
là xong!
Nhớ xóa luôn đoạn:
Calendar1.Visible = falde
ở code phía dưới nhé
 
Lần chỉnh sửa cuối:
Tức là khi ta cuộn bảng tính lên hoặc xuống và chọn 1 ô nào đó thì Calendar1 luôn xuất hiện bên cạnh ô vừa chọn khỏi phải đi tìm nó vì tôi thấy nó luôn xuất hiện ở vị trí ban đầu mình vẽ ra nó
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom