Lưu trữ danh mục: Uncategorized

Code VB đánh dấu màu khác nhau với các dữ liệu trùng nhau

VBA

Thực hiện Alt + F11 để vào code

Tạo module mới. Nhập code. Lưu và chạy macro

SubColorCompanyDuplicates()'Updateby Extendoffice 20160704DimxRg AsRangeDimxTxt AsStringDimxCell AsRangeDimxChar AsStringDimxCellPre AsRangeDimxCIndex AsLongDimxCol AsCollectionDimI AsLongOnErrorResumeNextIfActiveWindow.RangeSelection.Count > 1 ThenxTxt = ActiveWindow.RangeSelection.AddressLocalElsexTxt = ActiveSheet.UsedRange.AddressLocalEndIfSetxRg = Application.InputBox("please select the data range:", "Kutools for Excel", xTxt, , , , , 8)IfxRg IsNothingThenExitSubxCIndex = 2SetxCol = NewCollectionForEachxCell InxRgOnErrorResumeNextxCol.Add xCell, xCell.TextIfErr.Number = 457 ThenxCIndex = xCIndex + 1SetxCellPre = xCol(xCell.Text)IfxCellPre.Interior.ColorIndex = xlNone ThenxCellPre.Interior.ColorIndex = xCIndexxCell.Interior.ColorIndex = xCellPre.Interior.ColorIndexElseIfErr.Number = 9 ThenMsgBox "Too many duplicate companies!", vbCritical, "Kutools for Excel"ExitSubEndIfOnErrorGoTo0NextEndSub

Lý thuyết Cơ sở dữ liệu

Môn học tập trung vào tìm hiểu các kiến thức cơ bản về CSDL, thiết kế CSDL quan hệ và xây dựng truy vấn, tiến tới xây dựng một hệ CSDL quan hệ hoàn chỉnh. Một phần không nhỏ thời lượng của môn học được dành cho lý thuyết cơ sở của CSDL là đại số quan hệ và lý thuyết chuẩn hóa. Môn học còn giới thiệu một số thuật toán được dùng trong các hệ CSDL quan hệ để chuẩn hóa và kiểm tra tính đúng đắn của các dạng chuẩn.

Giáo trình môn học:

Slide bài học:

Tài liệu Bài tập thực hành Buổi 1. :

Học phần gồm :

Chương 1: CÁC KHÁI NIỆM CƠ BẢN

Chương 2: MÔ HÌNH THỰC THỂ LIÊN KẾT

Chương 3: MÔ HÌNH CƠ SỞ DỮ LIỆU QUAN HỆ

Chương 4: ĐẠI SỐ QUAN HỆ

Chương 5: RÀNG BUỘC TOÀN VẸN

Chương 6: PHỤ THUỘC HÀM

Chương 7: CHUẨN HÓA CƠ SỞ DỮ LIỆU

  1. Nội dung chi tiết học phần

Chương 1: CÁC KHÁI NIỆM CƠ BẢN

1.1. Định nghĩa CSDL

1.2. Đối tượng sử dụng CSDL

1.3. Hệ quản trị CSDL

1.4. Mô hình CSDL

Chương 2: MÔ HÌNH THỰC THỂ LIÊN KẾT

2.1. Quá trình thiết kế CSDL

2.2. Mô hình thực thể – liên kết

2.2.1. Thực thể

2.2.2. Thuộc tính

2.2.3. Mối liên kết

2.2.4. Mô hình ER

2.3. Thiết kế CSDL

2.4. Mô hình thực thể liên kết mở rộng

2.4.1. Lớp cha, lớp con và sự thừa kế

2.4.2. Phân cấp “is a”

2.4.3. Chuyên biệt hóa

2.4.4. Tổng quát hóa

2.4.5. Sơ đồ mô hình EER

Chương 3: MÔ HÌNH CƠ SỞ DỮ LIỆU QUAN HỆ

3.1. Giới thiệu mô hình quan hệ

3.2. Các khái niệm của mô hình quan hệ

3.2.1. Quan hệ

3.2.2. Lược đồ quan hệ – lược đồ CSDL

3.2.3. Miền giá trị

3.2.4. Liên kết

3.3. Các đặc trưng của quan hệ

3.4. Ràng buộc lược đồ quan hệ

3.4.1. Ràng buộc khóa

3.4.2. Ràng buộc tham chiếu

3.4.3. Ràng buộc miền giá trị

3.5. Chuyển đổi mô hình ER sang mô hình CSDL quan hệ

3.5.1. Các quy tắc chuyển đổi

3.5.2. Bài tập áp dụng

Chương 4: ĐẠI SỐ QUAN HỆ

4.1. Các phép toán đại số trên tập hợp

4.1.1. Phép hợp

4.1.2. Phép giao

4.1.3. Phép trừ

4.1.4. Tích Decac

4.1.5. Phép chia

4.1.6. Các tính chất của đại số quan hệ

4.2. Các phép toán đại số quan hệ

4.2.1. Phép chiếu

4.2.2. Phép chọn

4.2.3. Phép kết nối

4.3. Các phép toán gom nhóm trên quan hệ

Chương 5: RÀNG BUỘC TOÀN VẸN

5.1. Khái niệm cơ bản

5.2. Các đặc trưng của RBTV

5.2.1. Bối cảnh

5.2.2. Bảng tầm ảnh hưởng

5.2.3. Biểu diễn – Nội dung

5.3. Phân loại RBTV

5.3.1. Miền giá trị

5.3.2. Liên bộ

5.3.3. Liên thuộc tính

5.3.4. Giá trị thuộc tính theo thời gian

5.3.5. Tham chiếu

Chương 6: PHỤ THUỘC HÀM

6.1. Giới thiệu

6.2. Hệ tiên đề Amstrong

6.3. Bao đóng

6.3.1. Các khái niệm cơ bản

6.3.2. Thuật toán tìm bao đóng của tập thuộc tính

6.3.3. Bài toán thành viên

6.4. Tập phụ thuộc hàm tương đương

6.5. Phụ thuộc hàm dư thừa

6.6. Thuộc tính dư thừa

6.7. Khóa của quan hệ

6.7.1. Định nghĩa

6.7.2. Thuật toán tìm khóa

6.7.3. Thuật toán tìm khóa cải tiến

6.8. Tập PTH tối thiểu

Chương 7: CHUẨN HÓA CƠ SỞ DỮ LIỆU

7.1. Một số khái niệm cơ bản

7.2. Phép tách – kết nối không mất thông tin

7.3. Chuẩn hóa lược đồ quan hệ

7.3.1. Dạng chuẩn 1NF

7.3.2. Dạng chuẩn 2NF

7.3.3. Dạng chuẩn 3NF

7.3.4. Dạng chuẩn BCNF

7.4. Chuẩn hóa quan hệ

7.4.1. Phân rã thành các BCNF

7.4.2. Phân rã thành các 3NF

Microsoft Office trong Doanh Nghiệp

Microsoft Office trong Doanh Nghiệp.


Khóa học gồm các nội dung sau:

1Microsoft Word
Kiến thức nâng cao trong wor như: Tạo liên kết động, mục mục, trộn thư, cộng tác trên tài liệu, sử dung macro, tạo Form dữ liệu đầu vào..
2Microsoft Excel
Các kỹ thuật để thao tác dữ liệu nhanh và hiệu quả hơn thông qua các phím tắt và thủ thuật phù hợp. Các quy tắc trình bày dữ liệu trực quan. Sử dụng phân tích dữ liệu bằng Subtotal, Pivot Table, Pivot table chart.  Sử dụng các nhóm hàm thống kê, tìm kiếm và tham chiếu nâng cao, ứng dụng Macro….
3Microsoft Power Point
Các kỹ thuật trình bày nội dung nâng cao về hiệu ứng, liên kết, kỹ năng trình chiếu, xuất bản bài thuyết trình.




1. Để bắt đầu khóa học. Các bạn vui lòng bấm vào ĐĂNG KÝ thông tin học viên để vào lớp học:

2. Dựa và các TÀI NGUYÊN có sẵn bên dưới. Chúng ta sẽ cùng nhau tìm hiểu và thực hiện yêu cầu của từng buổi học.
Bộ Giáo trình Office
Noi dung chi tiet 
Tiến độ giảng dạy
Slide bài giảng

3. TÀI LIỆU thực hành theo buổi học 
 Word: Tài liệu thực hành
 Excel: Tài liệu thực hành
 Power Point: Tài liệu thực hành
  
3.  Sau khi kết thúc khóa học. Các bạn vui lòng thực hiện bài kiểm tra kiến thức sau: 

 – Phần thi lý thuyết: 
– Phần thi Thực Hành: 

Microsoft Office Advanced – VNPT

Chào mừng các bạn đến với khóa học

Microsoft Office Nâng Cao trong Doanh Nghiệp.

Khóa học gồm các nội dung sau:
1Microsoft Word
Kiến thức nâng cao trong wor như: Tạo liên kết động, mục mục, trộn thư, cộng tác trên tài liệu, sử dung macro, tạo Form dữ liệu đầu vào..
2Microsoft Excel
Các kỹ thuật để thao tác dữ liệu nhanh và hiệu quả hơn thông qua các phím tắt và thủ thuật phù hợp. Các quy tắc trình bày dữ liệu trực quan. Sử dụng phân tích dữ liệu bằng Subtotal, Pivot Table, Pivot table chart.  Sử dụng các nhóm hàm thống kê, tìm kiếm và tham chiếu nâng cao, ứng dụng Macro….
3Microsoft Power Point
Các kỹ thuật trình bày nội dung nâng cao về hiệu ứng, liên kết, kỹ năng trình chiếu, xuất bản bài thuyết trình.
4 Microsoft Outlook
Giới thiệu cài đặt, sử dụng, quản lý email cá nhân và các công việc các nhân trên outlook. Cách tạo các thư mục quản lý email, liên hệ và công việc.
5.      Microsoft Project

Giới thiệu sử dụng Microsoft Project cơ bản với các tính năng:Tạo thời gian, tạo công việc, phân công, quản lý công việc và nhiệm vụ. In ấn dự án.




1. Để bắt đầu khóa học. Các bạn vui lòng bấm vào ĐĂNG KÝ thông tin học viên để vào lớp học:

2. Dựa và các TÀI NGUYÊN có sẵn bên dưới. Chúng ta sẽ cùng nhau tìm hiểu và thực hiện yêu cầu của từng buổi học.
Bộ Giáo trình Office
Noi dung chi tiet 
Tiến độ giảng dạy
Slide bài giảng

3. TIỆN ÍCH hỗ trợ: 
Thiết lập cài đặt onedrive trên máy. Tải bộ cài tại đây
Thực hiện cài đặt outlook với tài khoản email: hocvienthuchanh@outlook.com  hoăc hocvienthuchanh@gmail.com( thông số 995/587/TLS khi cài gmail)  (pass giảng viên cung cấp)
Bộ gõ tiếng việt Unikey 

4. TÀI LIỆU thực hành theo buổi học 
 Word: Tài liệu thực hành
 Excel: Tài liệu thực hành
 Power Point: Tài liệu thực hành
 Outlook: 
 Project:
Toàn bộ khóa học
3.  Sau khi kết thúc khóa học. Các bạn vui lòng thực hiện bài kiểm tra kiến thức sau: 

                                           Office Nâng Cao
 – Phần thi lý thuyết: Link bài thì
– Phần thi Thực Hành: Link yêu cầu



( Giảng viên sẽ cung cấp mã đăng nhập cho bài kiểm tra)

Cách tạo mục lục trong excel

Trong 1 sheet excel dài, người dùng có thể thiết lập 1 mục lục cho sheet bảng tính bằng kỹ thuật đặt tên vùng dữ liệu.

Ví dụ. Muốn tạo mục lục trỏ đến nội dung tại A50 trong sheet.
Bước 1: Đặt chuột tại A50. Bấm Fomulas, trong nhóm defines name chọn Defines name. Đặt tên là tiếng việt ko dấu, ko cách. Vd: Noi_dung1
Bước 2: Xác định vị trí cần đặt mục lục. VD: tại ô A2 chọn Insert Link/Hyperlink ( Ctrl + K)
             Trong mục link to chọn place in this document. Tìm đến tên đã đặt ở bước 1 là Noi_dung1
Làm tương tự với các phần mục lục tiếp theo 

Code tach 1 sheet tổng hợp ra cách sheet khac trong cùng 1 file

Sub TachNhom()

Dim myCell As Range
    Dim wks As Worksheet
    Dim DataBaseWks As Worksheet
    Dim ListRange As Range
    Dim dummyRng As Range
    Dim myDatabase As Range
    Dim TempWks As Worksheet
    Dim rsp As Integer
    Dim i As Long

    Const TopLeftCellOfDataBase As String = “A4”
    Const KeyColumn As String = “C”
    ‘muon tach cot nao thi dien ten cot do
 

    Set DataBaseWks = Worksheets(“DATA”)
    i = DataBaseWks.Range(TopLeftCellOfDataBase).Row – 1

    Set TempWks = Worksheets.Add

    With DataBaseWks
        Set dummyRng = .UsedRange
        Set myDatabase = .Range(TopLeftCellOfDataBase, _
                            .Cells.SpecialCells(xlCellTypeLastCell))
    End With

    With DataBaseWks
        Intersect(myDatabase, .Columns(KeyColumn)).AdvancedFilter _
            Action:=xlFilterCopy, _
            CopyToRange:=TempWks.Range(“A1”), _
            Unique:=True

        TempWks.Range(“D1“).Value = _
            .Cells(.Range(TopLeftCellOfDataBase).Row, KeyColumn).Value
    End With

    With TempWks
        Set ListRange = .Range(“A2”, .Cells(.Rows.Count, “A”).End(xlUp))
    End With

    With ListRange
        .Sort Key1:=.Cells(1), Order1:=xlAscending, _
            Header:=xlNo, OrderCustom:=1, _
            MatchCase:=False, Orientation:=xlTopToBottom
    End With

    For Each myCell In ListRange.Cells
        If WksExists(myCell.Value) = False Then
            Set wks = Sheets.Add
            On Error Resume Next
            wks.Name = myCell.Value
            If Err.Number <> 0 Then
                MsgBox “Please rename: ” & wks.Name
                Err.Clear
             
            End If
            On Error GoTo 0
            wks.Move After:=Sheets(Sheets.Count)
        Else
            Set wks = Worksheets(myCell.Value)
            wks.Cells.Clear
        End If

        If rsp = 6 Then
          DataBaseWks.Rows(“1:” & i).Copy Destination:=wks.Range(“A1”)
        End If
     
        TempWks.Range(“D2”).Value = “=” & Chr(34) & “=” & myCell.Value & Chr(34)

        If rsp = 6 Then
          myDatabase.AdvancedFilter _
              Action:=xlFilterCopy, _
              CriteriaRange:=TempWks.Range(“D1:D2”), _
              CopyToRange:=wks.Range(“A1”).Offset(i, 0), _
              Unique:=False
        Else
          myDatabase.AdvancedFilter _
              Action:=xlFilterCopy, _
              CriteriaRange:=TempWks.Range(“D1:D2”), _
              CopyToRange:=wks.Range(“A1”), _
              Unique:=False
              Columns(“D:D”).ColumnWidth = 20
              Columns(“F:F”).ColumnWidth = 20
              Columns(“G:G”).ColumnWidth = 15
        End If
     
    Next myCell
 
    Application.DisplayAlerts = False
    TempWks.Delete
    Application.DisplayAlerts = True

    MsgBox “TÁCH  THÀNH  CÔNG”

End Sub
Function WksExists(wksName As String) As Boolean
    On Error Resume Next
    WksExists = CBool(Len(Worksheets(wksName).Name) > 0)
End Function

———————

code tách các sheet ra thành nhiều file tại 1 forder

Sub tachsheet()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim sh As Worksheet
For Each sh In Worksheets
sh.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "" & sh.Name, 51
' Có thể đổi lại vị trí lư tại chỗ ""
ActiveWorkbook.Close
Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Code gộp file – gộp sheet các kiểu trong excel

Code tìm các file dữ liệu cần gộp
Sub GopfileTH()
    Dim FilesToOpen
    Dim x As Integer
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    FilesToOpen = Application.GetOpenFilename _
    (FileFilter:=”Microsoft Excel Files (*.xls*), *.xls*”, MultiSelect:=True, Title:=”Files to Merge”)
    If TypeName(FilesToOpen) = “Boolean” Then
        MsgBox “Khong co file nao duoc chon”
        GoTo ExitHandler
    End If
    x = 1
    While x <= UBound(FilesToOpen)
        Workbooks.Open Filename:=FilesToOpen(x)
        Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
        x = x + 1
    Wend
ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub
ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

Code gộp file vừa chọn
Sub Gopfile()
    Dim FilesToOpen
    Dim Filetonghopmoi As Workbook
    Dim filedangmo As Workbook
    Dim strFilename As String
    Dim x As Integer
    On Error GoTo ErrHandler
    Application.ScreenUpdating = False
    FilesToOpen = Application.GetOpenFilename _
    (FileFilter:=”Microsoft Excel Files (*.xls*), *.xls*”, MultiSelect:=True, Title:=”Files to Merge”)
    If TypeName(FilesToOpen) = “Boolean” Then
        MsgBox “Khong co file nao duoc chon”
        GoTo ExitHandler
    End If
   
‘=====
‘Tao file tong hop moi noi luu mac dinh ngoai desktop

    Set Filetonghopmoi = Workbooks.Add(xlWBATWorksheet)
    strFilename = Dir(“C:UsersAdministratorDesktop” & “*.xls”, vbNormal)
   
 
    x = 1
    While x <= UBound(FilesToOpen)
    Set filedangmo = Workbooks.Open(Filename:=FilesToOpen(x))
    Sheets(“PL”).Copy After:=Filetonghopmoi.Sheets(Filetonghopmoi.Sheets.Count)
    ‘Thay ten sheet can gop cho phu hop. o day dang gop tat ca cac sheet co ten “PL” o ca file da cho
    Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    filedangmo.Close False
   
    x = x + 1
    Wend

ExitHandler:
    Application.ScreenUpdating = True
    Exit Sub
ErrHandler:
    MsgBox Err.Description
    Resume ExitHandler
End Sub

———
Code gộp sheet trong file
Option Explicit

‘ Tao chuc nang tim ra DONG cuoi cung

Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:=”*”, After:=sh.Range(“A1”), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
On Error GoTo 0
End Function

‘ Tao chuc nang tim ra COT cuoi cung

Function Lastcol(sh As Worksheet)
On Error Resume Next
Lastcol = sh.Cells.Find(What:=”*”, After:=sh.Range(“A1”), Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
On Error GoTo 0
End Function

‘ Tao lenh GOPSHEET

Sub gopsheet()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long

With Application
.ScreenUpdating = False
.EnableEvents = False
End With

‘ XÓA bo sheet TONGHOP neu no da duoc thiet lap

Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets(“TONGHOP”).Delete
On Error GoTo 0
Application.DisplayAlerts = True

‘ TAO 1 sheet moi ten TONGHOP

Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = “TONGHOP”

‘Nhap dong bat dau

StartRow = 2

‘ Chay qua tat cac cac sheet  va thuc hien copy du lieu vao sheet TONGHOP

For Each sh In ActiveWorkbook.Worksheets
   If sh.Name <> DestSh.Name Then
 
‘ Tim don cuoi cung trong sheet tong hop va sheet thanh phan

   Last = LastRow(DestSh)
   shLast = LastRow(sh)
 

‘ Thuc hien copy du kieu khi sheet du lieu KHONG RONG va dong CUOI > dong BAT DAU
           If shLast > 0 And shLast >= StartRow Then
             
‘ thiet lap VUNG can copy
           
            Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))

‘ Kiem tra xem sheet TONGHOP co du dong de copy sang khong

               If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
                  MsgBox “Khong du dong trong bang TONGHOP de copy sang”
                  GoTo ExitTheSub
               End If

‘ Copy du lieu o dang GIA TRI
             
               CopyRng.Copy
               With DestSh.Cells(Last + 1, “A”)
                   .PasteSpecial xlPasteValues
                   .PasteSpecial xlPasteFormats
                   Application.CutCopyMode = False
               End With

           End If

       End If
 
   Next

ExitTheSub:

   Application.GoTo DestSh.Cells(1)

   ‘ Tu dong dieu chinh so cot theo sheet TONGHOP
 
 
   DestSh.Columns.AutoFit

   With Application
       .ScreenUpdating = True
       .EnableEvents = True
   End With
End Sub

————-
Code xóa hết các sheet vừa thêm
‘————————-
Sub XoaSheetVuaThem()

Application.DisplayAlerts = False
Dim sh As Worksheet
For Each sh In Worksheets
If sh.Name <> ActiveSheet.Name Then
sh.Delete
End If
Next sh
Application.DisplayAlerts = True

End Sub

Code đổi số sang chữ trong excel

Tải Add-in về để cài vào máy: Account Help 
Thiết lập cài Add-in với từng phiên bản office khác nhau 2003 và 2007
Sử dụng:
gõ hàm 
=VND(giá trị số, loại font(1/2/3-mặc định3), “loại đơn vị tiền tệ”,”giá trị số lẻ”) để đổi tiếng việt
= USD để đổi tiếng anh

VD: A1=30,5
A2=VND(A1,,”USD”,”cent”) --> ba mươi USD năm mươi CENT



Ngoài ra có thể tham khảo code của chuyển đổi font khác ở bên dưới


Public Function VND(BaoNhieu)
If Val(BaoNhieu) = 0 Then
Ketqua = “Khoâng ñoàng”
Else
If Abs(BaoNhieu) > 1E+15 Then
Ketqua = “Soá quaù lôùn”
Else
If BaoNhieu < 0 Then Ketqua = “Tröø” & Space(1) Else Ketqua = Space(0)
SOTIEN = Format(Abs(BaoNhieu), “###############0.00”) ’18coät soá 2soá leû
SOTIEN = Right(Space(15) & SOTIEN, 18-)
Hang = Array(“None”, “traêm”, “möôi”, “gì ñoù”)
DONVI = Array(“None”, “ngaøn tyû”, “tyû”, “trieäu”, “ngaøn”, “ñoàng”, “xu”)
Dem = Array(“None”, “moât”, “hai”, “ba”, “boán”, “naêm”, “saùu”, “baûy”, “taùm”, “chín”)
For N = 1 To 6
Nhom = Mid(SOTIEN, N * 3 – 2, 3)
If Nhom <> Space(3) Then
Select Case Nhom
Case “000”
If N = 5 Then
Chu = “ñoàng” & Space(1)
Else
Chu = Space(0)
End If
Case “.00”, “,00”
Chu = “chaün”
Case Else
S1 = Left(Nhom, 1): S2 = Mid(Nhom, 2, 1): S3 = Right(Nhom, 1)
Chu = Space(0): Hang(3) = DONVI(N)
For K = 1 To 3
Dich = Space(0): S = Val(Mid(Nhom, K, 1))
If S > 0 Then
Dich = Dem(S) & Space(1) & Hang(K) & Space(1)
Else
If K = 1 And N > 1 And N < 6 And Val(Mid(SOTIEN, (N – 1) * 3 – 2, 3)) > 0 Then
Dich = “khoâng” & Space(1) & Hang(K) & Space(1)
End If
End If
Select Case K
Case 2 And S = 1
Dich = “möôøi” & Space(1)
Case 3 And S = 0 And Nhom <> Space(2) & “0”
Dich = Hang(K) & Space(1)
Case 3 And S = 5 And Val(S2) > 2
Dich = “l” & Mid(Dich, 2)
Case 2 And S = 0 And S3 <> “0”
If N > 1 And Val(Mid(SOTIEN, (N – 1) * 3 – 2, 3)) > 0 Or (Val(S1) > 0) Then
Dich = “leû” & Space(1)
End If
End Select
Chu = Chu & Dich
Next K
End Select
ViTri = InStr(1, Chu, “möôi moät”)
If ViTri > 0 Then Mid(Chu, ViTri, 9) = “möôi moát”
Ketqua = Ketqua & Chu
End If
Next N
End If
End If
VND = UCase(Left(Ketqua, 1)) & Trim(Mid(Ketqua, 2))
End Function

HÀM ĐỔI SỐ SANG CHỮ
 
Option Explicit
Function VND(conso) As String
Dim S09, Lop3, Dau, Vt, S123, S1, S2, S3, LOP2, CHR1, CHR2, CHR3 As String
Dim Sonhan, Sochuso, I, Docso, Lop, N1, N2, N3, Baso As Long
‘………………………….SO TU 1 DEN 9 ………………………………………………….
 S09 = Array(“”, ” M” & ChrW(7897) & “t”, ” Hai”, ” Ba”, ” B” & ChrW(7889) & “n”, ” N” & ChrW(259) & “m”, _
         ” S” & ChrW(225) & “u”, ” B” & ChrW(7843) & “y”, ” T” & ChrW(225) & “m”, ” Ch” & ChrW(237) & “n”)
‘…………………………..CHUOI NGHIN -TRIEU-TY………………………………………………………………………………………….
      If Right(conso, 3) = “000” Or Len(conso) >= 13 Then Lop3 = Array(“”, ” Tri” & ChrW(7879) & “u”, ” Ngh” & ChrW(236) & “n”, ” T” & ChrW(7927) & “”) Else _
                                                          Lop3 = Array(“”, ” Tri” & ChrW(7879) & “u,”, ” Ngh” & ChrW(236) & “n,”, ” T” & ChrW(7927) & “,”)
‘…………………………..NGHIN TY-MUOI NGHIN TY-TRAM NGHIN TY……………………………………………………………………………..Or Len(conso) >= 13
   ‘If conso = 10 ^ 12 Or conso = 10 ^ 13 Or conso = 10 ^ 14 Or conso = 10 ^ 15 Then LOP2 = ” T” & ChrW(7927) & ” ” Else LOP2 = ” T” & ChrW(7927) & “,”
If Abs(Right(conso, 11)) > 0 Then LOP2 = ” T” & ChrW(7927) & “, ” Else LOP2 = ” T” & ChrW(7927) & “”
‘…………………………………………………………………………………………………………………………………………..
If Abs(conso) > 999999999999999# Then
        MsgBox “SO QUÁ LON”
        VND = “SO QUÁ LON”
        Exit Function
    End If
If Trim(conso) = “” Then
  VND = “”
ElseIf IsNumeric(conso) = True Then
  If conso < 0 Then Dau = ChrW(226) & “m ” Else Dau = “”
  conso = Application.WorksheetFunction.Round(Abs(conso), 0)
  conso = ” ” & conso
  conso = Replace(conso, “,”, “”, 1)
  Vt = InStr(1, conso, “E”)
  If Vt > 0 Then
    Sonhan = Val(Mid(conso, Vt + 1))
    conso = Trim(Mid(conso, 2, Vt – 2))
    conso = conso & String(Sonhan – Len(conso) + 1, “0”)
  End If
  conso = Trim(conso)
  Sochuso = Len(conso) Mod 9
  If Sochuso > 0 Then conso = String(9 – (Sochuso Mod 12), “0”) & conso
  Docso = “”
  I = 1
  Lop = 1
  Do
    N1 = Mid(conso, I, 1)
    N2 = Mid(conso, I + 1, 1)
    N3 = Mid(conso, I + 2, 1)
    Baso = Mid(conso, I, 3)
    I = I + 3
    If N1 & N2 & N3 = “000” Then
      If Docso <> “” And Lop = 3 And Len(conso) – I > 2 Then S123 = LOP2 Else S123 = “”
    Else
      If N1 = 0 Then
        If Docso = “” Then S1 = “” Else S1 = ” Kh” & ChrW(244) & “ng Tr” & ChrW(259) & “m”
      Else
        S1 = S09(N1) & ” Tr” & ChrW(259) & “m”
      End If
      If N2 = 0 Then
        If S1 = “” Or N3 = 0 Then
          S2 = “”
        Else
          S2 = ” L” & ChrW(7867)
        End If
      Else
        If N2 = 1 Then S2 = ” M” & ChrW(432) & ChrW(7901) & “i” Else S2 = S09(N2) & ” M” & ChrW(432) & ChrW(417) & “i”
      End If
      If N3 = 1 Then
        If N2 = 1 Or N2 = 0 Then S3 = ” M” & ChrW(7897) & “t” Else S3 = ” M” & ChrW(7889) & “t”
      ElseIf N3 = 5 And N2 <> 0 Then
        S3 = ” L” & ChrW(259) & “m”
      Else
        S3 = S09(N3)
      End If
      If I > Len(conso) Then
        S123 = S1 & S2 & S3
      Else
        S123 = S1 & S2 & S3 & Lop3(Lop)
      End If
    End If
    Lop = Lop + 1
    If Lop > 3 Then Lop = 1
    Docso = Docso & S123
    If I > Len(conso) Then Exit Do
 
 
  Loop
  If Docso = “” Then VND = “Kh” & ChrW(244) & “ng” Else VND = Dau & Trim(Docso) & ” ” & ChrW(272) & ChrW(7891) & “ng.”
Else
  VND = conso
End If
End Function
 
 
 
 
 
 

Vấn đề gõ tiếng việt trong lập trình VBA

VBA chưa hỗ trợ với bộ Unicode, Các ký tự hỗ trợ trong bảng mã Unicode mới chỉ được từ 0- 225 thôi. Nên các ký tự có mã unicode nhiều hơn sẽ hiển thị dấu (? )
Bởi vậy, để có thể gõ được tiếng việt trong VBA ta thực hiện theo 1 số cách thủ công như sau:
1. Gõ nội dung vào 1 ô trong bảng tính ( VD gõ vào ô A2) Thực hiện lệnh truy xuất nội dung của ô A2: Cells(1,2) = Sheets(“Sheet1”).cells(1,2).  Nhược điểm là các ô trong sheet phải có dữ liệu. Nếu vô tình xóa đi thì dữ liệu cũng sẽ mất.

2: Sử dụng phép nối chuỗi và hàm Chrw để viết code. VD: Viết chữ Lập trình = “L”&chrw(7853)&”p trình”. Đối với cách này mình phải nhớ và biết được bảng mã unicode cuả từng ký tự. Có thể dựa vào Bảng mã để tham chiếu

3. Sử dụng 1 hàm tự tạo (UniVBa) để dịch lại nội dung gõ trong sheet ra bảng Unicode. Từ đó nhập bản dịch vào bảng lập trình ( quay trở lại cách 2).
Đoạn code dịch như sau:

Function UniVba(TxtUni As String) As String
If TxtUni = “” Then
  UniVba = “”””””
Else
  TxtUni = TxtUni & ” “
  If AscW(Left(TxtUni, 1)) < 256 Then UniVba = “”””
  For n = 1 To Len(TxtUni) – 1
    uni1 = Mid(TxtUni, n, 1)
    uni2 = AscW(Mid(TxtUni, n + 1, 1))
    If AscW(uni1) > 255 And uni2 > 255 Then
      UniVba = UniVba & “ChrW(” & AscW(uni1) & “) & “
    ElseIf AscW(uni1) > 255 And uni2 < 256 Then
      UniVba = UniVba & “ChrW(” & AscW(uni1) & “) & “””
    ElseIf AscW(uni1) < 256 And uni2 > 255 Then
      UniVba = UniVba & uni1 & “”” & “
    Else
      UniVba = UniVba & uni1
    End If
  Next
  If Right(UniVba, 4) = ” & “”” Then
    UniVba = Mid(UniVba, 1, Len(UniVba) – 4)
  Else
    UniVba = UniVba & “”””
  End If
End If
End Function

Một số công cụ hỗ trợ

– Công cụ:
– VMWare hoặc Virtual Box
– Máy ảo Server 2012|2008 hoặc 2003
– Máy ảo Windows 10|Windows 7 hoặc XP