[Bài tập về VBA]: Cách cách thêm dòng mới vô CSDL đã sẵn (1 người xem)

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

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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,605
Được thích
22,925
Nghề nghiệp
U80
Ngày xuân xin mời các bạn có ham mê với VBA giải dùm mình vài bài tập đơn giản. Những bài này liên quan đến việc thêm dòng mới vô cơ sở dữ liệu (CSDL) đã sẵn có

Bài TD01: THÊM DÒNG THEO CHỈ SỐ ĐÃ CHO SẴN.

Gỉả dụ chúng ta có CSDL gồm vài ba cột, như sau:
Mã:
 Số HĐ  |ĐVT| Số lượng
F0113-[B]02[/B]|Cái|  123
F0113-[B]01[/B]|Kg |  131
F0113-[B]04[/B]|Yến|  213
F0113-[B]00[/B]|Lố |  217
F0115-[B]02[/B]|Cái|   73
Nhiệm vụ của bài đầu tiên này là ta cần thêm số dòng mới bên dưới dòng hiện hữu bằng với con số fíá cuối của cột [Số HĐ]
Xin cảm ơn các bạn đã & đang quan tậm!
 
Bài này các phần thêm dòng đã có một đống. Tôi chỉ giải phần tính số dòng.

Để giải, cách chính thống là viết một hàm. Hàm này nhận tham số là một chuỗi và trả về một Long, nếu tính không được thì trả về -1

Function SoCuoiChuoi(byVal s as String) as Long

Các cách tính:

1. Nếu trước số cần tìm luôn luôn là dấu - thì có 2 cách tính
1.1 Dùng hàm split chuỗi, lấy phần tử cuối cùng
1.2 Dùng hàm InStrReverse tìm dấu -, và dùng hàm Right lấy từ bên phải vị trí đó

2. Đọc ngược chuỗi cứ gặp một ký tự số (kt) thì kq = kq + (Code(kt)-48)*i^10 cho đến lúc gặp ký tự không phải số

3. Dùng RegExp object, chuỗi mẫu "\d+$"
 
Upvote 0
Bài TD1A: THÊM DÒNG THEO SỐ THỨ TỰ ĐÃ CÓ SẴN.

Gỉả dụ chúng ta có CSDL gồm vài ba cột, như sau:
Mã:
STT| Họ & Tên
3  | Hồ Ly
5  | Ca Lê
8  | Võ Yến
10 | Lố Tấn
12 | Lý Cẩm
Nhiệm vụ của bài này là ta cần thêm số dòng mới bên dưới dòng hiện hữu bằng với con số [STT] của số dưới liền kề trừ cho [STT] của nó & bớt đi 1 (VD: 5 - 3 = 2 nghĩa là ta thêm 1 dòng trắng)
Xin cảm ơn các bạn rất quan tậm đến đề tài này!
 
Upvote 0
Bài TD1A: THÊM DÒNG THEO SỐ THỨ TỰ ĐÃ CÓ SẴN.

Gỉả dụ chúng ta có CSDL gồm vài ba cột, như sau:
Mã:
STT| Họ & Tên
3  | Hồ Ly
5  | Ca Lê
8  | Võ Yến
10 | Lố Tấn
12 | Lý Cẩm
Nhiệm vụ của bài này là ta cần thêm số dòng mới bên dưới dòng hiện hữu bằng với con số [STT] của số dưới liền kề trừ cho [STT] của nó & bớt đi 1 (VD: 5 - 3 = 2 nghĩa là ta thêm 1 dòng trắng)
Xin cảm ơn các bạn rất quan tậm đến đề tài này!

Bây giờ thì các bạn đã hiểu tại sao ở bài #2, tôi nói "cách chính thống là viết một hàm" ?

Đó là kỹ thuật tách rời những đoạn lô gíc khác nhau ra riêng cho dễ kiểm soát.

Code bài #1 có thể giữ nguyên, chuyển sang bài #3 chỉ cần thay hàm tính số dòng cần thêm.
 
Upvote 0
Bài tập TD02: Thêm dòng sau mỗi tháng hoạt động kinh doanh & tính tổng của tháng

Giả dụ chúng ta có 1 CSDL gồm các trường sau:
PHP:
 Ngày CTừ | MaKho |Mã Hàng|Đơn giá|Số lượng| Th. Tiền
11/25/2011| DN TP |GGDinh | 40.0  |   1    |  40.0
11/25/2011| DLat  |GGDinh | 40.0  |   2    |  80.0
12/12/2011| D An  |GGDinh | 40.5  |   2    |  81.0
12/19/2011|CT CMT8|GGDinh | 40.5  |   1    |  40.5
12/28/2011|CT 30/04|GGDinh| 40.5  |   2    |  81.0

Để tiện quan sát nhanh doanh thu các mặt hàng, người ta muốn thêm 1 dòng trống sau mỗi tháng có kinh doanh; Thêm nữa tại các cột [Số lượng] & [TTiền] người ta muốn có con số tổng cộng hai số liệu này trong tháng.

Các bạn nào rỗi giúp giải bài này với!

Chúc xuân vui vẻ!
 

File đính kèm

Upvote 0
Chơi vầy cho nhanh được không Bác Sa?

Mã:
Sub ChenTCong()
Dim Rws As Long
Application.ScreenUpdating = False
With Sheet1
    Rws = .Range("A65000").End(3).Row
    .Range("H3:H" & Rws).Value = "=TEXT(RC[-7],""mm/yyyy"")"
    .Range("A2:H" & Rws).Subtotal 8, xlSum, Array(6, 7), True, False, True
    Rws = .Range("A65000").End(3).Row
    .Range("A3:H" & Rws + 2).Value = .Range("A3:H" & Rws + 2).Value
    .Range("H3:H" & Rws + 2).Value = Empty
    .Range("A2:H" & Rws + 2).RemoveSubtotal
End With
Application.ScreenUpdating = True
End Sub

theo tôi biết thì những người ở trên trừ bạn ra , đem số tuổi của tôi cộng thêm 30 nữa chưa chắc bằng được họ !$@!!!$@!!
đây là dịp may để chúng ta được học tập họ , hãy chung tay với tôi "khai thác" họ bạn nhé , khi tôi rảnh tôi sẽ cố gắng cùng bạn giải các bài tập của họ . --=0--=0
 
Upvote 0
Hai bạn mà tham gia giải những bài tập này, thì những anh chị em khác mất nhờ.

Mình cho rằng dạng bài tập này có nhiều cách làm, từ sơ cấp đến trung cao cấp VBA đều làm được.

Nhưng dù sao cũng rất cám ơn hai bạn, đã tham gia & cổ võ cho fong trào!

Chúc mừng xuân mới!
 
Upvote 0
Bài tập XD00: Xóa những dòng đã thêm do bài TD02 đem lại

Ngày xuân rãnh rỗi, xin mời các bạn tiếp tục với những loạt bài này.


& Chúc xuân vui vẻ!
 
Upvote 0
Bài tập có lời giải

BT 01:
Đề bài được nêu như hình đính kèm
& sau đây là 1 trong số các lời giải:

PHP:
Option Explicit
Sub ThemDong()
 Dim Arr(), Rng As Range
 Dim Rws As Long, Col As Byte, J As Long, W As Long, Dm As Byte
 
 Set Rng = [B3].CurrentRegion:          Rws = Rng.Rows.Count:
 Col = Rng.Columns.Count:               Arr() = Rng.Offset(1).Value
 ReDim dArr(1 To Col * Rws, 1 To Col)
 For J = 1 To Rws
    If Arr(J, 1) = "" Then Exit For
    W = W + 1
    For Dm = 1 To Col
        dArr(W, Dm) = Arr(J, Dm)
    Next Dm
    For Dm = 6 To Col
        If Arr(J, Dm) = "" Then
            Exit For
        Else
            W = W + 1:                  dArr(W - 1, 3) = Arr(J, Dm)
            dArr(W, 1) = Arr(J, 1):     dArr(W, 2) = Arr(J, 2)
        End If
    Next Dm
    If Arr(J, 6) <> "" And W > 1 Then W = W - 1
 Next J
 If W Then
    [M4].Resize(W, Col).Value = dArr()
 End If
End Sub
(http://webketoan.com/threads/51880-giup-em-tu-dong-chen-dong-trong-excel/)

BT 02:
Thêm dòng trắng giữa dòng chứa số chứng từ không liên tục (bằng code VBA )
http://www.giaiphapexcel.com/forum/...-các-số-dòng-chứng-từ-cách-nhau-bằng-code-VBA
 

File đính kèm

  • Them Dong.JPG
    Them Dong.JPG
    49.8 KB · Đọc: 16
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom