Hỏi về Nhập dữ liệu theo điều kiện? (1 người xem)

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

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

KUMI

Bụi phấn
Tham gia
17/1/12
Bài viết
564
Được thích
571
Xin chào Thầy Cô & Anh Chị trong GPE!
Em đang gặp một vấn đề về nhập liệu, cụ thể là thế này ạ:
Em cần phân biệt dữ liệu nhập vào là chữ Hoa và Chữ thường. Cụ thể hơn dữ liệu nhập vào bắt buộc phải là chữ Hoa. Nếu chữ thường nhập vào không chấp nhận.
Em cũng có sử dụng chức năng DataValidation nhưng chức năng này không thể đáp ứng được yêu cầu trên của Em.
Vì vậy mong các Thầy Cô và Anh Chị giúp Em cho vấn đề trên với ạ.
Ví dụ file kèm ạ!
 

File đính kèm

Xin chào Thầy Cô & Anh Chị trong GPE!
Em đang gặp một vấn đề về nhập liệu, cụ thể là thế này ạ:
Em cần phân biệt dữ liệu nhập vào là chữ Hoa và Chữ thường. Cụ thể hơn dữ liệu nhập vào bắt buộc phải là chữ Hoa. Nếu chữ thường nhập vào không chấp nhận.
Em cũng có sử dụng chức năng DataValidation nhưng chức năng này không thể đáp ứng được yêu cầu trên của Em.
Vì vậy mong các Thầy Cô và Anh Chị giúp Em cho vấn đề trên với ạ.
Ví dụ file kèm ạ!

Nếu dùng Validation thì bạn phải hy sinh cái List ---> Dùng Custom theo công thức:
Mã:
=COUNT(FIND(F6,$D$6:$D$9))
Nhập liệu phải tự gõ, không có list gợi ý
 
Upvote 0
Ôi, Vậy Thầy có cách nào kết hợp chức năng List Data vơi VBA không ạ.
 
Upvote 0
Sở dĩ là Em muốn sử dụng cho bài này mà Thầy SA đã hướng dẫn cho Em.
Nếu Nhập dữ liệu cả Hoa va Thường thì kết quả không như ý muốn ạ!
Thầy có cách nào khác cho giải pháp này không ạ!
Xin cảm ơn Thầy!
 

File đính kèm

Upvote 0
Ôi, Vậy Thầy có cách nào kết hợp chức năng List Data vơi VBA không ạ.

Vậy thì giử lại list validation và kết hợp với code này:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rFind As Range
  On Error GoTo ExitSub
  Application.EnableEvents = False
  If Not Intersect(Range("F6:I9"), Target) Is Nothing Then
    If Target.Count = 1 Then
      Set rFind = Range("D6:D9").Find(Target.Value, , xlValues, xlWhole, , , True)
      If rFind Is Nothing Then
        Target.ClearContents: Target.Select
      End If
    End If
  End If
ExitSub:
  Application.EnableEvents = True
End Sub
 
Upvote 0
Hix! không Ổn rồi Thầy ạ!
Dữ liệu của Em bố trí theo kiểu này cơ Ạ!
Phiền Thầy và các ANh Chị trong GPE sửa lại giúp em với ạ!
Em xin cảm ơn!
 

File đính kèm

Upvote 0
Hix! không Ổn rồi Thầy ạ!
Dữ liệu của Em bố trí theo kiểu này cơ Ạ!
Phiền Thầy và các ANh Chị trong GPE sửa lại giúp em với ạ!
Em xin cảm ơn!

"Kiểu" nào cũng "mần" được cả
Nhân tiện chơi "chiêu mới" luôn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo ExitSub
  Application.EnableEvents = False
  If Not Intersect(ActiveSheet.UsedRange.SpecialCells(15), Target) Is Nothing Then
    If Target.Validation.Type = 3 Then
      If Target.Count = 1 Then Target = UCase(Target.Value)
    End If
  End If
ExitSub:
  Application.EnableEvents = True
End Sub
Test thử xem nhé
Code lần trước nếu nhập chữ thường thì code xóa luôn, còn code mới nếu nhập chữ thường nó sẽ sửa thành chữ HOA
 
Lần chỉnh sửa cuối:
Upvote 0
"Kiểu" nào cũng "mần" được cả
Nhân tiện chơi "chiêu mới" luôn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo ExitSub
  Application.EnableEvents = False
  If Not Intersect(ActiveSheet.UsedRange.SpecialCells(15), Target) Is Nothing Then
    If Target.Validation.Type = 3 Then
      If Target.Count = 1 Then Target = UCase(Target.Value)
    End If
  End If
ExitSub:
  Application.EnableEvents = True
End Sub
Test thử xem nhé
Code lần trước nếu nhập chữ thường thì code xóa luôn, còn code mới nếu nhập chữ thường nó sẽ sửa thành chữ HOA

CẢM ƠN THẦY!!! Nếu còn vấn đề gì con sẽ thông tin lại sau...hihi!
 
Upvote 0
"Kiểu" nào cũng "mần" được cả
Nhân tiện chơi "chiêu mới" luôn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo ExitSub
  Application.EnableEvents = False
  If Not Intersect(ActiveSheet.UsedRange.SpecialCells(15), Target) Is Nothing Then
    If Target.Validation.Type = 3 Then
      If Target.Count = 1 Then Target = UCase(Target.Value)
    End If
  End If
ExitSub:
  Application.EnableEvents = True
End Sub
Test thử xem nhé
Code lần trước nếu nhập chữ thường thì code xóa luôn, còn code mới nếu nhập chữ thường nó sẽ sửa thành chữ HOA

Thưa Thầy và Các Anh Chị trong GPE!
Em đã dùng thử code trên nhưng khi áp dụng vào file dữ liệu lớn khoảng hơn 10Sheet mỗi Sheet khoảng 60 người.
Thì khi thao tác copypase trong vùng target đưa ra thì máy tính bị treo luôn.
Vì vậy Em xin đưa ra một ý tưởng khác như thế này ạ:
Cứ cho mọi người nhập dữ liệu là chữ thường cũng được sau đó ta dùng code chuyển hàng loạt sang chữ hoa vì vậy
Có cách nào chuyển đổi từ chữ thường sang chữ hoa , nếu là chữ hoa thì giữ nguyên không ạ.
Cụ thể ví dụ áp dụng cho từ Sheets1 đến Sheet10 vùng A1:X300.
 
Upvote 0
Thưa Thầy và Các Anh Chị trong GPE!
Em đã dùng thử code trên nhưng khi áp dụng vào file dữ liệu lớn khoảng hơn 10Sheet mỗi Sheet khoảng 60 người.
Thì khi thao tác copypase trong vùng target đưa ra thì máy tính bị treo luôn.
Vì vậy Em xin đưa ra một ý tưởng khác như thế này ạ:
Cứ cho mọi người nhập dữ liệu là chữ thường cũng được sau đó ta dùng code chuyển hàng loạt sang chữ hoa vì vậy
Có cách nào chuyển đổi từ chữ thường sang chữ hoa , nếu là chữ hoa thì giữ nguyên không ạ.
Cụ thể ví dụ áp dụng cho từ Sheets1 đến Sheet10 vùng A1:X300.

chuyển từ chữ thường sang HOA rất đơn giản
Ví dụ: Bạn quyét chọn 1 vùng nào đó rồi chạy code này:
Mã:
Sub UCaseAll()
  Dim rCel as Range
  For Each rCel in Selection
    rCel.Formula = UCase(rCel.Formula)
  Next
End Sub
Áp dụng cho vùng A1:X300 từ sheet1 đến sheet10:
Mã:
Sub UCaseAll()
  Dim rCel as Range, i as Long
  For i = 1 to 10
    For Each rCel in Sheets(i).Range("A1:X300")
      rCel.Formula = UCase(rCel.Formula)
    Next
  Next
