Chào mừng đến với Diễn đàn Dân Kế Toán - Kế toán tổng hợp thực tế.
Trang 1 của 6 123 ... CuốiCuối
Kết quả 1 đến 10 của 58
  1. #1
    Ngày tham gia
    Aug 2015
    Bài viết
    0

    Các cách thêm dòng mới vô 1 CSDL (cơ sở dữ liệu) đã sẵn

    BÀI I: THÊM DÒNG MỚI THEO SỐ LƯỢNG CHO TRƯỚC

    Giả dụ tôi có CSDL mà trong trường [Ma] có gồm 2 nhóm dữ liệu, như sau:



    Mã nguồn PHP:
    [COLOR=#000000]
    [/COLOR][COLOR=#DD0000]'Ma' [/COLOR][COLOR=#007700]|. . . [/COLOR][COLOR=#0000BB]102C40047 2[/COLOR][COLOR=#007700]|. . . [/COLOR][COLOR=#0000BB]2114A0054 3[/COLOR][COLOR=#007700]|. . . [/COLOR][COLOR=#0000BB]10240V947 8[/COLOR][COLOR=#007700]|. . . [/COLOR][COLOR=#0000BB]21144G054 4[/COLOR][COLOR=#007700]|. . . . . . [/COLOR
    Nhiệm vụ iêu cầu là hãy viết macro để nó thay ta thêm số dòng mới dưới mỗi dòng dữ liệu, sao cho, số dòng thêm đúng bằng chỉ số đứng riêng fía cuối của trường [Ma]

    Macro đó có nội dung như sau:



    Mã nguồn PHP:
    [COLOR=#000000]
    Option Explicit Sub InsertRowsxlUp[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]1 Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]jJ [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]NumFrom [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Byte Rws [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]A2[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlDown[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row 3 [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]jJ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rws To 2 Step [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]1 With Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]jJ[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]5 NumFrom [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]CLng[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Mid[/COLOR][COLOR=#007700](.[/COLOR][COLOR=#0000BB]Value[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]InStr[/COLOR][COLOR=#007700](.[/COLOR][COLOR=#0000BB]Value[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700]) + [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]9[/COLOR][COLOR=#007700])) .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]NumFrom[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Insert 7 End With Next jJ End Sub [/COLOR
    Xin lưu í: Macro đang coi trường [Ma] hiện đang ở cột 'A'

  2. #2
    Ngày tham gia
    Aug 2015
    Bài viết
    149
    Ðề:Điền đầy bằng các dòng trống vô 1 CSDL sẵn có số thứ tự không liên tục

    BÀI II THÊM DÒNG MỚI ĐỂ CÓ TRẬT TỰ CHO TRƯỚC
    Ví dụ ta có CSDL như sau:


    Mã:
    STT  HTen    Phái   NgSinh
    3   Hà My     Nam    4/1/75
    5   Hà Vy     Nữ     1/4/75
    ' . . . . . . . . '
    Giờ ta muốn thêm 2 dòng trống trên chàng Hà My & 1 dòng trên nàng Hà Vy, để trở thành như sau:



    Mã:
    1
    2
    3   Hà My     Nam    4/1/75
    4
    5   Hà Vy     Nữ     1/4/75
    ' . . . . . . . . '
    (Có nghĩa là: Thêm 2 dòng cho chàng Hà My ( số 3) & 1 dòng cho nàng Hà Vy (số 5))

    Chuyện như vậy sẽ nhanh chóng & không khó, một khi ta có trong tay macro như sau



    Mã:
    Option Explicit
    Sub ThemCacDongTrong()
     Dim Rng As Range, sRng As Range
     Dim Max_ As Long, jJ As Long
     
     Sheets("GPE1").Select:                         Columns("A:J").Delete
     ThisWorkbook.Worksheets("S0").[B2].CurrentRegion.Copy Destination:=[A1]
     
     Set Rng = Range([A2], [A65500].End(xlUp))
     Max_ = Application.WorksheetFunction.Max(Rng)
     For jJ = 1 To Max_
        Set sRng = Rng.Find(jJ, , xlFormulas, xlWhole)
        If sRng Is Nothing Then
            [A65500].End(xlUp).Offset(1).Value = jJ
        End If
     Next jJ
     Set Rng = [B2].CurrentRegion.Offset(1)
     Rng.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, Orientation:=xlTopToBottom
     Randomize:             [A1].Interior.ColorIndex = 34 + 9 * Rnd() \ 1
    End Sub
    Ghi chú theo macro ta có: CSDL nguồn tại trang tính 'S0';
    Kết quả mà macro đem lại tại trang tính có tên 'GPE1'

  3. #3
    Ngày tham gia
    Feb 2016
    Bài viết
    0
    Ðề: Xin diễn dịch các câu lệnh từ ngôn ngữ VBA sang ngôn ngữ tiếng Việt:

    /-)ể hiểu rõ hơn bản chất của vấn đề, mình xin dừng 1 chút diễn dịch macro ở bài 01 sang ngôn từ tiếng Việt.
    (Các dòng lệnh trong macro nói trên vừa được đánh số để tiện chúng ta theo dõi)

    I./ Dịch từ ngôn ngữ VBA sang ngôn từ tiếng Việt

    Dòng lệnh đầu tiên iêu cầu các biến cần dùng đều fải khai báo (& nên kh ai báo tường minh)

    Dòng lệnh thứ 2: Chỉ ra tên của macro, nó là "InsertRowsxlUp" do người viết ra nó tự ấn định;
    Tất nhiên ta có thể đổi lại nếu muốn, trong những trường hợp như vậy ta cũng cần có vốn liếng về lập trình VBA chút đĩnh!.

    Dòng lệnh mang số 1 (gọi tắc là D1) Khai báo các biến cần sử dụng trong chương trình.
    Cụ thể là 3 biến, mà trong nó có 2 mang kiểu dữ liệu Long & 1 có kiểu Byte; Thật ra chúng tất cả là dạng số, nhưng fạm vị sử dụng có khác nhau; Mà cụ thể hơn, kiểu Byte chỉ xài tới 255 mà thôi; Kiểu dữ liệu này chỉ có thể biểu thị số cột trong trang tính E2003, Nó không được xài để biểu thị số dòng (E2003) hoặc số cột (trong E>2003)

    D2: Xác định dòng cuối có dữ liệu thuộc cột 'A' gán cho biến Rws đã khai báo.

    D3: Tạo vòng lặp duyệt qua các dòng có dữ liệu trong cột 'A'
    Vòng lặp này kết thúc ở D8
    Nhưng chúng ta cần lưu í rằng vòng lặp duyệt từ dưới lên trên (từ dòng cuối chứa dữ liệu của 'A' lên đến dòng 2)
    Còn tại sau fải duyệt như vậy, chúng ta sẽ đề cập sau!:cuccu:

    D4: Tuyên cáo là ta làm việc với ô thuộc cột 'A' có chỉ số dòng ứng với chỉ số của biến Rws trong vòng lặp.
    Kết thúc công việc này tại D8

    D5 Lấy chữ số cuối của dữ liệu chứa trong ô đang khảo sát (Cells(jJ,"A").Value) đem gán vô biến NumFrom đã khai báo
    Nhưng có 2 vấn đề ở đây cần lưu í:
    (1) Độ dài của chữ số này có thể trên 1 chữ số, nên để xác định nó ta fải nhờ hàm InStr() trong VBA để định vị trí khoảng trống trong chuỗi. Sau đó là cắt lấy các ký tự sau vị trí đó;
    (2) trước khi muốn gán vô biến NumFrom mà ta khai báo kiểu Long, nên cần fải dùng 1 hàm nữa trong VBA để chuyện từ số dạng chuỗi sang số dạng Long

    D6: Thêm dưới ô đang khảo sát một số dòng, đúgn bằng số lượng chứa trong biến NumFrom

    Các dòng lệnh tiếp theo ta đã đề cập bên trên, ngoài dòng lệnh cuối cùng bắt buộc macro nào cũng fải có, đó là End Sub

    II./ Tại sao ta fải duyệt vòng lặp từ dưới lên:

    Vì khi bạn thêm 1 dòng mới vô trang tính, thì dữ liệu của các dòng fía dưới dòng đó nếu có sẽ bị đẩy xuống 1 dòng;
    Còn trong iêu cầu của bài đề ra, ta cần thêm số dòng bất kỳ nhiều ít khác nhau, tuỳ thuộc vô chỉ số đứng cuối của ô đang khảo sát;
    Vậy nên giải thuật dễ là ta duyệt từ dưới lên

    (/ậy câu hỏi đặt ra, là duyệt từ trên xuống, bắt đầu từ dòng 2 có được không?
    Trả lời là được; Nhưng giải thuật sẽ là khó hơn như dưới đây & nói thêm: Các bạn tự nghiên cứu nhe!

    III./ Cách thêm dòng từ trên xuống:



    Mã nguồn PHP:
    [COLOR=#000000]
    Sub InsertRows[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Dim nDataRow [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]nNumOfRows [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long With ThisWorkbook[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#DD0000]'Change Sheets(x) To Suit' [/COLOR][COLOR=#0000BB]nDataRow [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]2 [/COLOR][COLOR=#DD0000]'Assumes You Have A Header Row' [/COLOR][COLOR=#007700]Do [/COLOR][COLOR=#0000BB]Until [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nDataRow [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"" 'Get Rows To Insert' [/COLOR][COLOR=#0000BB]nNumOfRows [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Right[/COLOR][COLOR=#007700](.[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nDataRow[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]Len[/COLOR][COLOR=#007700](.[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nDataRow[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700])) - [/COLOR][COLOR=#0000BB]InStr[/COLOR][COLOR=#007700](.[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nDataRow[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#DD0000]" "[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#DD0000]'Insert Required Rows' [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nDataRow [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]nNumOfRows[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Insert Shift[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlDown nDataRow [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]nDataRow [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]nNumOfRows [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1 [/COLOR][COLOR=#DD0000]'Increment' [/COLOR][COLOR=#0000BB]Loop End With End Sub [/COLOR
    (Macro này tham khảo tại Excel Programming / VBA / Macros)

    (húc các bạn thành công!

  4. #4
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Ðề: Các cách thêm dòng mới vô 1 CSDL (cơ sở dữ liệu) đã sẵn

    BÀI IV THÊM 2 DÒNG CHO MỖI RECORD ĐÃ SẴN.
    Trong hình dưới đây ta có dữ liệu ban đầu thể hiện ở Table A
    Yêu cầu của đề bài là cứ mỗi dòng dữ liệu thêm 2 dòng;
    Hơn nữa, trên các dòng thêm cần nhập sẵn dữ liệu lần lượt là chuỗi 'A' hay 'B' & các chuỗi này được canh fải trong cột [Ten]
    (Như Table B trong hình)



    Toàn bộ iêu cầu này sẽ được macro sau đây thực hiện nghiêm chỉnh



    Mã nguồn PHP:
    [COLOR=#000000]
    Option Explicit Sub ProgrammingAdd2Rows[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Dim Cls [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Dim MyStr [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Sheet2"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A:A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Insert Shift[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlToRight Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rows[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"C"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"GPE.COM"[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"GPE.COM" [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]Each Cls In Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"C2:C" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]MyStr [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Cls[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Row[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Cls[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, -[/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]MyStr With Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rows[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) .[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]MyStr [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#DD0000]"A"[/COLOR][COLOR=#007700]: .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]MyStr [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#DD0000]"B"[/COLOR][COLOR=#007700]: .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"B" [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]HorizontalAlignment [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]xlRight End With Next Cls [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]A1[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]CurrentRegion[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Select Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sort Key1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A2"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]Order1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlAscending[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Header[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlYes[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]OrderCustom[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1 Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A:A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Delete End Sub [/COLOR
    Nếu nghiên cứu kỹ các giải fáp trong mỗi macro, các bạn sẽ thấy thích thú vì sự khác biệt giứa chúng

    Ở macro bài đầu & bài 3 là ta thêm dòng đúng như í đồ nhiệm vụ iêu cầu (Là thêm dòng; tuy cách thêm của mỗi macro mỗi khác)

    Còn macro ở bài 2, chúng ta thấy nó thực tế ra không có lệnh thêm dòng nào cả;
    Mà nó chỉ thêm số liệu thích ứng vô các dòng trống; Rồi sau rốt, nó đi xếp lại theo trật tự của cột là được theo iêu cầu đã đề ra.

    Còn macro ở bài này các bạn thử nghiên cứu trước xem sao?!

    Thân ái & chúc thành công!

  5. #5
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Thêm 1 cách thức thêm dòng nữa cho bài 1

    BÀI V MỘT CÁCH THÊM DÒNG KHÁC:

    KHÔNG FẢI THÊM DÒNG MÀ Y NHƯ THÊM DÒNG
    :xinchao:​
    2ua các bài I, II & IV ta đã liệt kê 2 biện fáp thêm dòng cho 1 CSDL (bài I & II);
    Mà trong đó cách đơn giản nhất (trong 2 cách) là thêm dòng từ dưới đáy CSDL lên trên.
    Còn cách thêm từ trên thì thuật toán chỉ giành cho những người "cao siêu" về trí tuệ;

    Bài này xin giới thiệu với các bạn cách thứ 3 dung hòa giữa 2 cách trên

    Xin fép các bạn mô tả lại CSDL ở #1, nhưng có thêm chỉ số dòng tương ứng của các records


    Mã:
    1|Ma         |. . .
    2|102C40047 2|. . .
    3|2114A0054 3|. . .
    4|10240V947 8|. . .
    5|21144G054 4|. . .  
    6|. . . .
    Các bước giải thuật của fương án này sẽ là:

    (1) Thêm cột vô ng ay trước cột 'A' hiện đang là trường [Ma]
    (1.1) Tiếp sau đó, ta ghi chuỗi gì vô [A1] & ô trên cột 'A' ứng với dòng cuối chứa dữ liệu của trường [Ma] (bây chừ là thuộc cột 'B')



    Mã:
     |   A   |   B       | C
    1|GPE.COM|Ma         |. . .
    2|       |102C40047 2|. . .
    3|       |2114A0054 3|. . .
    4|       |10240V947 8|. . .
    5|GPE.COM|21144G054 4|. . .  
    6|       |. . . .
    (2) Ta lập 1 macro để duyệt từ dòng 2 đến dòng cuối có dữ liệu của cột 'B'
    Trong quá trình duyệt qua mỗi dòng record ta tiến hành 2 động tác sau:
    (2.1) Tại cột 'A' dòng đang duyệt ta sẽ ghi chuỗi gồm kí tự 'A' & chỉ số dòng của nó;
    (2.2) Tại ô ngay dưới ô cuối có dữ liệu của cột 'A' ta ghi chuỗi cũng gồm kí tự 'A' cùgn với chỉ số dòng như trên, nhưng thêm sau nó cái số mà đề bài iêu cầu ta thêm dòng.
    Cụ thể để các bạn dễ hình dung: Nếu ta đang khảo sát dòng thứ 2 (đứng tại dòng 2 của CSDL)
    Thì ta thêm chuỗi 'A2' tại ô [A2]
    & tại [A6] ta nhập chuỗi 'A22'
    Trong đó chỉ số 2 đầu chỉ ra dòng đang khảo sát, số 2 sau là số dòng cần thêm;
    (2.3) Chép dữ liệu của ô cuối cùng cột 'A' này xuống ngay các ô dưới nó; Sao cho tổng các ô chứa cùng dữ liệu này đúng bằng số dògn cần chép (trường hợp đang khảo sát dòng 2, ta cần chỉ chép thêm 1 dòng nữa =>2)

    Ví dụ sau khi khảo sát xong dòng 3 ta có hình ảnh sau:



    Mã:
      |  A    |   B       | C
    1 |GPE.COM|Ma         |. . .
    2 | A2    |102C40047 2|. . .
    3 | A3    |2114A0054 3|. . .
    4 |       |10240V947 8|. . .
    5 |GPE.COM|21144G054 4|. . .  
    6 |  A‚22  |           |. . . . 
    7 |  A‚22  |           |. . . . 
    8 |  A‚33  |           | . . . . 
    9 |  A‚33  |           |  . . . . 
    10|  A33  |           |. . . .
    Có thể có bạn thắc mắc:

    (*) Là làm sao ta có thể chép; Thực ra nếu ta biết fương thức Resize(m,n) trong VBA thì chuyện này như trở bàn t ay thôi!

    (*) Vậy chuỗi 'GPE.COM ta thêm dòng cuối cột 'A' ban đầu làm chi vậy?
    Nó dùng làm mốc tạm thời để ta biết nơi cần chép khi khảo sát dòng đầu tiên
    & ta khỏi lăn tăng vì sự tồn tại của nó chỉ trước khi ta khảo sát dòng của chính nó mà thôi.

    (3) Tiến hành chọn toàn bộ CSDL & vô menu Data để xếp theo trật tự của cột 'A'

    (4) Bước cuối là xóa cột 'A' này dđể trang tính ta về nguyên trạng theo thứ tự cột như ban đầu.


    /-)ó là mình đã trình bày xong cách suy nghĩ để có được 1 giải thuật.

    Một khi ta đã có bước đi, thì chuyện viết thành những dòng lệnh cụ thể sẽ đơn giản như đang zỡn zậy thôi.

    Rất mong bạn nào có thể hiện thực hóa tiếp í tưởng này & chúc thành công!

  6. #6
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề:Cách nào thêm dòng "Cộng số phát sinh" và số dư khi kết thúc cuối mỗi tháng

    BÀI VI: THÊM DÒNG FÁT SINH SAU MỖI THÁNG GIAO DỊCH.

    Các bài trước đây ta thấy có vẻ xa thực tế; Hôm nay ta giải quyết bài toán sát sườn hơn; Đó là thêm 2 dòng "Cộng số phát sinh" & "số dư " khi kết thúc cuối mỗi tháng giao dịch. Xin mời các bạn xem hình dưới đây:
    [/IMG]

    Vì là giao dịch theo í khách hàng, cho nên không fải lúc nào cuối tháng cũng có giao dịch, cũng như ngày cuối tháng có thể có nhiều hơn 1 giao dịch.

    Bỡi vậy việc tìm cho được dòng giao dịch cuối cùng của 1 tháng là không đơn giản!

    Fương án của chúng ta sẽ là:

    Dùng AdvancedFilter (bằng VBA) lọc riêng giao dịch từng tháng;

    Sau đó ta tìm ngày cuối giao dịch của tháng; Chỉ khi đó ta sẽ tìm ra lần giao gdịch cuối cùng trong tháng.

    Cũng chỉ khi ta đã lọc giao dịch từng tháng ta mới biết tổng số tiền fát sinh trong tháng (gởi vô hay rút ra). & khi đó ta mới có số liệu để mà ghi vô 2 dòng này theo iêu cầu đề ra của đầu bài.

    (Xem trong hình: dòng 94 & 95 cũng như 203 & 204)

    Sau đây mình đưa lên toàn bộ nội dung macro để các bạn tiện trong việc xem trước;

    Sau đó mjình sẽ giải thích thêm các câu lệnh trong macro này:



    Mã nguồn PHP:
    [COLOR=#000000]
    Option Explicit Sub AddVancedFilter[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Dim Rng [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]sRng [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]WF [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Object[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Rg0 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]tRg [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range Dim MyAdd [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Format_ [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SFS [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SDu [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Th0 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]ThM [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]jj [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Byte[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Dat [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double Dim Goi [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Rut [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]SoDu [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double Sheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"112NN"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select SFS [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]AD1[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]SDu [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]ad2[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value Set WF [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]WorksheetFunction Set Rng [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]B10[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]CurrentRegion[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Rows[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count Set Rng [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]A10[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Columns[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Set Rg0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700]): [/COLOR][COLOR=#0000BB]Format_ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rg0[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]NumberFormat Rg0[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]NumberFormat [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"mm/dd/yyyy" [/COLOR][COLOR=#0000BB]Th0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WF[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Min[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700])): [/COLOR][COLOR=#0000BB]ThM [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WF[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Max[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]SoDu [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]H8[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]jj [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Month[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Th0[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]To Month[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]ThM[/COLOR][COLOR=#007700]) [[/COLOR][COLOR=#0000BB]aa5[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]DateSerial[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Year[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Th0[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]jj[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [[/COLOR][COLOR=#0000BB]aB5[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]DateSerial[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Year[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Th0[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]jj [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Rng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]AdvancedFilter Action[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlFilterCopy[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]CriteriaRange[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range _ [/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"AA1:AB2"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]CopyToRange[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"AA10:AH10"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]Unique[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]False Dat [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WF[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Max[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000BB]AA10[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Goi [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WF[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000BB]Af10[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700])): [/COLOR][COLOR=#0000BB]Rut [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WF[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([[/COLOR][COLOR=#0000BB]Ag10[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700])) [/COLOR][COLOR=#0000BB]Set sRng [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rg0[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Find[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Format[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Dat[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"mm/dd/yyyy"[/COLOR][COLOR=#007700]), , [/COLOR][COLOR=#0000BB]xlValues[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]xlWhole[/COLOR][COLOR=#007700]) If [/COLOR][COLOR=#0000BB]Not sRng Is Nothing Then MyAdd [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]sRng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Address [/COLOR][COLOR=#007700]Do [/COLOR][COLOR=#0000BB]Set tRg [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]sRng Set sRng [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rg0[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]FindNext[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]sRng[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Loop [/COLOR][COLOR=#007700]While [/COLOR][COLOR=#0000BB]Not sRng Is Nothing [/COLOR][COLOR=#007700]And [/COLOR][COLOR=#0000BB]sRng[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Address [/COLOR][COLOR=#007700]<> [/COLOR][COLOR=#0000BB]MyAdd tRg[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Insert With tRg[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#DD0000]' *2' [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]SFS [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Right[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"0" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]CStr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]jj[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Goi[/COLOR][COLOR=#007700]: .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](, [/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rut [/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]SDu [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Right[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"0" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]CStr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]jj[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]SoDu [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]SoDu [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Goi [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]Rut[/COLOR][COLOR=#007700]: .[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]4[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]SoDu End With [/COLOR][COLOR=#007700]Else [/COLOR][COLOR=#0000BB]MsgBox [/COLOR][COLOR=#DD0000]"Nothing"[/COLOR][COLOR=#007700], , [/COLOR][COLOR=#0000BB]jj End [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Next jj End Sub [/COLOR
    Bổ sung đường dẫn của file đính kèm: Th�m d�ng "C?ng s? ph�t sinh " m?i th�ng
    (Trong file có 2 macro, các bạn chỉ nên quan tâm macro đang có ở module thôi!

  7. #7
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Cách nào thêm dòng "Cộng số phát sinh" và số dư khi kết thúc của mỗi tháng (fần cuối)

    /(/hiệm vụ của chúng ta sau khi thêm 2 dòng vào sau mỗi tháng giao dịch, là ta fải thêm dữ liệu mới vô chúng; Mà cụ thể công việc của chúng ta fải là:

    (1) Thêm định danh của các dòng này
    (Các định danh này ta thêm vào cột 'D' của các dòng mới)
    Dòng đầu ta cần thêm chuỗi, như "Cộng fát sinh tháng 01"
    Nhận xét: Chuỗi này bao gồm 2 cấu tử, cấu tử đầu là chuỗi thật sự, cấu tử sau là con số chỉ tháng giao dịch;

    (/ề các con số này thì quá dễ, vì ta sẽ lấy ra từ vòng lặp trích lọc dữ liệu lần lượt của từng tháng
    ;
    (/ề chuỗi ta sẽ có fiền 1 xíu, do VBA không được UNICode hỗ trợ, nên cách làm trong macro là:

    Lấy đoạn văn bản này trong 1 ô sẵn ghi trên bản tính; Đó là ô [AD1] trên '112NN' & ghi lên dòng vừa thêm mới
    (Chuỗi trong dòng thứ 2 cũng cách làm tương tự)

    Như vậy ta xong fần định danh của dòng; Tiếp theo sẽ là các số liệu tổng hợp từng tháng theo iêu cầu

    (2) Thêm số liệu fát sinh của tháng tương ứng

    (2.1) Số liệu fát sinh gồm có số gởi vào & số lượng tiền rút ra;
    Các số liệu này không mấy khó tìm ra, một khi ta đã dùng fương thức AdvancedFilter để lọc ra từng tháng; (Kết quả lọc các tháng luôn thể hiện tại vùng dữ liệu bao bỡi các cột [AA:AH] bắt đầu từ dòng 10 trở đi (trang tính đã nêu)
    Một khi ta có số liệu của lần lượt từng tháng, thì việc lấy số liệu của tháng là chuyện trở bàn tay (& xin fép tôi lướt qua fần này).

    (2.2) Tìm số dư cuối mỗi tháng

    Để giải chuyện này, ta fải bắt đầu từ ô [H8], nơi đang ghi số dư đầu kì
    Ta cần sao lưu số này vô biến (trong macro có tên khai báo là 'SoDu'

    /(/hư vậy, sau mỗi lần ta tìm & ghi số fát sinh trong tháng thì ta chỉ việc tìm số dư sau tháng đó;
    Số dư này từ fép toán cộng đại số sau đây:

    SoDu (Tháng này) = SoDu (Kì trước) + Số gởi vô - Số rút ra


    SoDu này sẽ được chúng ta ghi xuống cột 'H' của dòng thứ 2 mới thêm & nó vẫn trong bộ nhớ cho lần tính kế tiếp (Lúc đó nó lại trở thành SoDu (kì trước) trong biểu thức trên

    /(/hư vậy là chúng ta kết thúc con đường chông gai rồi đó, các bạn à!

    (húc các bạn nhiều thành công.

    :dotphao:

  8. #8
    Ngày tham gia
    Mar 2016
    Bài viết
    0
    Ðề: Các cách thêm dòng mới vô 1 CSDL (cơ sở dữ liệu) đã sẵn



    BÀI VII THÊM MỘT DÒNG SAU MỖI DỰ ÁN.
    :xinchao:​
    Giả dụ mình có CSDL liệt kê các project như dưới đây:



    Mã nguồn PHP:
    [COLOR=#000000]
    1[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0001 2[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0001 3[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0001 4[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0001 5[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0001 6[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0002 7[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0002 8[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0002 9[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0003 10[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]000A 11[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]000A 12[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]000A 13[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0005 14[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0005 15[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]0005 16[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]000F 17[/COLOR][COLOR=#007700]|[/COLOR][COLOR=#0000BB]Pro[/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000BB]000F[/COLOR] 
    Giờ, nhiệm vụ đề ra cho mình là thêm 1 dòng mới sau mỗi project để được như sau:



    Mã:
      1|Pro-0001
      2|Pro-0001
      3|Pro-0001
      4|Pro-0001
      5|Pro-0001
       |
      6|Pro-0002
      7|Pro-0002
      8|Pro-0002
       |
      9|Pro-0003
       |
     10|Pro-000A
     11|Pro-000A
     12|Pro-000A
       |
     13|Pro-0005
     14|Pro-0005
     15|Pro-0005
       |
     16|Pro-000F
     17|Pro-000F
    . .|. . . 
    /(/hiệm vụ này dễ thực thi, nếu ta có macro nội dung sau:



    Mã nguồn PHP:
    [COLOR=#000000]
    Sub InsertRowForProject[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Timer_ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Timer Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B1"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select [/COLOR][COLOR=#007700]While [/COLOR][COLOR=#0000BB]ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]<> [/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]<> [/COLOR][COLOR=#0000BB]ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700](-[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value Then ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]EntireRow[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Insert ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select [/COLOR][COLOR=#007700]Else [/COLOR][COLOR=#0000BB]ActiveCell[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select End [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Wend [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]F65500[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Timer [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]Timer_ End Sub [/COLOR
    Theo như nội dung macro, các Project của chúng ta đang được liệt kê tại cột 'B'
    Cái tinh tế trong macro này là người ta (Excel Programming / VBA / Macros) sử dụng vòng lặp Do . . . Loop với bước nhảy tùy muốn.

    :khakha:​

  9. #9
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Các cách thêm dòng mới vô 1 CSDL đã sẵn (Bài VIIA)

    :dotphao:​
    BÀI VIIA THÊM DÒNG SAU MỖI NHÓM DỮ LIỆU GIỐNG NHAU CỦA 1 TRƯỜNG
    :xinchao:​
    Thực ra dữ liệu vẫn như bài VII bên trên (chỉ là đổi cách gọi ngỏ hầu đỡ nhàm chán & . . . )
    (/ấn đề trọng tâm của bài này là tốc độ (thời gian) thực hiện hoàn chỉnh macro một cách nhanh nhứt.

    Ta giả dụ ở #7 (bài VII) ta có hơn trăm dự án (cỡ 1.000 dòng records), macro sẽ fải chạy trong vòng 2 giây; Đó là macro chỉ chạy trên 1 cột đơn (cột 'B') mà thôi; Thời gian sẽ kéo dài thêm nếu trong thực tế có thêm các trường khác sau nó như
    [Journal], [Puchaser Decs.], [Units], [Qty.], [Cost],. . . . , [Project Total] . . . . đi kèm & điều này là tất iếu trong 1 CSDL.
    Thời gian lúc đó sẽ tăng thêm đán kể.

    /-)ể giảm thời gian "chạy tàu" đi cỡ 5 lần, mình xin giới thiệu 1 macro dùng mảng để tăng tốc cho nó.

    (/ấn đề ở đây không fải là tiết kiệm thời gian, điện năng & nhiều thứ khác. . . ; mà chủ iếu là giới thiệu với các bạn 1 thuật toán rất đán quan tâm một khi ta fải làm việc với 1 CSDL đồ sộ (cỡ vạn dòng)

    Macro có nội dung như sau:
    :deny2:​

    Mã nguồn PHP:
    [COLOR=#000000]
    Option Explicit Dim Timer_ [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double Sub InsertBlankRowsForArr[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]fF [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long Timer_ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Timer Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Rows[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"B"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row ReDim Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To 2 [/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]ReDim ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]() = [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B1:B" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]zZ[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A0" [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Rws Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]fF [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) <> [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Then zZ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]fF [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]fF [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1 Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]zZ[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]fF [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]zZ End [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]Next wW Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A1:A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]2 [/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]WorksheetFunction[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Transpose[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A:B"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sort Key1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A1"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]Order1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlAscending[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Header[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlGuess[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]_ OrderCustom[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]MatchCase[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]False Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"A:A"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Select Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ClearContents [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]H65500[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Offset[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Timer [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]Timer_ End Sub [/COLOR
    :k5211829:​

  10. #10
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Ðề: Các cách thêm dòng mới vô 1 CSDL đã sẵn (Bài VII8-)

    BÀI VIIB: VỪA THÊM DÒNG VỪA THÊM DÒNG TỔNG LƯỢNG TRONG PROJECT

    Trong hình dưới đây mô tả CSDL về các project trong 1 kỳ của 1 cơ quan

    [/IMG]

    Phần fía trên là CSDL nguyên thủy; Còn fần bên dưới là kết quả sau khi đã chạy macro

    Nội dung macro như dưới đây:


    Mã nguồn PHP:
    [COLOR=#000000]
    Sub InsertBlanlRowWithToTal[/COLOR][COLOR=#007700]() [/COLOR][COLOR=#0000BB]Dim Rws [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]ToTal [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Double[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Long Dim Cls [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Range Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"H:H"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Insert Shift[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlToRight Rws [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Rows[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Count[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"B"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]xlUp[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row ReDim Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 To 2 [/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1 To 2[/COLOR][COLOR=#007700]): [/COLOR][COLOR=#0000BB]ReDim ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]2 To Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]() = [/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"B2:B" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"Project ToTal"[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"GPE.COM" [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A01" [/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]2 To Rws Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]zZ ToTal [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]ToTal [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"F"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) <> [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) And [/COLOR][COLOR=#0000BB]ATmp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) <> [/COLOR][COLOR=#DD0000]"" [/COLOR][COLOR=#0000BB]Then zZ [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]1 Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]1 [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Rws [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]zZ[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#DD0000]"A" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]zZ [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]zZ[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]wW[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]ToTal ToTal [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0 End [/COLOR][COLOR=#007700]If [/COLOR][COLOR=#0000BB]GPE[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Next wW [/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000BB]h1[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]Resize[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]2 [/COLOR][COLOR=#007700]* [/COLOR][COLOR=#0000BB]Rws[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]2[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Value [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Arr[/COLOR][COLOR=#007700]() [[/COLOR][COLOR=#0000BB]h1[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]CurrentRegion[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sort Key1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"I2"[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000BB]Order1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlAscending[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Header[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlGuess[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]_ OrderCustom[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]MatchCase[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]False[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Orientation[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000BB]xlTopToBottom Columns[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"I:I"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]ClearContents End Sub [/COLOR

 

 
Trang 1 của 6 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •