Lập trình VBA để tạo bảng biểu trong Excel (2 người xem)

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

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

bee111

Thành viên mới
Tham gia
19/8/11
Bài viết
35
Được thích
1
Xin chào toàn thể anh chị em trên diễn đàn.
- em muốn nhờ các bác viết hộ em đoạn code VBA để chạy bảng biểu như sau:
- em có 1 file nguồn Excel gồm 1 sheet có 4 cột A_B_C_D_E trong đó dữ liệu gồmcác bảng số liệu khác nhau.
- Các bác viết giúp em đoạn VBA để chạy ra bảng như mẫu em gửi file.

Em xin cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
?????
em có 1 file nguồn Excel gồm 1 sheet có 4 cột A_B_C_D_E . . . .

Mình không đọc được file mẫu của bạn; hay bạn giúp mọi người, trong đó có mình làm file mẫu trong Excel & gởi lên đi!

Riêng Font trong file excel của bạn cũgn đã khó đọc rồi; Đúng là Việt nam!
 
Upvote 0
Chào bác ChanhTQ, cảm ơn bác đã đọc bài viết của em. Em đã gửi lại file nguồn và file kết quả dạng bảng tính Excel rồi. Bác xem và làm giúp em với nhé. Xin cảm ơn bác nhiều.
 
Upvote 0
Bạn hoàn toàn có thể gởi lên 1 file với 2 trang tính mà!

Em đã gửi lại file nguồn và file kết quả dạng bảng tính Excel rồi. Bác xem và làm giúp em với nhé.

Tại trang 'KQ', bạn làm ơn giải thích dùm chổ này:

Trị trong [B7:B8] (là 49.3) thì mình hiểu là lấy [B5]-{B4] (Trang 'HQL')

Nhưng tiếp đến, Trị trong [B9:B10] (là 0.0) thì mình không hiểu là lấy đâu ra số này?

(Bạn nên nhớ rằgn, những gì với bạn là cháo chảy, với bọn mình là cả vấn đề để hiểu!)

(/ấn đề của bạn chắc không khó thực hiện, cái khó là để hiểu được bạn!
 
Upvote 0
Mấy hôm e phải đi công tác xa không vào được mang. cảm ơn bác HYEN17 đã xem bài của em. Cột B "Khoảng cách lẻ" của bảng kết quả là lấy giá trị dòng dưới - giá trị dòng trên, còn các cột khác chỉ là copy từ bảng nguồn sang. có thể em nhập sai. em ví dụ 3 bảng như vậy còn thực tế thì thay đổi số bảng biểu. Bác xem giúp em nhé
 
Upvote 0
Mấy hôm e phải đi công tác xa không vào được mang. cảm ơn bác HYEN17 đã xem bài của em. Cột B "Khoảng cách lẻ" của bảng kết quả là lấy giá trị dòng dưới - giá trị dòng trên, còn các cột khác chỉ là copy từ bảng nguồn sang. có thể em nhập sai B9-B10. em ví dụ 3 bảng như vậy còn thực tế thì thay đổi số bảng biểu. Bác xem giúp em nhé
 
Upvote 0
Bạn nên đưa lại file kết quả mới là người có trách nhiệm với câu hỏi của mình.
 
Upvote 0
Bạn nên đưa lại file kết quả mới là người có trách nhiệm với câu hỏi của mình.

Xin lỗi các bác mấy hôm em bận quá em chưa gửi file được các bác thông cảm, em xin gửi lại file kết quả làm mẫu cho 1 bảng tính, các bác viết giúp em cho trường hợp với số bảngtính bất kỳ nhé. em xin cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
bác HYen 17 và bác ChanhTQ đâu rùi, các bác giúp em với nhé
 
Upvote 0
Để hiểu được bạn thất khó ghê & cũng chưa hiểu hết í bạn

Các bác giúp em với nhé

Mà chưa hiểu thì có khi sai đường hướng; Nhưng cứ đưa lên để bạn bổ sung vậy

Hãy tự tìm tổ hợp fím nóng nha.
 
Lần chỉnh sửa cuối:
Upvote 0
ý em muốn hỏi các bác là viết macro VBA chạy tự động lấy từ file dữ liệu nguồn để kẻ và tạo bảng biểu theo từng bảng số liệu của file nguồn và xuất ra file ketqua . file nguồn gồm 4 cột A,B,C,E được chia thành nhiều bảng tính, mỗi bảng cách nhau 2 dòng gồm số thứ tự bảng và ngày tháng tạo bảng. dòng số liệu cuốicùng của mỗi bảng có dấu "-" ở trước số thứ tự.
file kết quả có mẫu định dạng như file ketqua em đã gửi lên, mỗi 1 bảngtínhcủa file nguồn sẽ tạo ra 1 bảng biểu được định dang như file kết quả và cột B ở file kết quả được tính từ ccột B của file nguồn. viết code định dạng cho 1 bảng thì em viếtđược nhưng không viết được vòng lặp cho nhiều bảng. mong các cao thủ giúp em
 
Upvote 0
ý em muốn hỏi các bác là viết macro VBA chạy tự động lấy từ file dữ liệu nguồn để kẻ và tạo bảng biểu theo từng bảng số liệu của file nguồn và xuất ra file ketqua . file nguồn gồm 4 cột A,B,C,E được chia thành nhiều bảng tính, mỗi bảng cách nhau 2 dòng gồm số thứ tự bảng và ngày tháng tạo bảng. dòng số liệu cuốicùng của mỗi bảng có dấu "-" ở trước số thứ tự.

file kết quả có mẫu định dạng như file ketqua em đã gửi lên, mỗi 1 bảngtínhcủa file nguồn sẽ tạo ra 1 bảng biểu được định dang như file kết quả và cột B ở file kết quả được tính từ ccột B của file nguồn. viết code định dạng cho 1 bảng thì em viếtđược nhưng không viết được vòng lặp cho nhiều bảng. mong các cao thủ giúp em

Iêu cầu của bạn có 2 thành fần; Trích & tính số liệu;
Fần sau là định dạng báo biểu;

Thật ra, nếu số liệu chưa hiểu là fải làm sao, thì fần sau chả để làm gì.

Bạn đã viết 3 lần giải thích, nhưng thú thực mình cũng còn mù mờ lắm.

Trong file trên, bạn đã đánh dấu điểm đo cuối của 1 mặt cắt là dấu trừ; Chổ này nên đánh dấu như vầy tiện hơn: '18#'

Vì lí do là tìm hay đếm '#' khác nhiều với kiếm hay đếm 1 số âm;

Hay là bạn chưa xem kỹ file?
 
Upvote 0
Iêu cầu của bạn có 2 thành fần; Trích & tính số liệu;
Fần sau là định dạng báo biểu;

Thật ra, nếu số liệu chưa hiểu là fải làm sao, thì fần sau chả để làm gì.

Bạn đã viết 3 lần giải thích, nhưng thú thực mình cũng còn mù mờ lắm.

Trong file trên, bạn đã đánh dấu điểm đo cuối của 1 mặt cắt là dấu trừ; Chổ này nên đánh dấu như vầy tiện hơn: '18#'

Vì lí do là tìm hay đếm '#' khác nhiều với kiếm hay đếm 1 số âm;

Hay là bạn chưa xem kỹ file?
- Số liệu được trút từ máy đo sang nên nên quy định bắt buộc là có ký hiệu (dấu -) vào điểm cuối 1 bảng, nên không thay đổi được bác ạ. Bác làm trước phần tính toán giúp em.
* Bác tạo ra 1 file mới Ketqua.xls,
+ Tính toán cho cột B (của file Kết quả):
- ở file nguồn xét cột A bắt đầu từ ô A4 đến ô cuối cùng của Sheet. nếu ô Ai >= 0 thì lấy giá trị Bi+1-Bi , và bắt đầu đếm số thứ tự cells thoả mãn điều kiện trên.
(ghi giá trị đầu tiên vào ô B7 của file kếtquả -mỗi giá trị tính được cách nhau 1 dòng, cột A= STT của file kếtquả bắt đầu từ ô A6, và đánh số thứ tự từ 1 đến hết mỗi bảng),
+ Kết hợp copy sốliệu ở cột B, C, E của file nguồn vào cột C, D, E của file KếtQuả , giá trị đầu tiên đặt vào ô C6, D6, E6

+ đến khi nào Ai+1 <0 thì dừng lại chuyển sang bảng tính dưới , (file nguồn : mỗi bảng tính cách nhau 2 dòng- file ket qua mỗi bảng biểu cách nhau 7 dòng).
Bác nghiên cứu giúp em với nhé.
 
Upvote 0
Nguon.JPGKQua.JPG

- ở file nguồn xét cột A bắt đầu từ ô A4 đến ô cuối cùng của Sheet. nếu ô Ai >= 0 thì lấy giá trị Bi+1-Bi , và bắt đầu đếm số thứ tự cells thoả mãn điều kiện trên.
(ghi giá trị đầu tiên vào ô B7 của file kết quả

Như bạn viết, mình hiểu số 49.3 tại [B7] ở 'KQua' là do (82.1 - 32.8), tạm chấp nhận (- Tạm thôi, vì kết quả này fải là số âm)
Nhưng tại [B9] ở 'KQua' sao lại là số 0 tròn trịa vậy?
(Theo như câu văn của bạn fải là: 32.8 (hay -32.8), chứ?)
Kế tiếp xuống dưới (17.8- 0.00) ghi là 15.0 tại [B11] là sao?

Hay bạn là sếp, nên nói luôn không đi đôi với làm?
 
Upvote 0
View attachment 79099View attachment 79100



Như bạn viết, mình hiểu số 49.3 tại [B7] ở 'KQua' là do (82.1 - 32.8), tạm chấp nhận (- Tạm thôi, vì kết quả này fải là số âm)
Nhưng tại [B9] ở 'KQua' sao lại là số 0 tròn trịa vậy?
(Theo như câu văn của bạn fải là: 32.8 (hay -32.8), chứ?)
Kế tiếp xuống dưới (17.8- 0.00) ghi là 15.0 tại [B11] là sao?

Hay bạn là sếp, nên nói luôn không đi đôi với làm?

Bác nói thế làm em ngại quá. Do em đặt câu hỏi chưa chuẩn nên các bác khó hiểu. thực ra công thức tính ở cột B của file ket quả đơn giản là :
B(i+1)-B(i) mà thôi, em đã gửi lại file đó rồi mà. còn các cột khác chỉ là copy sang mà thôi.
- em gửi lại lần nữa có cả công thức tính cột B. Bác xem xétgiúp em với nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem trong file kèm theo

Fím nóng {CTRL}+{SHIFT}+T để chạy macro

(/ẩn chưa hiểu fần cạn cụ thể là như thế nào, nên chưa làm được cho bạn? Cảm fiền bạn cụ thể hơn nữa số liệu;

(Không fải trong nghề nên ngu hơi bị lâu thế đó bạn!)
 

File đính kèm

Upvote 0
bài toán của em là: có 1 file excel trong đó có 1 sheet có số liệu nằm ở 4 cột A,B,C,E
gồm nhiều vùng ứng với mỗi vùng là 1 ngày khác nhau (= mặt cắt), vậy viết code như thế nào để tách và tính toán, kẻ bảng biểu cho mỗi vùng đó.
- em đã gộp 1 bên là số liệu nguồn và 1 bên là bảng biểu chạy ra để các bác dễ hiểu.
Các bác xem và ngâm cứu giúp em với
 

File đính kèm

Upvote 0
Hình như bạn chỉ việc đưa iêu cầu lên thôi thì fải? & bắt mọi người chạy theo bạn .

Bạn không hề đọc người khác đã viết gì?
Quá bực với bạn, nên sẵn đây nói luôn cho đỡ:

(1)
Dòng a3 là thời gian đo
Ngày đo thì nói là ngày đo đi; còn bày vẽ "Thời gian đo"?

(2) Bạn đã xem các số liệu trên trang 'KQua' của file chưa? Bạn khẳng định xem số liệu ấy đúng hết hay chưa? (với những gì đang có) & như đã nói, còn thiếu tính toán fần cạn; Còn fần ướt đã tính toán (nhưng đang nhầm đề mục sang fần cạn - sẽ sửa thêm)


(3)
"Tổng chiều fần cạn" của từng mặt cắt là:
tổng giá trị độ lớn của cột 'B' theo từng mặt cắt đó trừ đi fần ướt đã tính ở trên
(B16 -b19) - tổng ướt)

Hiệu giữa B19-B16 thì ai cũng đã thấy, bạn lại cố tình viết lại, trong khi đó "tổng giá trị độ lớn cột 'B'" cần được diễn giải, thì bạn lại im như thóc là cớ sao?
Tổng này gồm những thành tố nào bạn không diễn giải được sao;
Đâu có fải trong nghề của bạn để dễ hiểu những gì bạn thuộc nằm lòng?

Bạn đang nhờ diễn đàn giúp bạn hay bạn đang đánh đố mọi người vậy?

Lòng kiên nhẫn của con người có giới hạn của nó bạn à!

Bye, bye!

Fần bổ sung: Sửa lại macro để khắc fục sai sót tại mục (2); Bạn chép toàn bộ nội dung này đè hết lên những gì đang có trong cửa sổ VBE:


Mã:
Option Explicit
Dim Song As String
Dim Cls As Range, Sh As Worksheet:
Dim Ngay As Date, MCt As Byte
[B]Sub ThongKe()[/B]
 Dim eRw As Long, So0 As Long, Num As Integer, Jj As Byte, FU As Double
 Dim Blk As Range, fRg As Range, sRg As Range, Rg0 As Range, tRg As Range
 Const KT As String = " "
 
 Sheets("HQL").Select
 Set Sh = ThisWorkbook.Worksheets("KQua")
 Sh.Columns("A:F").Insert Shift:=xlToRight
 Sh.Columns("G:L").Delete Shift:=xlToLeft
 eRw = [A65500].End(xlUp).Row
 Song = [A1].Value:                             Set fRg = [A2]
 Do
    Ngay = fRg.Offset(1).Value:                 MCt = fRg.Value
    If fRg.Row >= eRw Then Exit Do
    Set Blk = Range(fRg, fRg.Offset(2, 1).End(xlDown).Offset(, -1))
    Set tRg = Blk(1).Offset(Blk.Rows.Count)    [COLOR=#0000cd] 'O Cuói Cua Mat Cát'[/COLOR]
    Num = Abs(tRg.Offset(-1).Value)
    Set sRg = [BA1].Resize(210).Find(Num, , xlFormulas, xlWhole)
    If Not sRg Is Nothing Then
        Set Rg0 = Sh.[A65500].End(xlUp).Offset(2)
[COLOR=#0000ff]'Chép Tù Form:'[/COLOR]
        [BA1].Resize(sRg.Row + 1, 5).Copy Destination:=Rg0
        With Rg0
            .Value = .Value & KT & Song
            .Offset(1).Value = .Offset(1).Value & KT & MCt
            .Offset(2).Value = .Offset(2).Value & KT & Ngay
            Randomize
            .Offset(4).Resize(, 5).Interior.ColorIndex = 34 + 9 * Rnd() \ 1
        End With
[COLOR=#0000ff]'Chép Só Lieu Sang KQua:'[/COLOR]
        Jj = 3
        For Each Cls In Range(fRg.Offset(2), tRg)
            Jj = Jj + 2
            If Cls.Value = 0 And Cls.Value <> "" Then  [COLOR=#0000ff] '*'[/COLOR]
                So0 = So0 + 1
                If So0 Mod 2 = 1 Then
                    FU = Cls.Offset(, 1).Value
                Else
                    FU = Abs(Cls.Offset(, 1) - FU)
                End If
            End If
            Rg0.Offset(Jj, 2).Resize(, 2).Value = Cls.Offset(, 1).Resize(, 2).Value
            Rg0.Offset(Jj, 4).Value = Cls.Offset(, 4).Value
            With Cls.Offset(1, 1)
                If .Row < tRg.Row Then _
                    Rg0.Offset(Jj + 1, 1).Value = Abs(.Offset(-1).Value - .Value)
            End With
        Next Cls
        GPE Sh.[A65500].End(xlUp).Offset(1).Resize(, 5)
        With Sh.[A65500].End(xlUp).Offset(1)
            .Value = [BG1].Value & KT & CStr(FU)   [COLOR=#0000ff] '<=|'[/COLOR]
            .Offset(1).Value = [bg2].Value & KT &[COLOR=#ff0000] "???"[/COLOR]
        End With
        Set fRg = tRg
    End If
 Loop
 Sh.Select:                                     Set Sh = Nothing
[B]End Sub[/B]
PHP:
Sub GPE(Rng As Range)                           'Ke Dòng Cuói Cua Bang'
 With Rng.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlMedium
 End With
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em xin lỗi bác HYen. Một phần do khả năng diễn đạt kém , 1 phần do em sơ suất không đọc kỹ câu hỏi của bác. Thành thật xin lỗi bác. Bác bỏ qua và giúp em với nhé .
- Em gửi lại file nguồn có giải thích đầy đủ cách tính phần ướt, phần cạn.
- Code của bác em chạy thử nhưng báo lỗi ở dòng :
"GPE Sh.[A65500].End(xlUp).Offset(1).Resize(, 5)"
và thông báo sau:
"Sub or Function not defined"
- đoạn code bổ sung mục 2 của bác thì copy vào đâu vậy bác HYen ?
 

File đính kèm

Upvote 0
Một phần do khả năng diễn đạt kém , 1 phần do em sơ suất không đọc kỹ câu hỏi của bác. Bác giúp em với nhé .
(2) Em gửi lại file nguồn có giải thích đầy đủ cách tính phần ướt, phần cạn.
(1) Code của bác em chạy thử nhưng báo lỗi ở dòng :
"GPE Sh.[A65500].End(xlUp).Offset(1).Resize(, 5)"
và thông báo sau:
"Sub or Function not defined"
- đoạn code bổ sung mục 2 của bác thì copy vào đâu vậy bác HYen ?

(1) Báo lỗi gì bạn tuy chưa đưa lên, nhưng mình cũng đoán ra là bạn chưa chép macro thứ 2 vô chung module với macro 1
Nội dung 2 macro này cần được chép đè lên toàn bộ 2 macro cũ; Nế không được nữa, thì chờ đi vậy.

(2) Sao bạn nói suông không vậy; Cụ thể số liệu 240.3 m là bằng số nào cộng hay trừ với số nào;

Mình lấy 158.2 - (-82.1) => 240.3 rồi còn gì?

Nếu chỉ đơn giản là số cuối trừ đi số đầu của 1 mặt cắt, mà mất bao giấy mực & thời gian với bạn rồi?!

. . . . .
 
Upvote 0
Web KT

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

Back
Top Bottom