End Sub
-------------------------
Tuy nhiên, vì code quá đơn giản nên cũng có nhược điểm, chẳng hạn là tốc độ chậm
Vậy thì tùy theo trường hợp, nếu bạn cần 1 giải pháp đơn giản thì dùng code trên. Ngược lại, nếu cần 1 giải pháp hoàn hảo (tốc độ cao) thì ta sẽ tính khác (code sẽ phức tạp hơn)
 
Lần chỉnh sửa cuối:
Upvote 0
chuyển từ chữ thường sang HOA rất đơn giản
Ví dụ: Bạn quyét chọn 1 vùng nào đó rồi chạy code này:
Mã:
Sub UCaseAll()
  Dim rCel as Range
  For Each rCel in Selection
    rCel.Formula = UCase(rCel.Formula)
  Next
End Sub
Áp dụng cho vùng A1:X300 từ sheet1 đến sheet10:
Mã:
Sub UCaseAll()
  Dim rCel as Range, i as Long
  For i = 1 to 10
    For Each rCel in Sheets(i).Range("A1:X300")
      rCel.Formula = UCase(rCel.Formula)
    Next
  Next
End Sub
-------------------------
Tuy nhiên,vì code quá đơn giản nên cũng có nhược điểm, chẳng hạn là tốc độ chậm
Vậy thì tùy theo trường hợp, nếu bạn cần 1 giải pháp đơn giản thì dùng code trên. Ngược lại, nếu cần 1 giải pháp hoàn hảo (tốc độ cao) thì ta sẽ tính khác (code sẽ phức tạp hơn)
Cảm ơn Thầy, Cảm ơn GPE!
Code nhìn đúng là ngắn gọn thật nhưng với VBA đối với con hiện giờ mà nói thì chẳng khác gì là đang học bảng chữ cái A,b,c...vì vậy đối với con không hề đơn giản tý nào Thầy ạ!

Co`n về tốc độ thì con rất cần vấn đề này vì như đã nói ở trên File dữ liệu của con tương đối nặng.
Thêm nữa là code con phải kết hợp nhiều câu lệnh cho một lần thao tác phải kết hợp nhiều sub lại với nhau như là: Đầu tiên là phải đổi chữ thường sang chữ hoa (chủ đề hiện tại) tiếp đến là tìm ngày ốm của Thầy SA ở nhiều bảng chấm công:
http://www.giaiphapexcel.com/forum/...-biến-đổi-cấu-trúc-dữ-liệu-của-bảng-chấm-công
Sau đó Dồn dữ liệu của Thầy (NDU) ở nhiều bảng chấm công về một bảng tổng hợp:
http://www.giaiphapexcel.com/forum/...̀n-dữ-liệu-từ-nhiều-bảng-vào-một-bảng
Ngàoi ra còn các chức năng khác mở khoá nhiều sheets để thực hiện yêu cầu theo ý muốn rồi sai đó lại khoá tất cả các Sheeets lại.
sơ sơ đoạn code chạy mất khoảng 20s~30s
Vì vậy mà chức năng này Con cần tốc độ nhanh Thầy ạ! Nếu Thầy có hứng thú xin hãy tiếp tục ạ!
Rất cảm ơn Thầy và Chúc Thầy sức khoẻ tốt!
 
Upvote 0
Vì vậy mà chức năng này Con cần tốc độ nhanh Thầy ạ! Nếu Thầy có hứng thú xin hãy tiếp tục ạ!
Rất cảm ơn Thầy và Chúc Thầy sức khoẻ tốt!
Copy toàn bộ code dưới đây vào Module nhé
Mã:
Sub ChangeCaseFromRange(ByVal Source_Range As Range, ByVal CaseType As Long)
  'CaseType = 1 ---> Change to lower-case
  'CaseType = 2 ---> Change to UPPER-case
  'CaseType = 3 ---> Change to Proper-case
  Dim Source_Array, Area As Range, i As Long, j As Long
  On Error Resume Next
  With Source_Range
    If .Count = 1 Then
      .Formula = ChangeCase(.Formula, CaseType)
    Else
      For Each Area In .Areas
        Source_Array = Area.Formula
        Source_Array = ChangeCase(Source_Array, CaseType)
        Area.Formula = Source_Array
      Next
    End If
  End With
End Sub
Mã:
Private Function ChangeCaseFromString(ByVal Text As String, ByVal CaseType As Long) As String
  'CaseType = 1 ---> Change to lower-case
  'CaseType = 2 ---> Change to UPPER-case
  'CaseType = 3 ---> Change to Proper-case
  Dim i As Long, tmp As String
  On Error Resume Next
  If Trim(Text) <> "" And Not (IsNumeric(Text)) Then
    Select Case CaseType
      Case 1: ChangeCaseFromString = LCase(Text)
      Case 2: ChangeCaseFromString = UCase(Text)
      Case 3
        tmp = Trim(Text)
        If Len(tmp) = 1 Then
          ChangeCaseFromString = UCase(tmp)
        Else
          tmp = UCase(Left(tmp, 1)) & LCase(Mid(tmp, 2, Len(tmp)))
          For i = 2 To Len(tmp)
            If UCase(Mid(tmp, i, 1)) <> LCase(Mid(tmp, i, 1)) Then
              If UCase(Mid(tmp, i - 1, 1)) = LCase(Mid(tmp, i - 1, 1)) Then
                tmp = Left(tmp, i - 1) & Replace(tmp, Mid(tmp, i, 1), UCase(Mid(tmp, i, 1)), i, 1)
              End If
            End If
          Next
          ChangeCaseFromString = tmp
        End If
    End Select
  Else
    ChangeCaseFromString = Text
  End If
End Function
Mã:
Function ChangeCase(ByVal Source_Array, ByVal CaseType As Long)
  'CaseType = 1 ---> Change to lower-case
  'CaseType = 2 ---> Change to UPPER-case
  'CaseType = 3 ---> Change to Proper-case
  Dim aTmp, strTmp As String, i As Long, j As Long
  On Error Resume Next
  aTmp = Source_Array
  If Not IsArray(aTmp) Then aTmp = Array(aTmp)
  strTmp = Join(aTmp, " ")
  If Len(strTmp) Then
    For i = LBound(aTmp) To UBound(aTmp)
      aTmp(i) = ChangeCaseFromString(aTmp(i), CaseType)
    Next
  Else
    For i = LBound(aTmp, 1) To UBound(aTmp, 1)
      For j = LBound(aTmp, 2) To UBound(aTmp, 2)
        aTmp(i, j) = ChangeCaseFromString(aTmp(i, j), CaseType)
      Next
    Next
  End If
  ChangeCase = aTmp
End Function
-------------------
Nếu thực hiện ChangeCase trên bảng tính (Range) thì chỉ cần chú ý Sub đầu tiên. Ta áp dụng để chuyển chữ thường sang chữ HOA cho vùng A1:X300 từ sheet 1 đến sheet 10 như sau:
Mã:
Sub Main()
  Dim i As Long
  For i = 1 To 10
    ChangeCaseFromRange Sheets(i).Range("A1:X300"), 2
  Next
End Sub
-------------------
Nói thêm:
- Code trên có thể vận hành trên Range (vùng dữ liệu trên bảng tính chẳng han) hoặc trên Array (dữ liệu trong ComboBox, ListBox chẳng han)
- Code có khả năng chuyển HOA, thường... mà không làm mất công thức trên bảng tính
Vì đa năng nên nó... dài
Ẹc... Ẹc...
 
Upvote 0
@@! Hix...Con sẽ từ từ áp dụng sau!
Cảm ơn Thầy rất nhiều!Thầy giữ gìn sức khoẻ ạ!
Còn một bài nữa về việc liên quan đến bài này con cũng đang chuẩn bị viết đây cũng trong chủ để lập trình này.Rất mong là lại được gặp Thầy ở đó hihi, Cảm ơn Thầy!
 
Upvote 0
Còn một bài nữa về việc liên quan đến bài này con cũng đang chuẩn bị viết đây cũng trong chủ để lập trình này.Rất mong là lại được gặp Thầy ở đó hihi, Cảm ơn Thầy!

Miễn đừng nói gì liên quan đến KẾ TOÁN, NHÂN SỰ, TÀI CHÍNH... vân vân... (nói chung là chuyên ngành) ---> Tôi cóc biết đâu
 
Upvote 0
Mã:
Sub Main()
  Dim i As Long
  For i = 1 To 10
    ChangeCaseFromRange Sheets(i).Range("A1:X300"), 2
  Next
End Sub
Sub Main Thầy viết không khác gì mâm cơm ngon lành nóng hổi đang ở trong trạng thái chờ oanh tạc ^^, con đã áp dụng vào đoạn code dưới đây và test thử cũng đã thấy ổn :
Code chính:
Mã:
Sub GopOm()
On Error Resume Next
                Dim TjmO
                Dim TjmCO
                Dim k
With Sheets("Total")
    .Unprotect Password:="... "
    .[PM15:QA357].ClearContents
                Application.ScreenUpdating = False
                For k = 5 To 18
                Sheets(k).Activate
                ActiveSheet.Unprotect Password:="..."
                [COLOR=#006400][I][B]ChangeCaseFromRange Sheets(k).Range("I14:AM208"), 2[/B][/I][/COLOR]
[B][COLOR=#0000cd]                 CgOm
                 CgConOm[/COLOR][/B]
                 TjmO = Join2DArray(Sheets(5).[C263:G399], Sheets(6).[C263:G399], Sheets(7).[C263:G399], Sheets(8).[C263:G399], _
                 Sheets(9).[C263:G399], Sheets(10).[C263:G399], Sheets(11).[C263:G399], Sheets(12).[C263:G399], Sheets(13).[C263:G399], _
                 Sheets(14).[C263:G399], Sheets(15).[C263:G399], Sheets(16).[C263:G399], Sheets(17).[C263:G399], Sheets(18).[C263:G399])
                 Sheets("Total").[PN15].Resize(UBound(TjmO, 1), UBound(TjmO, 2)).Value = TjmO
                        TjmCO = Join2DArray(Sheets(5).[I263:M399], Sheets(6).[I263:M399], Sheets(7).[I263:M399], Sheets(8).[I263:M399], _
                        Sheets(9).[I263:M399], Sheets(10).[I263:M399], Sheets(11).[I263:M399], Sheets(12).[I263:M399], Sheets(13).[I263:M399], _
                        Sheets(14).[I263:M399], Sheets(15).[I263:M399], Sheets(16).[I263:M399], Sheets(17).[I263:M399], Sheets(18).[I263:M399])
                        Sheets("Total").[PV15].Resize(UBound(TjmCO, 1), UBound(TjmCO, 2)).Value = TjmCO
                ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
                        False, AllowFiltering:=True, Password:="..."
                ActiveSheet.EnableSelection = xlNoRestrictions
                Next
                .Activate
                .[PM15].FormulaR1C1 = "=IF(RC[1]<>"""",COUNTA(R15C[1]:RC[1]),"""")"
                .[PM15].AutoFill Destination:=[PM15:PM357]
                .[PM15:PM357].Copy
                .[PM15:PM357].PasteSpecial Paste:=xlPasteValues
                .[PU15].FormulaR1C1 = "=IF(RC[1]<>"""",COUNTA(R15C[1]:RC[1]),"""")"
                 [PU15].AutoFill Destination:=[PU15:PU357]
                .[PU15:PU357].Copy
                .[PU15:PU357].PasteSpecial Paste:=xlPasteValues
                 Application.CutCopyMode = False
                .[PP9:PQ9].FormulaR1C1 = "=NOW()"
                .[PP9:PQ9].Copy
                .[PP9:PQ9].PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
    .Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
            False, AllowFiltering:=True, Password:="..."
    .EnableSelection = xlNoRestrictions
End With
    Run ALERT(Evaluate("TbTjmO"), 2)
End Sub

với 2 Sub phụ CgOm & CgConOm của Thầy DQ_SA:
Mã:
Sub CgOm()
    Dim jJ As Long, Rws As Long, Ngay As Byte, Ww As Byte
    Const Om As String = "O"
        Rws = [I208].End(xlUp).Row
        [C263:G399].ClearContents
    For jJ = 14 To Rws Step 3
    For Ww = 1 To 31
    If Month([H13].Offset(, Ww).Value) <> Month([D7].Value) Then Exit For
    With Cells(jJ, "H").Offset(, Ww)
    If .Offset(, -1).Value <> Om And .Value = Om Then
        [D399].End(xlUp).Offset(1).Value = Cells(jJ, "D").Value
        [G399].End(xlUp).Offset(1).Value = Cells(jJ, "E").Value
        [C399].End(xlUp).Offset(1).Value = Cells(jJ, "F").Value
        [D399].End(xlUp).Offset(, 1).Resize(, 2).Value = Year([D7].Value) & "/" & Month([D7].Value) & "/" & Day([H13].Offset(, Ww).Value)
    ElseIf .Value = Om And .Offset(, 1).Value <> Om Then
        [D399].End(xlUp).Offset(, 2).Value = Year([D7].Value) & "/" & Month([D7].Value) & "/" & Day([H13].Offset(, Ww).Value)
    End If
    End With
    Next Ww
    Next jJ
        Randomize
End Sub

Mã:
Sub CgConOm()
    Dim jJ As Long, Rws As Long, Ngay As Byte, Ww As Byte
    Const Co As String = "CO"
        Rws = [I208].End(xlUp).Row
        [I263:M399].ClearContents
    For jJ = 14 To Rws Step 3
    For Ww = 1 To 31
    If Month([H13].Offset(, Ww).Value) <> Month([D7].Value) Then Exit For
    With Cells(jJ, "H").Offset(, Ww)
    If .Offset(, -1).Value <> Co And .Value = Co Then
        [J399].End(xlUp).Offset(1).Value = Cells(jJ, "D").Value
        [M399].End(xlUp).Offset(1).Value = Cells(jJ, "E").Value
        [I399].End(xlUp).Offset(1).Value = Cells(jJ, "F").Value
        [J399].End(xlUp).Offset(, 1).Resize(, 2).Value = Year([D7].Value) & "/" & Month([D7].Value) & "/" & Day([H13].Offset(, Ww).Value)
    ElseIf .Value = Co And .Offset(, 1).Value <> Co Then
        [J399].End(xlUp).Offset(, 2).Value = Year([D7].Value) & "/" & Month([D7].Value) & "/" & Day([H13].Offset(, Ww).Value)
    End If
    End With
    Next Ww
    Next jJ
        Randomize
End Sub

Nhân đây Thầy xem đoạn code trên có thể thu gọn lại được thêm ít nào không ạ,Con ngại về sau có vấn đề gì lại phải mò mẫm lại thì cũng thấy ớn ạ! Hj.
Về file thì thật sự con cũng muốn up lên cho Thầy và mọi người xem để góp ý lắm nhưng dữ liệu và biểu mẫu của nội bộ công ty thì theo qui định không được phép chia sẻ Thầy ạ!

Miễn đừng nói gì liên quan đến KẾ TOÁN, NHÂN SỰ, TÀI CHÍNH... vân vân... (nói chung là chuyên ngành) ---> Tôi cóc biết đâu
P/s:Bài của con theo links dưới nếu tiện mong Thầy và các Anh Chị ghé qua giúp đỡ thêm nhé!
Hỏi về cách biến đổi cấu trúc dữ liệu của bảng chấm công?
Cảm ơn GPE!
 
Upvote 0
Sub Main Thầy viết không khác gì mâm cơm ngon lành nóng hổi đang ở trong trạng thái chờ oanh tạc ^^, con đã áp dụng vào đoạn code dưới đây và test thử cũng đã thấy ổn
Xem ra bạn cũng rất có năng khiếu với bộ môn lập trình nha (vì thiếu chi người ngay cả có cái mâm "dọn sẵn" thế cũng chưa chắc biết cách.. "ăn")
Ẹc.... Ẹc...
---------------------------------
Nhân đây Thầy xem đoạn code trên có thể thu gọn lại được thêm ít nào không ạ,Con ngại về sau có vấn đề gì lại phải mẫm lại thì cũng thấy ớn ạ! Hj.
Bạn cứ tự mình đi (tôi làm biếng lắm)
Sẵn đà này, ít nhất bạn cũng sẽ ngộ ra được rất nhiều trò hay
Chúc thành công nhé!
 
Upvote 0
Xem ra bạn cũng rất có năng khiếu với bộ môn lập trình nha (vì thiếu chi người ngay cả có cái mâm "dọn sẵn" thế cũng chưa chắc biết cách.. "ăn")
Ẹc.... Ẹc...
---------------------------------

Bạn cứ tự mình đi (tôi làm biếng lắm)
Sẵn đà này, ít nhất bạn cũng sẽ ngộ ra được rất nhiều trò hay
Chúc thành công nhé!

Ôi,Thầy! Con thấy cái gì Thầy cũng đúng! Và cũng hi vọng là lời nhận xét trên của Thầy cũng đúng luôn...để con có chút tinh thần hihi..
Sở dĩ nhiều lúc con cũng cố gắng dành thời gian để học về lập trình vì đôi khi xem Thầy và các Anh Chị trên GPE làm mà thấy ngưỡng mộ qua đi mất. Và lập trình cũng khiến con giải quyết một số công việc nhanh chóng hơn. Sau này con cái lớn lớn đi học đi hành con cũng nên tiếp xúc dần với lập trình được.
Cảm ơn Thầy đã chỉ bảo
-----------------
À mà Thầy! Thầy xem giúp con bài này với ạ!
http://www.giaiphapexcel.com/forum/...-biến-đổi-cấu-trúc-dữ-liệu-của-bảng-chấm-công
với bài này thì con Chịu cứng Thầy ạ! không Thể mò được nữa rồi.
Thầy ghé qua xem có giả pháp nào không giúp con với ạ!
Cảm ơn Thầy!
 
Upvote 0
Ôi,Thầy! Con thấy cái gì Thầy cũng đúng! Và cũng hi vọng là lời nhận xét trên của Thầy cũng đúng luôn...để con có chút tinh thần hihi..
Tôi tin rằng bạn chắc chắn được (vì hình như bạn có động lực...)
À mà Thầy! Thầy xem giúp con bài này với ạ!
http://www.giaiphapexcel.com/forum/...-biến-đổi-cấu-trúc-dữ-liệu-của-bảng-chấm-công
với bài này thì con Chịu cứng Thầy ạ! không Thể mò được nữa rồi.
Thầy ghé qua xem có giả pháp nào không giúp con với ạ!
Cảm ơn Thầy!
Tại vì thấy các sư phụ tham gia quá trời nên tôi cũng.. lười. Thêm nữa, cứ đụng mấy cái nhân sự gì gì đó là tự nhiên tôi thấy... da cóc nổi đầy mình
Ẹc... Ẹc... được rồi, tôi hứa sẽ xem qua (nhưng không hứa chắc là sẽ giúp được)
 
Upvote 0

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

Back
Top Bottom