Những câu hỏi đơn giản từng bước học VBA (1 người xem)

Liên hệ QC

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

tungnguyen_kt

Thành viên gắn bó
Thành viên BQT
Super Moderator
Tham gia
25/6/08
Bài viết
2,900
Được thích
12,083
Giới tính
Nam
Trên còn đường tiếp cận VBA có rât2 nhiều và vô số những câu hỏi "ngu ngơ, ngớ ngẩn" nhất nên xin phép em mở topic này để có thể hỏi từ từ, mong rằng sẽ nhận được trợ giúp từ các anh chị, vì em đang tập làm quen với code.

Theo em test thừ thì: Sheets ("Sheet1").Select hay .Activate hay . visible ..... thì có "giá trị" trên sheet1 vậy trường hợp em muốn nhiều hơn 1 sheet và cũng có thể là toàn bộ các sheets thì cách thức và hướng làm việc trong VBA là làm thế nào? mong anh chị hướng dẫn để em có thể hiểu được bản chất của nó và áp dụng.
 
Trên còn đường tiếp cận VBA có rât2 nhiều và vô số những câu hỏi "ngu ngơ, ngớ ngẩn" nhất nên xin phép em mở topic này để có thể hỏi từ từ, mong rằng sẽ nhận được trợ giúp từ các anh chị, vì em đang tập làm quen với code.

Theo em test thừ thì: Sheets ("Sheet1").Select hay .Activate hay . visible ..... thì có "giá trị" trên sheet1 vậy trường hợp em muốn nhiều hơn 1 sheet và cũng có thể là toàn bộ các sheets thì cách thức và hướng làm việc trong VBA là làm thế nào? mong anh chị hướng dẫn để em có thể hiểu được bản chất của nó và áp dụng.

Tức là muốn Select hoặc Activate hoặc Visible nhiều sheet cũng lúc?
- Select nhiều sheet. Ví dụ: Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Cú pháp: Sheets(Array(Liệt kê các tên sheet vào đây)).Select
- Activate nhiều sheet: Chuyện không thể nào, vì dù ta có thể chọn nhiều đối tượng nhưng tại 1 thơi điểm cụ thể chỉ có thể Active 1 đối tượng duy nhất
- Visible nhiều sheet: Dùng vòng lập duyệt qua các sheet rồi gán thuộc tính visible cho từng phần tử
 
Upvote 0
Tức là muốn Select hoặc Activate hoặc Visible nhiều sheet cũng lúc?
- Select nhiều sheet. Ví dụ: Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
Cú pháp: Sheets(Array(Liệt kê các tên sheet vào đây)).Select
- Activate nhiều sheet: Chuyện không thể nào, vì Active là 1 đối tượng
- Visible nhiều sheet: Dùng vòng lập duyệt qua các sheet rồi gán thuộc tính visible cho từng phần tử

Đúng là Thầy hiểu được trò muốn gì và khá chi tiết, vấn đề là chỗ này:- Visible nhiều sheet: Dùng vòng lập duyệt qua các sheet rồi gán thuộc tính visible cho từng phần tử vì không biết sheet đó hiện thời có bao nhiêu nick đang ẩn nên liệt kê Array thì không thể.

Vậy em viết như thế này:

PHP:
Sub hien()
Dim A As Worksheet
For Each A In Worksheets
A.Visible = True
Next
End Sub

Em thấy code này chạy sau nhiều lần chỉnh sửa, tuy nhiên nếu viết như trên thì có gì không hay, và để học hỏi thêm, cũng như mở rộng được vấn đề, rất cần các anh chị nhận xét giúp.
 
Upvote 0
Đúng là Thầy hiểu được trò muốn gì và khá chi tiết, vấn đề là chỗ này:- Visible nhiều sheet: Dùng vòng lập duyệt qua các sheet rồi gán thuộc tính visible cho từng phần tử vì không biết sheet đó hiện thời có bao nhiêu nick đang ẩn nên liệt kê Array thì không thể.

Vậy em viết như thế này:

PHP:
Sub hien()
Dim A As Worksheet
For Each A In Worksheets
A.Visible = True
Next
End Sub
Em thấy code này chạy sau nhiều lần chỉnh sửa, tuy nhiên nếu viết như trên thì có gì không hay, và để học hỏi thêm, cũng như mở rộng được vấn đề, rất cần các anh chị nhận xét giúp.
Tùng viết code như vậy là quá đẹp rồi chứ có gì không hay nữa, anh Tuấn có viết thì cũng thế thôi.
 
Upvote 0
Đúng là Thầy hiểu được trò muốn gì và khá chi tiết, vấn đề là chỗ này:- Visible nhiều sheet: Dùng vòng lập duyệt qua các sheet rồi gán thuộc tính visible cho từng phần tử vì không biết sheet đó hiện thời có bao nhiêu nick đang ẩn nên liệt kê Array thì không thể.

Vậy em viết như thế này:

PHP:
Sub hien()
Dim A As Worksheet
For Each A In Worksheets
A.Visible = True
Next
End Sub

Em thấy code này chạy sau nhiều lần chỉnh sửa, tuy nhiên nếu viết như trên thì có gì không hay, và để học hỏi thêm, cũng như mở rộng được vấn đề, rất cần các anh chị nhận xét giúp.
Có chút xíu không hay cần được chỉnh sửa. ( Cái này là do Tùng ép anh nói nhé)
Thay chữ hien bằng chữ gì cho nó tây tây 1 chút ( chẳng hạn Unhide ). Thay chữ A cho nó nghe có vẻ là đang dùng biến này đề cập đến sheet.(Chẳng hạn Sh)
 
Upvote 0
Có chút xíu không hay cần được chỉnh sửa. ( Cái này là do Tùng ép anh nói nhé)
Thay chữ hien bằng chữ gì cho nó tây tây 1 chút ( chẳng hạn Unhide ). Thay chữ A cho nó nghe có vẻ là đang dùng biến này đề cập đến sheet.(Chẳng hạn Sh)
Em spam một chút nhé: Chỗ màu đỏ phải sửa lại là: Thay chữ hien (hiền) bằng chữ gì cho nó dữ một chút (chẳng hạn AC hay OverAC cũng được --=0) - Bạn Bình đừng có ban nick bạn Phúc đấy nhé!

Em cũng xin đưa ra một kinh nghiệm cá nhân khi soạn thảo code, cái này hổng có liên quan gì đến thuật toán cả, nhưng mà có thói quen này thì sẽ có lợi cho việc theo dõi và chỉnh sửa code: Khi soạn thảo code, nên làm quen với việc sử dụng phím Tab, và đảm bảo các câu lệnh cùng cấp thì canh trái thẳng cột với nhau. Sau này lỡ có dò tìm lỗi cú pháp cũng dễ dàng. Chẳng hạn, thay vì code:
PHP:
Sub UnhideSheet()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Visible = True
Next
End Sub
Nếu dùng phím Tab thì nó sẽ ra như vầy, rõ ràng là đẹp hơn và dễ nhìn hơn chứ nhỉ:
PHP:
Sub UnhideSheet()
    Dim Ws As Worksheet
    For Each Ws In Worksheets
        Ws.Visible = True
    Next
End Sub
 
Upvote 0
Em thấy code này chạy sau nhiều lần chỉnh sửa, tuy nhiên nếu viết như trên thì có gì không hay, và để học hỏi thêm, cũng như mở rộng được vấn đề, rất cần các anh chị nhận xét giúp.

Bước đầu học, code chạy được là mừng rồi. Hay hay không kệ.. tía nó, quan tâm làm gì <--- Vì nếu nói cho ra cái vụ "bàn" này thì coi chừng nói một hồi bà con chạy hết, khỏi thèm học
Tiếp tục đi Tùng (bằng cách tự nghĩ ra đề tài và tự giải quyết lấy)
Ẹc... Ẹc...
 
Upvote 0
Bước đầu học, code chạy được là mừng rồi. Hay hay không kệ.. tía nó, quan tâm làm gì <--- Vì nếu nói cho ra cái vụ "bàn" này thì coi chừng nói một hồi bà con chạy hết, khỏi thèm học
Tiếp tục đi Tùng (bằng cách tự nghĩ ra đề tài và tự giải quyết lấy)
Ẹc... Ẹc...

Thú thật là bài còn nhiều lắm, đây một trong các bài đầu tiên của Thầy cho đó, bài tiếp theo đang vướn và cũng tiếp nối bài này vì có liên quan đến sheet không ah. Nhưng trước khi hỏi em phải cố mà viết vài dòng đã, cho dù nó chạy hay hong chạy cũng viết, viết xong (có "mùi" code") trong đó là được rồi nhờ các Thầy trợ giúp tiếp.
 
Upvote 0
Thú thật là bài còn nhiều lắm, đây một trong các bài đầu tiên của Thầy cho đó, bài tiếp theo đang vướn và cũng tiếp nối bài này vì có liên quan đến sheet không ah. Nhưng trước khi hỏi em phải cố mà viết vài dòng đã, cho dù nó chạy hay hong chạy cũng viết, viết xong (có "mùi" code") trong đó là được rồi nhờ các Thầy trợ giúp tiếp.
Chán mớ đời
Học viết code từ lúc chưa lấy vợ, bi giời làm cha rồi mà viết chưa được 7 dòng code, híc
Lấy vợ rồi nên ............bỏ "dê" thành ra phải viết là "vướn", híc
Chán mớ đời
 
Upvote 0
Thú thật là bài còn nhiều lắm, đây một trong các bài đầu tiên của Thầy cho đó, bài tiếp theo đang vướn và cũng tiếp nối bài này vì có liên quan đến sheet không ah. Nhưng trước khi hỏi em phải cố mà viết vài dòng đã, cho dù nó chạy hay hong chạy cũng viết, viết xong (có "mùi" code") trong đó là được rồi nhờ các Thầy trợ giúp tiếp.
Nhà Tùng sát bên anh mà không gài độ mỗi tuần tại cầu Ông Bố để anh hướng dẫn cho thuận tiện.
 
Upvote 0
Nhà Tùng sát bên anh mà không gài độ mỗi tuần tại cầu Ông Bố để anh hướng dẫn cho thuận tiện.

Có vậy không cũng théc méc!
Cầu Ông Bố có phải là KHU PHỐ VĂN HÓA không?
(Bởi vậy Tùng Nguyễn thích về Biên Hòa là ở cái chổ văn hóa đó đó)
 
Upvote 0
Có vậy không cũng théc méc!
Cầu Ông Bố có phải là KHU PHỐ VĂN HÓA không?
(Bởi vậy Tùng Nguyễn thích về Biên Hòa là ở cái chổ văn hóa đó đó)

Ai cha, toi mất gần một buổi sáng ngồi "mò" mỗi cái inputbox mà cũng còn mơ mờ hồ hồ, hy dzọng giờ tới chiều viết được vài dòng gởi lên nhờ mấy Thầy chỉ tiếp.
 
Upvote 0
Bài tập 1. đã giải quyết ở trên
Bài tập 2. Sau 4 giờ tìm hiều inputbox và được Thầy gợi ý dùng instr và hướng dẫn cú pháp hàm em viết được như thế này.

Cũng như bài 1, nhờ mấy Thầy nhận xét, chỉ bảo thêm.

PHP:
Sub change()
Dim chuoitimkiem As String
Dim chuoithaythe As String
Dim WS As Worksheet
chuoitimkiem = InputBox(Prompt:="Nhap tu tim can thay the")
chuoithaythe = InputBox(Prompt:="Nhap tu thay the")
For Each WS In Worksheets
If InStr(WS.Name, chuoitimkiem) > 0 Then
WS.Name = Replace(WS.Name, chuoitimkiem, chuoithaythe)
End If
Next
End Sub
 
Upvote 0
Nên làm vầy:

(*) Fần định nghĩa các biến nên cách với fần nội dung 1 dòng trống;

(*) Nên
Dim ChuoiTimKiem
As
String
thay vì
Dim chuoitimkiem
As
String

(*) Đã
For Each WS In Worksheets
Thì nên
Next WS
(Next đứng 1 mình sẽ buồn lắm đó!)

Các dòng lệnh nên thụt đầu dòng thành những khối dòng lệnh.

Còn nữa, nhưng . . . . . .
 
Upvote 0
Bài tập 1. đã giải quyết ở trên
Bài tập 2. Sau 4 giờ tìm hiều inputbox và được Thầy gợi ý dùng instr và hướng dẫn cú pháp hàm em viết được như thế này.

Cũng như bài 1, nhờ mấy Thầy nhận xét, chỉ bảo thêm.

PHP:
Sub change()
Dim chuoitimkiem As String
Dim chuoithaythe As String
Dim WS As Worksheet
chuoitimkiem = InputBox(Prompt:="Nhap tu tim can thay the")
chuoithaythe = InputBox(Prompt:="Nhap tu thay the")
For Each WS In Worksheets
If InStr(WS.Name, chuoitimkiem) > 0 Then
WS.Name = Replace(WS.Name, chuoitimkiem, chuoithaythe)
End If
Next
End Sub
Thay đoạn:
Mã:
If InStr(WS.Name, chuoitimkiem) > 0 Then
Thành:
Mã:
If InStr([COLOR=#ff0000]1[/COLOR], WS.Name, chuoitimkiem, [COLOR=#ff0000]vbTextCompare[/COLOR]) > 0 Then
và:
Mã:
WS.Name = Replace(WS.Name, chuoitimkiem, chuoithaythe)
thành:
Mã:
WS.Name = Replace(WS.Name, chuoitimkiem, chuoithaythe, , , [COLOR=#ff0000]vbTextCompare[/COLOR])
cho nó chắc. Nhiều khi gõ chữ thường chữ HOA sẽ phiền phức lắm
--------------------
Bước đầu làm chơi vậy thôi chứ bài này còn phải bẫy lỗi nhiều lắm:
- Người ta bấm Cancel InputBox thì sao?
- Nếu người ta gõ vào InputBox 1 ký tự đặc biệt nào đó là từ "cấm" của tên sheet thì làm sao mà thay?
Ví dụ tại InputBox thứ hai người ta gõ chuoithaythe = a/b thì... tèo. Vì ký tự / là ký tự "cấm kỵ"
- Người ta gõ chuoithaythe là tên sheet nào đó đang tồn tại thì làm sao mà thay?
Ví dụ: Có 3 sheet tên là: "AAA", "BBB" và "CCC". Khi InputBox thứ nhất xuất hiện, gõ AAA và khi InputBox thứ 2 xuất hiện, gõ BBB thì... xong phim
 
Upvote 0
Nhờ anh chị tiếp tục giúp em hướng giải quyết chuyển đổi sheet DATA --> NKC theo số liệu minh họa trong file.
 

File đính kèm

Upvote 0
Nhờ anh chị tiếp tục giúp em hướng giải quyết chuyển đổi sheet DATA --> NKC theo số liệu minh họa trong file.

14 lần tải file, chắc chắn nhiều bạn đã xem qua file này
Hôm nhậu ở Biên Hòa đã được Tùng Nguyễn giải thích sơ qua, cũng tạm hiểu
Có điều nghĩ mãi vấn không ra giải thuật cho 4 dòng cuối ở sheet Data
----------------------
Làm sao để 4 dòng này ở sheet Data

Capture1.JPG













biến đổi thành 3 dòng ở sheet NKC:


Capture2.JPG











----------------------------------------------
Nghĩ cũng lạ: trên GPE rất nhiều thành viên chuyên kế toán nhưng sao không thấy ai tham gia giải quyết bài toán này nhỉ? Chẳng lẽ trước giờ mọi người chưa từng dùng code hoặc công thức làm phép biến đổi như trên? Chẳng lẽ mọi người thường làm.. bằng tay?
Ai đã từng làm bài dạng này vui lòng post lên. Thật sự tôi cũng rất muốn tham khảo code hoặc công thức để học hỏi
(xem từ hôm trước đến giờ mà vẫn không nghĩ ra cách)
 
Upvote 0
Chú Tùng muốn giải đáp các thắc mắc cơ bản thì hãy tham gia lớp học VBA căn bản nhé!
Chắc chắn sẽ khác đấy! keke.
Có khi học xong, sau đó chú làm giảng viên luôn không chừng
 
Lần chỉnh sửa cuối:
Upvote 0
Chú muốn giải đáp các thắc mắc cơ bản thì hãy tham gia lớp học VBA căn bản nhé!
Chắc chắn sẽ khác đấy! keke.
Có khi học xong, sau đó chú làm giảng viên luôn không chừng

Nhưng bài kế toán ở trên thì khác à nha! Có học cũng chưa chắc làm được
(hình như nó thuộc về kinh nghiệm kế toán thì phải: Ai làm nấy biết)
Ẹc... Ẹc...
 
Upvote 0
Upvote 0
Xin được phép học hỏi
If InStr(1, WS.Name, chuoitimkiem, vbTextCompare)
vbTextCompare có ý nghĩa như thế nào vì tôi có đọc trên mạng so sánh nhạy mà không biết nhạy là như thế nào
 
Upvote 0
Xin được phép học hỏi
If InStr(1, WS.Name, chuoitimkiem, vbTextCompare)
vbTextCompare có ý nghĩa như thế nào vì tôi có đọc trên mạng so sánh nhạy mà không biết nhạy là như thế nào

Nếu không ghi cái màu đỏ: Có phân biệt hoa thường (tức SHEET1 khác với Sheet1)
Nếu có ghi cái màu đỏ: không phân biệt hoa thường (tức SHEET1 giống với Sheet1)
-------------
Ở bài 15, ngay dưới câu lệnh tôi đã ghi chú rõ rồi còn gì
 
Upvote 0
vbtextcompare trong trường hợp này là để tránh chuyện chữ hoa chữ thường.
ví dụ: nó nói "abc" = "ABC", bình thường nó sẽ không nó vậy.
 
Upvote 0
14 lần tải file, chắc chắn nhiều bạn đã xem qua file này
Hôm nhậu ở Biên Hòa đã được Tùng Nguyễn giải thích sơ qua, cũng tạm hiểu
Có điều nghĩ mãi vấn không ra giải thuật cho 4 dòng cuối ở sheet Data
----------------------
Làm sao để 4 dòng này ở sheet Data

View attachment 110501













biến đổi thành 3 dòng ở sheet NKC:


View attachment 110502











----------------------------------------------
Nghĩ cũng lạ: trên GPE rất nhiều thành viên chuyên kế toán nhưng sao không thấy ai tham gia giải quyết bài toán này nhỉ? Chẳng lẽ trước giờ mọi người chưa từng dùng code hoặc công thức làm phép biến đổi như trên? Chẳng lẽ mọi người thường làm.. bằng tay?
Ai đã từng làm bài dạng này vui lòng post lên. Thật sự tôi cũng rất muốn tham khảo code hoặc công thức để học hỏi
(xem từ hôm trước đến giờ mà vẫn không nghĩ ra cách)

Nói thiệt là bình thường hỏng ai hạch toán kiểu như 4 dòng trên, tuy nhiên có những kế toán cũng "bá đạo" hạch toán kiểu như thế vào PM kế toán nên xuất ra thì nó như thế.

Về hướng làm thì em nghĩ như thế này:

"Duyệt" qua 4 dòng này thấy cái "ông nội" nào có số tiền phát sinh nhỏ nhất thì bốc nó trước và lấy một tài khoản còn lại (TK nào cũng được) đối ứng với nó (bằng số tiền với nó) và số tiền còn lại của TK vừa đối ứng với Tk có số phát sinh nhỏ nhất đó tiếp tục đối ứng với TK còn lại.

Như vậy ta đã giải quyết được 2 dòng, và còn một dòng nữa là cặp còn lại chưa đối ứng.
==>> túm lại là khó hiểu

Thôi thì chúng ta viết code xử lý mấy ẻm trên tới cái ẻm phức tạp này thì tự nguy6en xi nó qua một sheet để mình biết mình làm bằng tay mấy ông nội này cũng được --> vì em nghĩ trong một data thì trường hợp này cũng ít gặp.
 
Upvote 0
Về hướng làm thì em nghĩ như thế này:

"Duyệt" qua 4 dòng này thấy cái "ông nội" nào có số tiền phát sinh nhỏ nhất thì bốc nó trước và lấy một tài khoản còn lại (TK nào cũng được) đối ứng với nó (bằng số tiền với nó) và số tiền còn lại của TK vừa đối ứng với Tk có số phát sinh nhỏ nhất đó tiếp tục đối ứng với TK còn lại.
.

Cảm tính thì nói vậy chứ máy móc nó làm việc theo kiểu khác
- Phải dùng vòng lập duyệt từ trên xuống dưới
- Thấy em nào trùng thì gôm chung vào 1 CỤC
- Lại phải duyệt từng em trong cái CỤC đó mới có thể lấy ra được thằng nhỏ nhất
Ôi chao ôi... với dữ liệu cở 1000 dòng, tính ra thì số lần lập thật khủng ---> E rằng phải "lết bánh"
-----------------------
Còn nếu bên sheet Data cứ từng cặp một đi với nhau thì quá dễ rồi ---> chỉ cần ai biết 1 chút về Dictionary là làm được
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm tính thì nói vậy chứ máy móc nó làm việc theo kiểu khác
- Phải dùng vòng lập duyệt từ trên xuống dưới
- Thấy em nào trùng thì gôm chung vào 1 CỤC
- Lại phải duyệt từng em trong cái CỤC đó mới có thể lấy ra được thằng nhỏ nhất
Ôi chao ôi... với dữ liệu cở 1000 dòng, tính ra thì số lần lập thật khủng ---> E rằng phải "lết bánh"
-----------------------
Còn nếu bên sheet Data cứ từng cặp một đi với nhau thì quá dễ rồi ---> chỉ cần ai biết 1 chút về Dictionary là làm được

Bỏ qua trường hợp cuối như em nói trong bài trước. Vậy có thể giúp em thực hiện nội dung còn lại?
 
Upvote 0
Bỏ qua trường hợp cuối như em nói trong bài trước. Vậy có thể giúp em thực hiện nội dung còn lại?

Mình nghĩ chỉ có thể thực hiện được trường hợp dễ nhất: món nào cũng 1 cặp (2 dòng 1 nhóm)
Còn trường hợp còn lại: 3, 4 dòng vô 1 nhóm thì... hổng biết luôn
 
Upvote 0
14 lần tải file, chắc chắn nhiều bạn đã xem qua file này
Hôm nhậu ở Biên Hòa đã được Tùng Nguyễn giải thích sơ qua, cũng tạm hiểu
Có điều nghĩ mãi vấn không ra giải thuật cho 4 dòng cuối ở sheet Data
----------------------
Làm sao để 4 dòng này ở sheet Data

View attachment 110501













biến đổi thành 3 dòng ở sheet NKC:


View attachment 110502











----------------------------------------------
Nghĩ cũng lạ: trên GPE rất nhiều thành viên chuyên kế toán nhưng sao không thấy ai tham gia giải quyết bài toán này nhỉ? Chẳng lẽ trước giờ mọi người chưa từng dùng code hoặc công thức làm phép biến đổi như trên? Chẳng lẽ mọi người thường làm.. bằng tay?
Ai đã từng làm bài dạng này vui lòng post lên. Thật sự tôi cũng rất muốn tham khảo code hoặc công thức để học hỏi
(xem từ hôm trước đến giờ mà vẫn không nghĩ ra cách)
mình ko thuộc dân kế toán, Tùng có thể giải thích chút ít về các mã tài khoản ko??? bài này mình thấy vấn đề cốt lõi của nói hình như ở chỗ mã TK và cách tính tiền
"mã tài khoản có và nợ phân tích ra sao"
 
Upvote 0
mình ko thuộc dân kế toán, Tùng có thể giải thích chút ít về các mã tài khoản ko??? bài này mình thấy vấn đề cốt lõi của nói hình như ở chỗ mã TK và cách tính tiền
"mã tài khoản có và nợ phân tích ra sao"

Khó giải thích quá, hihi..
Như thế này nhé: Tổng phát sinh nợ luôn phải bằng tổng phát sinh có, ví dụ như anh dùng 1tr đi với một ẻm vào khách sạn anh phải trả tiền phòng 400K còn 600K anh boa cho cô gái ấy. anh ghi sổ: Nợ TK Phòng: 400K Nợ TK gái: 600K có TK tiền: 1tr là em phải ghi 3 dòng như thế.

Giờ em không thích ghi như thế mà em ghi: Nợ TK phòng/Có TK tiền: 400K và Nợ TK gái/có TK tiền 600K --> sẽ chỉ còn 2 dòng.
 
Upvote 0
Khó giải thích quá, hihi..
Thấy tiêu đề là những câu hỏi đơn giản từng bước học VBA nên mình cũng hí hửng mò vào để học hỏi, vậy mà mới qua 3 câu hỏi đã gặp 1 bài khó như lên trời. Mấy cái vụ kế toán này chắc Tùng phải cố mà học code rồi tự xử thì may ra. Hix
 
Upvote 0
Thấy tiêu đề là những câu hỏi đơn giản từng bước học VBA nên mình cũng hí hửng mò vào để học hỏi, vậy mà mới qua 3 câu hỏi đã gặp 1 bài khó như lên trời. Mấy cái vụ kế toán này chắc Tùng phải cố mà học code rồi tự xử thì may ra. Hix

Vụ này Thầy Mỹ, Thầy Bình, Thầy Hoàng Danh .... bậc Thầy code và kế toán chắc nghĩ quá dễ nên hỏng thấy tham gia hướng dẫn.

Nghe lời anh Quang Hải sẽ tự mò (có khi ăn cắp code) để ít nhất cũng đi gần hết đoạn đường bài này.
 
Upvote 0
Đây là file anh Danh viết trên GPE, tuy nhiên để em có thể sửa lại theo file của mình, phiền mấy anh chị có thể giúp em dịch đoạn code trong file đó. (dạo này tìm anh Danh cực khó).

Chân thành cảm ơn!
 

File đính kèm

Upvote 0
Khó giải thích quá, hihi..
Như thế này nhé: Tổng phát sinh nợ luôn phải bằng tổng phát sinh có, ví dụ như anh dùng 1tr đi với một ẻm vào khách sạn anh phải trả tiền phòng 400K còn 600K anh boa cho cô gái ấy. anh ghi sổ: Nợ TK Phòng: 400K Nợ TK gái: 600K có TK tiền: 1tr là em phải ghi 3 dòng như thế.

Giờ em không thích ghi như thế mà em ghi: Nợ TK phòng/Có TK tiền: 400K và Nợ TK gái/có TK tiền 600K --> sẽ chỉ còn 2 dòng.
Tùng này cũng ví dụ độc địa thật,nhưng E hiểu nhầm ý Rồi, cái A hỏi là: mấy cái 1111, 1121, ..... Nó mã Tk đó nó đại diện cho cái gì?
vì thấy ở bên đây nó là 1121 gì gì đó qua bên kia lại là 11311 gì gì đó nên ko hiểu
 
Upvote 0
Tùng này cũng ví dụ độc địa thật,nhưng E hiểu nhầm ý Rồi, cái A hỏi là: mấy cái 1111, 1121, ..... Nó mã Tk đó nó đại diện cho cái gì?
vì thấy ở bên đây nó là 1121 gì gì đó qua bên kia lại là 11311 gì gì đó nên ko hiểu

Ái chà..... cái này em nghĩ anh hỏng cần quan tâm tới nó là cái gì. chỉ cần quan tâm tới số tiền phát sinh cùng hàng với nó ở cột Nợ thì nó là TK nợ và số tiền cùng hàng với nó ở cột Có nghĩa là nó là TK có.
 
Upvote 0
14 lần tải file, chắc chắn nhiều bạn đã xem qua file này
Hôm nhậu ở Biên Hòa đã được Tùng Nguyễn giải thích sơ qua, cũng tạm hiểu
Có điều nghĩ mãi vấn không ra giải thuật cho 4 dòng cuối ở sheet Data
----------------------
Làm sao để 4 dòng này ở sheet Data

View attachment 110501













biến đổi thành 3 dòng ở sheet NKC:


View attachment 110502











----------------------------------------------
Nghĩ cũng lạ: trên GPE rất nhiều thành viên chuyên kế toán nhưng sao không thấy ai tham gia giải quyết bài toán này nhỉ? Chẳng lẽ trước giờ mọi người chưa từng dùng code hoặc công thức làm phép biến đổi như trên? Chẳng lẽ mọi người thường làm.. bằng tay?
Ai đã từng làm bài dạng này vui lòng post lên. Thật sự tôi cũng rất muốn tham khảo code hoặc công thức để học hỏi
(xem từ hôm trước đến giờ mà vẫn không nghĩ ra cách)
Cho mình tham gia gớp ý chút nhé!
Mình là dân kế toán nhưng mình cũng chưa thấy ai hạch toán như thế. Nguyên tắc khi hạch toán 1 Nợ phải đối ứng với 1 Có hoặc 1 Nợ đối ứng với nhiều Có hoặc Nhiều Nợ đối ứng với 1 Có (số tiền giữa Nợ và Có luôn bằng nhau). Hạch toán nhiều Nợ nhiều Có là sai nguyên tắc kế toán, Lúc đi học nếu hạch toán như thế thì sẽ bị điểm 0 cho bút toán đó.
Theo mình thì mình không thiết kế cách nhập Sheet Data như thế mà Sheet Data phải giống như là Sheet NKC (TK Nợ TK Có Số tiền) vừa nhập ngắn gọn mà lại dể hiểu (nếu như cách trên nhập 2 dòng thì thiết kế Data theo kiều này chỉ nhập 1 dòng)
Còn nếu sử dung Sheet Data như trên thì phải hạch toán thành 4 dòng đó lại như thế này mới đúng theo nguyên tắc kế toán:
__TKĐU __ST Nợ _____ ST Có
- 33111 __ 3.000.000
- 6278 ___ 2.000.000
- 1121 ____________ 5.000.0000
- 33111 __ 7.000.000
- 1111 ____________ 7.000.000
Hoặc
- 33111 __10.000.000
- 1121 ____________ 3.000.000
- 1111 ____________ 7.000.0000
- 6278 __2.000.000
- 1121 ____________2.000.000
 
Lần chỉnh sửa cuối:
Upvote 0
bạn ghi như thế này là sao? "tui"" chẳng biết cái nào nợ cái nào có cả.
Mình đánh có nhiều dấu cách nhưng trang web nó tự xóa mất rồi nên nó dồn liền lại như vậy. Nó là như thế này:
__tkđu ____st nợ _____ st có

nợ 33111 __3.000.000
nợ 6278 ___2.000.000
có 1121 ____________ 5.000.0000
nợ 33111 __7.000.000
có 1111 ____________7.000.000
 
Lần chỉnh sửa cuối:
Upvote 0
Vụ này Thầy Mỹ, Thầy Bình, Thầy Hoàng Danh .... bậc Thầy code và kế toán chắc nghĩ quá dễ nên hỏng thấy tham gia hướng dẫn.
[B đã viết:
ndu96081631[/B] ] 14 lần tải file, chắc chắn nhiều bạn đã xem qua file này
Hôm nhậu ở Biên Hòa đã được Tùng Nguyễn giải thích sơ qua, cũng tạm hiểu
Có điều nghĩ mãi vấn không ra giải thuật cho 4 dòng cuối ở sheet Data

Hôm nay mới thấy bài này, vì topic là câu hỏi đơn giản về căn bản VBA nên ít xem.

I. Cái dữ liệu của Tùng trong sheet Data, tôi chưa bao giờ phải xử lý, vì nó vi phạm 3 điều lớn:

1. Số chứng từ giống nhau từ trên xuống dưới. Số chứng từ phải là cái duy nhất cho mỗi chứng từ để dùng làm tiêu chí nhóm các dòng cùng 1 chứng từ với nhau. Trong cùng 1 chứng từ cũng đã có điều kiện tổng nợ bằng tổng có rồi.
2. 4 dòng cuối vi phạm việc nhiều nợ nhiều có trong 1 chứng từ
3. 4 dòng cuối vi phạm việc gộp 2 phiếu chi khác loại vào 1: Chi tiền mặt và chi ngân hàng.

II. Vấn đề trên tôi không gặp phải vì:

1. Nhân viên nhập liệu sai nguyên tắc, tôi sẽ bắt làm lại, nếu không làm lại hoặc vẫn tái phạm thì đuổi việc
2. Phần mềm quái nào mà cho chi tiền mặt và ngân hàng chung 1 phiếu? Tôi vứt phần mềm ngay
3. Phần mềm quái nào mà cho phép đánh số chứng từ trùng từ đầu tháng đến cuối tháng? Cũng đáng vứt.

III. Nếu sự việc đã xảy ra và phải xử lý, tôi sẽ phải xử lý bằng tay cho 4 dòng đó. Vì xử lý bằng code sẽ cho ít nhất 2 kết quả khác nhau (màu cam và xanh):



Và cái nào đúng? Không biết. Chỉ có thể lấy đúng 2 cái chứng từ đó ra, xem cái nào ứng với cái nào.
 
Upvote 0
Vụ này Thầy Mỹ, Thầy Bình, Thầy Hoàng Danh .... bậc Thầy code và kế toán chắc nghĩ quá dễ nên hỏng thấy tham gia hướng dẫn.
....

Không phải tại quá dễ. Tại vì 2 lý do chủ quan và 1 lý do khách quan:

Chủ quan 1:
Cách nói chuyện của bạn khiến người khác cho rằng đây là nơi những người quen biết luyện code với nhau. Không tiện xen vào.

Chủ quan 2:
Chủ đề là "học VBA" nhưng đề bài không phải vậy. Theo tôi thì không nên học kiểu này. Nhưng tôi không cùng trường phải với các bạn cho nên tôi không thể chối cãi rằng kiểu của các bạn có thể hiệu quả hơn (xem câu chủ quan 1 ở trên).

Khách quan:
Tôi cũng có nhận xét gần giống như bạn ptm0412: cái này là dữ liệu quá sức hỗn tạp, nó giống như một cửa hàng cứ ghi chứng từ xong rồi bỏ ngăn kéo, cuối tháng mới lôi ra kết toán. Chồng giấy chứng từ này cần phải lượt kỹ ra trước khi vào sổ. Và đồ hỗn tạp thì phải lượt bằng tay chứ tự động là rước hoạ vào thân.
 
Upvote 0
Chắc chàng Tùng này đang làm kế toán chui đây mà!

Các bạn đừng giúp anh ta lách luật nữa đi vậy!

Thiệt tình, đến giờ mình ngờ ngợ là chàng Tùng này rủ rê NDU giúp lách Luật!
 
Upvote 0
Có một sự "buồn" nhè nhẹ khi đọc bài..................

1. Những lời Thầy Mỹ nói hoàn toàn đúng --> em không có gì giải thích thêm.

2. Những gì bạn VetMini nói "tui" tôn trọng và sẽ cố gắng làm sao để tất cả mọi người không có suy nghĩ giống bạn ở chỗ " Cách nói chuyện của bạn khiến người khác cho rằng đây là nơi những người quen biết luyện code với nhau. Không tiện xen vào." -- nhất định sẽ cố gắng đổi cách nói chuyện. Và cũng nhân đây cho phép em nói thêm là "Vụ này Thầy Mỹ, Thầy Bình, Thầy Hoàng Danh .... bậc Thầy code và kế toán chắc nghĩ quá dễ nên hỏng thấy tham gia hướng dẫn." đoạn trích này cho thấy "tui" có .... nghĩa là tui biết trên GPE rất nhiều cao thủ giỏi Excel tuy nhiên việc giỏi excel và biết kế toán thì "tui" chỉ biết có những người này nên mới viết thế, còn ví dụ thôi như bạn tui thừa biết là giỏi excel nhưng làm sao biết được bạn biết kế toán. Nhưng "tui" hứa sẽ xem xét lại cái nói chuyện của mình, và trân trọng góp ý của bạn.

==>> Túm lại: Giống như Bác Hải Yến nói là em làm kế toán chui nên thế và thật sự là nó như thế. Tui thường xuyên đi "dọn rác" mà.... cứ công nào nhiều "rác" quá thì tui tới và số liệu thì muôn màu muôn vẻ, kế toán thì cũ thì hạch toán tùm lum, và dĩ nhiên phải lấy từ phần mềm đó ra dọn được cái nào dọn rồi cho vào một data chuẩn hơn để làm, như bài trước em có nói nếu gặp trường hợp sai đó có thể bỏ qua và lôi nó qua một sheet khác để làm tay chứ đâu có nói là nhất thiết phải làm được như thế. Chứ chẳng lẽ giờ ngồi làm lại bằng tay hết tất cả.

Nói như thế để thấy rằng không phải em không nhận ra được vấn đề về kế toán nó không đúng trong data này, mà chỉ là lỡ thì xử lỡ thôi, được đến đâu thì mừng đến đó.

Cuối bài: Cảm ơn và trân trọng!
 
Upvote 0
Buồn kí rì mà buồn chứ

Bài lão ct viết chủ yếu để trả lời bài của ndu (có trích dẫn đàng quàng), trong đó ghi:

- Tại sao không ai tham gia giải quyết 4 dòng đó
- Phương pháp viết code lọc (phân nhóm theo số chứng từ)
- Gặp trường hợp nhiều nợ nhiều có thì loại ra không xử lý, và đánh dấu để xử lý bằng tay

Cái này ndu đọc hiểu liền à, Tùng đọc cho biết thôi, đừng buồn.
 
Lần chỉnh sửa cuối:
Upvote 0
Buồn kí rì mà buồn chứ

Bài lão ct viết chủ yếu để trả lời bài của ndu (có trích dẫn đàng quàng), trong đó ghi:

- Tại sao không ai tham gia giải quyết 4 dòng đó
- Phương pháp phân nhóm theo số chứng từ
- Gặp trường hợp nhiều nợ nhiều có thì loại ra không xử lý, và đánh dấu để xử lý bằng tay

Cái này ndu đọc hiểu liền à, Tùng đọc cho biết thôi, đừng buồn.


Không hiểu tại sao nữa, em nhận data toàn số chứng từ giống nhau. nên mình có thể dùng diễn giải để gôm thành từng bút toán không anh.

Trường hợp nhiều nợ nhiều có thì nhiều mà anh, vấn đề là nó không như data. ví dụ như: nợ 3383/có 1111 10tr nợ 3384/có 1121 5tr. Những trường hợp mà nợ có rõ ràng như thế cho dù nhiều nợ nhiều có cũng bình thường mà.


Xem code này mà hết hồn.
PHP:
'Sub TinhToan05()
'Dim curCho As Long, curNhan As Long
''Dim curSLCho As Double, curSLNhan As Double
''Dim curSLChoDu As Double, curSLNhanThieu As Double, SLChia As Double
'
'Dim curSLCho As Currency, curSLNhan As Currency
'Dim curSLChoDu As Currency, curSLNhanThieu As Currency, SLChia As Currency
'curCho = 0: curNhan = 0: s = 1
'curSLNhanThieu = 0: curSLChoDu = 0: SLChia = 0
''Phan nay la nhieu no nhieu co
'Do While Not (curCho = UBound(arrCho) And curSLChoDu = 0)
'  If curSLChoDu = 0 Then
'    curCho = curCho + 1
'    curSLCho = arrCho(curCho, 8)
'    curSLChoDu = curSLCho
'  End If
'  If curSLNhanThieu = 0 Then
'    curNhan = curNhan + 1
'    If curNhan > UBound(arrNhan) Then
'      curNhan = UBound(arrNhan)
'      curSLNhan = 0
'    Else
'      curSLNhan = arrNhan(curNhan, 9)
'    End If
'    'curSLNhan = arrNhan(curNhan, 9)
'    curSLNhanThieu = curSLNhan
'  End If
''  If curSLChoDu <= curSLNhanThieu Then
''    SLChia = curSLChoDu
''  Else
''    SLChia = curSLNhanThieu
''  End If
'  If Abs(curSLChoDu) <= Abs(curSLNhanThieu) Then
'    SLChia = curSLChoDu
'  Else
'    SLChia = curSLNhanThieu
'  End If
'  ArrKQ(s, 1) = arrCho(curCho, 1) 'Ngay HT
'  ArrKQ(s, 2) = sSoCt 'SoCT
'  ArrKQ(s, 3) = arrCho(curCho, 3) 'NgayCT
'  ArrKQ(s, 4) = arrCho(curCho, 4) 'Dien giai
'  ArrKQ(s, ColTkNo) = arrCho(curCho, 7) ' TK No
'  ArrKQ(s, ColTkCo) = arrNhan(curNhan, 7) ' TK Co
'  ArrKQ(s, ColST) = SLChia 'So tien
'  curSLChoDu = curSLChoDu - SLChia
'  curSLNhanThieu = curSLNhanThieu - SLChia
'  s = s + 1
' Loop
'soDong = s - 1
'GanArr
'End Sub
'Sub TinhToan06()
'Dim curCho As Long, curNhan As Long
'Dim curSLCho As Currency, curSLNhan As Currency
'Dim curSLChoDu As Currency, curSLNhanThieu As Currency, SLChia As Currency
'curCho = 0: curNhan = 0: s = 1
'curSLNhanThieu = 0: curSLChoDu = 0: SLChia = 0
''With Sheets("NKC")
'  '***---------------------------------------------------------
'  'Phan nay la nhieu no nhieu co vµ tat ca la so <0
'  Do While Not (curCho = UBound(arrCho) And curSLChoDu = 0)
'    If curSLChoDu = 0 Then
'      curCho = curCho + 1
'      curSLCho = arrCho(curCho, 8)
'      curSLChoDu = curSLCho
'    End If
'    If curSLNhanThieu = 0 Then
'      curNhan = curNhan + 1
'      curSLNhan = arrNhan(curNhan, 9)
'      curSLNhanThieu = curSLNhan
'    End If
'    If curSLChoDu >= curSLNhanThieu Then 'lay so < lon hon
'      SLChia = curSLChoDu
'    Else
'      SLChia = curSLNhanThieu
'    End If
'    ArrKQ(s, 1) = arrCho(curCho, 1) 'Ngay HT
'    ArrKQ(s, 2) = sSoCT 'SoCT
'    ArrKQ(s, 3) = arrCho(curCho, 3) 'NgayCT
'    ArrKQ(s, 4) = arrCho(curCho, 4) 'Dien giai
'    ArrKQ(s, ColTkNo) = arrCho(curCho, 7) ' TK No
'    ArrKQ(s, ColTkCo) = arrNhan(curNhan, 7) ' TK Co
'    ArrKQ(s, 7) = SLChia 'So tien
'    curSLChoDu = curSLChoDu - SLChia
'    curSLNhanThieu = curSLNhanThieu - SLChia
'    s = s + 1
' Loop
'soDong = s - 1
'GanArr
'End Sub

'Sub TinhToan07()
'' TH neu co nhieu TK No va khong co TK Co
'soDong = UBound(arrCho)
'For i = 1 To soDong
'  For k = 1 To 4
'    ArrKQ(i, k) = arrCho(i, k) '4 cot dau
'  Next k
'  ArrKQ(i, ColTkNo) = arrCho(i, 7)  'TKNo
'  ArrKQ(i, ColTkCo) = "" 'TKCo
'  ArrKQ(i, 7) = arrCho(i, 8) 'So tien
'Next i
'GanArr
'End Sub
'Sub TinhToan08()
'' TH neu co nhieu TK Co va khong co TK No
'soDong = UBound(arrNhan)
'n = 1 '1 No
'For i = 1 To soDong
'  For k = 1 To 4
'    ArrKQ(i, k) = arrNhan(i, k) '4 cot dau
'  Next k
'  ArrKQ(i, ColTkNo) = "" 'arrCho(n, 7)  'TKNo
'  ArrKQ(i, ColTkCo) = arrNhan(i, 7) 'TKCo
'  ArrKQ(i, 7) = arrNhan(i, 9) 'So tien
'Next i
'GanArr
'End Sub
'Sub TinhToan04()
'' TH neu so TK No = So TK Co, STien No(1)=sotienco(1), SotienNo(end)=sotienco(end)
''MsgBox "OK"
'soDong = UBound(arrCho)
'For i = 1 To soDong
'    For k = 1 To 4
'      ArrKQ(i, k) = arrCho(i, k) '4 cot dau
'    Next k
'    ArrKQ(i, ColTkNo) = arrCho(i, 7)  'TKNo
'    ArrKQ(i, ColTkCo) = arrNhan(i, 7) 'TKCo
'    ArrKQ(i, 7) = arrCho(i, 8) 'So tien
'  Next i
'  GanArr
'End Sub
'Sub TinhToan02()
''Truong hop nay danh cho 1N va  many C - Dem>2
'soDong = UBound(arrNhan)
'n = 1 '1 No
'  For i = 1 To soDong
'    For k = 1 To 4
'      ArrKQ(i, k) = arrNhan(i, k) '4 cot dau
'    Next k
'    ArrKQ(i, ColTkNo) = arrCho(n, 7)  'TKNo
'    ArrKQ(i, ColTkCo) = arrNhan(i, 7) 'TKCo
'    ArrKQ(i, 7) = arrNhan(i, 9) 'So tien
'  Next i
'  GanArr
'End Sub
'Sub TinhToan03()
''Truong hop nay danh cho 1C va  many N - Dem>2
''TH nay nguoc voi TinhToan02 - be care Tuan
'soDong = UBound(arrCho)
'n = 1 '1 No
'  For i = 1 To soDong
'    For k = 1 To 4
'      ArrKQ(i, k) = arrCho(i, k) '4 cot dau
'    Next k
'    ArrKQ(i, ColTkNo) = arrCho(i, 7)  'TKNo
'    ArrKQ(i, ColTkCo) = arrNhan(n, 7) 'TKCo
'    ArrKQ(i, 7) = arrCho(i, 8) 'So tien
'  Next i
'  GanArr
'End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mắc mớ gì buồn. Có làm phật ý gì ai hay có ai làm gì phật ý?

Tôi sẹo lác đầy mình rồi, mặt dầy như cái mo, rất hiếm chuyện tự ái này nọ. Việc tôi có biết kế toán hay không hoàn toàn không liên quan đến danh xưng "cao thủ" - vả lại tôi thích nói lái nên rất dị ứng từ cao thủ :).

Điểm quan trọng là cái từ "trường phái" mà tôi dùng. Dân code có chiều hướng trường phái riêng của nhau. Và nhiều người ở đây cùng học hỏi tìm hiểu cùng trên diễn đàn này nên có phương pháp viết code giống nhau. Có những lúc người khác trường như tôi xen vào thấy lạc quẻ hết.

Quan niệm về giá trị code của tôi khác với nhiều người ở đây. Học công phu có thể chú trong nội công hay chú trọng kiếm ý - Trương Vô Kỵ thần công vô địch nhưng Lệnh Hồ Xung chỉ cần 9 đường kiếm. Vấn đề là cuối cùng thì Vô Kỵ cũng phải học thêm Thái Cực Quyền, Thái Cực Kiếm và Càn Khôn Đại Nã Di trong khi Lênh Hồ Công Tử cũng phải dùng Dịch Căn Kinh để tẩm bổ nộ công.

Như câu "đơn giản từng bước học VBA" của bạn, theo cái nhìn của tôi là bạn học bước chạy chứ không phải bước đi. Vì là bước chạy cho nên phải học cho khéo. Bạn cần xác định là mình đang học nội công hay học kiếm pháp.
 
Upvote 0
Như câu "đơn giản từng bước học VBA" của bạn, theo cái nhìn của tôi là bạn học bước chạy chứ không phải bước đi. Vì là bước chạy cho nên phải học cho khéo. Bạn cần xác định là mình đang học nội công hay học kiếm pháp.

Đọc xong, hiểu luôn. Túm lại giờ hỏng vui cũng chẳng buồn. Tôi không biết bạn nói đúng không vì bạo lực như phim gì đó tôi không thích, không xem, không biết. Nhưng tôi cảm nhận được bạn nói không sai. Rất cảm ơn bạn.

Thật ra tên topic và bài này là có ý đồ vì nó nằm trong mục giải thích code, vì tôi có code chạy rồi mà không hiểu nổi nên muốn đưa lên để tìm giải pháp gọn hơn và may ra tôi hiểu chút ít để áp dụng, cũng có phần chữa cháy trong công việc chứ hỏng có học chạy đâu.

HẾT LỜI
 
Upvote 0
... Tôi không biết bạn nói đúng không vì bạo lực như phim gì đó tôi không thích, không xem, không biết. ...

Cái này thì tôi xin lỗi chủ quan. Tôi thấy từ "cao thủ" cho nên ngỡ bạn có xem qua chuyện chưởng. Tiểu thuyết Kim Dung là cái mà 99% người ở thế hệ tôi đều có đọc qua. Và đã đọc thì ai cũng biết Trương Vô Kỵ và Lệnh Hồ Xung. Cái mà tôi nói là tiểu thuyết chứ không phải phim bộ HK, ý của ông KD không được thể hiện đúng đắn qua phim. Bởi chủ quan nên tôi quên mất sự lỗi thời của mình :).
 
Upvote 0
Trường hợp nhiều nợ nhiều có thì nhiều mà anh, vấn đề là nó không như data. ví dụ như: nợ 3383/có 1111 10tr nợ 3384/có 1121 5tr. Những trường hợp mà nợ có rõ ràng như thế cho dù nhiều nợ nhiều có cũng bình thường mà.
Cái thí dụ này vô lý: Cùng nộp tiền cho cơ quan BHXH mà chi 2 khoản trong 1 ngày, vừa tiền mặt vừa chuyển khoản.

Thậm chí nếu có xảy ra, cũng phải là 2 chứng từ chứ không phải 1.
 
Upvote 0
bắt đầu từ con số 0 thì đi từ đâu mọi người
- Hì hì VBA của mình cũng là con số 0 nên muốn học hỏi. Em là dân cơ khí (Thợ hàn) mới tìm hiểu món VBA này vì em mới thay đỏi công việc.
- Nhờ có diễn đàn mà em mà em mới biết mở được cửa sổ VBE (Alt+F11) thấy chủ đề này em mừng lắm, nhưng lại hụt mất hì hì. Em có nhờ người việt hộ em một đoàn code như vầy:
Private Sub Worksheet_Change(ByVal Target As Range)Dim Dic As Object, sArr(), dArr(), J As Long, K As Long, Cot As Long
If Target.Address = "$E$9" Then
Cot = [E9].Value
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Sheets("Tong_hop").[F7:BH59].Value "------------- em muốn thêm""Sheets("Tong_hop").[F9:BH59].Value""
For J = 1 To UBound(sArr, 2)
If Not Dic.Exists(sArr(2, J)) Then
Dic.Add sArr(2, J), sArr(1, J)
End If
Next J
sArr = [F8].Resize(, Cot).Value
ReDim dArr(1 To 1, 1 To Cot)
For J = 1 To Cot
dArr(1, J) = Dic.Item(sArr(1, J))
Next J
[F7:Z7].ClearContents
[F7].Resize(, Cot).Value = dArr
[F9].Resize(, Cot).Value = ? "" ----------- để có giá trị này
Set Dic = Nothing
End If
End Sub
- Em chẳng biết làm thế nào để cho thêm nó vào dic và duyệt vòng lặp sao để cuối cùng có được giá trị của [F9].Resize(, Cot).Value = ?
- Em rất mong được các thầy chỉ bảo cho em. Em cảm ơn nhiều nhiều...
 
Lần chỉnh sửa cuối:
Upvote 0
Càng đọc càng tìm hiểu càng hoa mắt. híc híc!$@!!
 
Upvote 0
Càng đọc càng tìm hiểu càng hoa mắt. híc híc!$@!!
Cần gì "càng đọc....càng hoa mắt", không có file, mình đọc một lần mắt cũng đã hoa rồi
Theo mình, bạn nên đưa file của bạn lên, bạn áp dụng code đó làm được những gì rồi, bi giờ muốn sửa chữa để làm thêm cái gì đó thì nói rõ ra
Anh em có hiểu mới giúp bạn sửa hoặc .......viết cái khác cho "phẻ"
Thân
 
Upvote 0
- Hì hì VBA của mình cũng là con số 0 nên muốn học hỏi. Em là dân cơ khí (Thợ hàn) mới tìm hiểu món VBA này vì em mới thay đỏi công việc.
- Nhờ có diễn đàn mà em mà em mới biết mở được cửa sổ VBE (Alt+F11) thấy chủ đề này em mừng lắm, nhưng lại hụt mất hì hì. Em có nhờ người việt hộ em một đoàn code như vầy:
- Em chẳng biết làm thế nào để cho thêm nó vào dic và duyệt vòng lặp sao để cuối cùng có được giá trị của [F9].Resize(, Cot).Value = ?
- Em rất mong được các thầy chỉ bảo cho em. Em cảm ơn nhiều nhiều...
cái F7:BH59 đã bao gồm F9:Bh59 rồi còn gì (cái dòng màu xanh) nếu bạn muốn đổi phạm vi trên thành phạm vi dưới thì thay F7 thành F9
còn dòng màu đỏ dưới bạn ko muốn xuất hiện tại từ dòng F7 thì bạn cũng thay cái F7 thành F9

hỏng biết bạn muốn làm gì nên gốp ý đại 2 dòng bạn đánh dấu thôi

nếu muốn củ thể thì đưa file lên mọi người cùng làm
 
Upvote 0
Cần gì "càng đọc....càng hoa mắt", không có file, mình đọc một lần mắt cũng đã hoa rồi
Theo mình, bạn nên đưa file của bạn lên, bạn áp dụng code đó làm được những gì rồi, bi giờ muốn sửa chữa để làm thêm cái gì đó thì nói rõ ra
Anh em có hiểu mới giúp bạn sửa hoặc .......viết cái khác cho "phẻ"
Thân
- Thưa các Thầy file đây ạ!. Code của file trên [Private Sub Worksheet ''Hoc_ky"] này Thầy ""Ba tê"" giúp em đó. Em có thử sửa lại nhưng không đúng (chính là chưa hiểu híc híc..)
- Em cảm ơn Thầy Ba Tê, cảm ơn các Thầy nhiều nhiều...
 

File đính kèm

Upvote 0
- Thưa các Thầy file đây ạ!. Code của file trên [Private Sub Worksheet ''Hoc_ky"] này Thầy ""Ba tê"" giúp em đó. Em có thử sửa lại nhưng không đúng (chính là chưa hiểu híc híc..)
- Em cảm ơn Thầy Ba Tê, cảm ơn các Thầy nhiều nhiều...
Híc, sửa hổng chạy thì phải đưa cái file chưa sửa lên chứ nhỉ, lại phải đọc code rồi đoán xem bạn sửa chỗ nào, híc
Nghi nghi sao làm vậy, sai ráng chịu
Nói đùa thôi, nếu trật thì bạn ..............cứ réo Thầy Ba Tê làm tiếp cho bạn nhé
Thân
 

File đính kèm

Upvote 0
Híc, sửa hổng chạy thì phải đưa cái file chưa sửa lên chứ nhỉ, lại phải đọc code rồi đoán xem bạn sửa chỗ nào, híc
Nghi nghi sao làm vậy, sai ráng chịu
Nói đùa thôi, nếu trật thì bạn ..............cứ réo Thầy Ba Tê làm tiếp cho bạn nhé
Thân
sư phụ này toàn đá banh ko-+*/ đúng ra phải réo "concogia" <Con Cò Giấy> mới chuẩn
 
Upvote 0
Híc, sửa hổng chạy thì phải đưa cái file chưa sửa lên chứ nhỉ, lại phải đọc code rồi đoán xem bạn sửa chỗ nào, híc
Nghi nghi sao làm vậy, sai ráng chịu
Nói đùa thôi, nếu trật thì bạn ..............cứ réo Thầy Ba Tê làm tiếp cho bạn nhé
Thân
- Cảm ơn Sư phụ Concogia nhưng sư phụ xem lại cho em với. Em nhập môn không theo thứ tự thì code không nghe lời ạ.
- Hì hì .... Em ''mong'' được tất cả các sư phụ giúp em.
- Tại hôm nhờ Thầy Ba Tê thì dòng đó em để nhập thủ công, nay muốn lười thêm một chút nữa định tự sửa code mà không được.
 
Lần chỉnh sửa cuối:
Upvote 0
- Cảm ơn Sư phụ Concogia nhưng sư phụ xem lại cho em với. Em nhập môn không theo thứ tự thì code không nghe lời ạ.
- Hì hì .... Em ''mong'' được tất cả các sư phụ giúp em.
- Tại hôm nhờ Thầy Ba Tê thì dòng đó em để nhập thủ công, nay muốn lười thêm một chút nữa định tự sửa code mà không được.
Thiệt tình tới giờ mình cũng chẳng hiểu được bài của bạn nữa, bạn có thể nói lại tỉ mỉ hơn tý tẹo xem sao, còn cái này
Em nhập môn không theo thứ tự thì code không nghe lời ạ.
là ở chỗ quái nào vậy, nếu nó nghe lời thì kết quả ra mần sao, bạn quánh vào thử
Híc, Ba Tê đâu rồi, "dzô" đây làm nốt cái mình làm đi chứ
Thân
 
Upvote 0
Thiệt tình tới giờ mình cũng chẳng hiểu được bài của bạn nữa, bạn có thể nói lại tỉ mỉ hơn tý tẹo xem sao, còn cái này

là ở chỗ quái nào vậy, nếu nó nghe lời thì kết quả ra mần sao, bạn quánh vào thử
Híc, Ba Tê đâu rồi, "dzô" đây làm nốt cái mình làm đi chứ
Thân
Xin sư phụ đừng giận ạ híc híc, em xin trình bày thế này: Em nhập thủ công vào các ô Từ F8:Z8 các môn ''M1; M3; M6; M2; M5''; ...Mxy nào đó bất kỳ không theo thứ tự ở sheet Học_ky và đánh số lượng môn vào ô E9 (ví dụ M1; M3; M6; M2; M5 là 5 môn) bên sheet học kỳ thì tên của môn học tương ứng đó và hệ số của nó tương ứng được tự động copy từ ben sheet Tong_hop sang (Hệ số môn học ở sheet Tong hợp là từ F9:BH9 và tên môn học là từ F7:BH7). Em có trình bày trong file đính kèm mà híc híc..
 
Lần chỉnh sửa cuối:
Upvote 0
Xin sư phụ đừng giận ạ híc híc, em xin trình bày thế này: Em nhập thủ công vào các ô Từ F8:Z8 các môn ''M1; M3; M6; M2; M5''; ...Mxy nào đó bất kỳ không theo thứ tự ở sheet Học_ky và đánh số lượng môn vào ô E9 (ví dụ M1; M3; M6; M2; M5 là 5 môn) bên sheet học kỳ thì tên của môn học tương ứng đó và hệ số của nó tương ứng được tự động copy từ ben sheet Tong_hop sang (Hệ số môn học ở sheet Tong hợp là từ F9:BH9 và tên môn học là từ F7:BH7). Em có trình bày trong file đính kèm mà híc híc..
Híc, "xó- rì" bạn, bạn hiểu lầm rồi, văn phong của mình như thế ( bạn cứ đọc các bài của mình sẽ rõ) chứ mình đâu có giận gì bạn. Ý mình là khi bạn nói:
Em nhập môn không theo thứ tự thì code không nghe lời ạ.
thì mình muốn thấy rõ cái chưa đúng của code như thế nào để mà ..........sửa thôi. Sao bạn không sửa thẳng vào file mình gởi, chạy code, chỉ chỗ code không nghe lời để mình ...... xử nó, chứ bạn nói
Em nhập thủ công vào các ô Từ F8:Z8 các môn ''M1; M3; M6; M2; M5''; ...Mxy nào đó bất kỳ không theo.............
thì mình đang "tèo" lại càng..."tèo"
Híc, híc, híc
Thân
 
Upvote 0
Híc, "xó- rì" bạn, bạn hiểu lầm rồi, văn phong của mình như thế ( bạn cứ đọc các bài của mình sẽ rõ) chứ mình đâu có giận gì bạn. Ý mình là khi bạn nói:

thì mình muốn thấy rõ cái chưa đúng của code như thế nào để mà ..........sửa thôi. Sao bạn không sửa thẳng vào file mình gởi, chạy code, chỉ chỗ code không nghe lời để mình ...... xử nó, chứ bạn nói

thì mình đang "tèo" lại càng..."tèo"
Híc, híc, híc
Thân
Vâng có ngay ạ!. Em ghi rõ trong file của Thầy rồi ạ.
 

File đính kèm

Upvote 0
- Hì hì VBA của mình cũng là con số 0 nên muốn học hỏi. Em là dân cơ khí (Thợ hàn) mới tìm hiểu món VBA này vì em mới thay đỏi công việc.
- Nhờ có diễn đàn mà em mà em mới biết mở được cửa sổ VBE (Alt+F11) thấy chủ đề này em mừng lắm, nhưng lại hụt mất hì hì. Em có nhờ người việt hộ em một đoàn code như vầy:
- Em chẳng biết làm thế nào để cho thêm nó vào dic và duyệt vòng lặp sao để cuối cùng có được giá trị của [F9].Resize(, Cot).Value = ?
- Em rất mong được các thầy chỉ bảo cho em. Em cảm ơn nhiều nhiều...
- Em cũng xin hỏi các Thầy một chút ạ: Theo em hiểu thì trong code trên thì mảng sArr = Sheets("Tong_hop").[F7:BH59].Value chính là mảng một chiều nằm ở hàng 7 từ cột F đến cột BH; Nếu cho thêm vùng này ""Sheets("Tong_hop").[F9:BH59].Value"" chính là mảng hai chiều Từ cột (F7:F9; BH7:BH9). Vấn đề là gán vào đây và dùng vòng lặp duyệt giá trị để ra được [F9].Resize(, Cot).Value = là hệ số môn học bên sheet Học kỳ có đúng không ạ. Hì hì sai thì chẳng nói làm chi còn nếu hiẻu như trên là đúng thì em cũng chưa biết phải làm sao? hic hic
 
Upvote 0
- Em cũng xin hỏi các Thầy một chút ạ: Theo em hiểu thì trong code trên thì mảng sArr = Sheets("Tong_hop").[F7:BH59].Value chính là mảng một chiều nằm ở hàng 7 từ cột F đến cột BH; Nếu cho thêm vùng này ""Sheets("Tong_hop").[F9:BH59].Value"" chính là mảng hai chiều Từ cột (F7:F9; BH7:BH9). Vấn đề là gán vào đây và dùng vòng lặp duyệt giá trị để ra được [F9].Resize(, Cot).Value = là hệ số môn học bên sheet Học kỳ có đúng không ạ. Hì hì sai thì chẳng nói làm chi còn nếu hiẻu như trên là đúng thì em cũng chưa biết phải làm sao? hic hic
sao bạn cho cái màu đỏ là mạng 1 chiều
bạn xem lại cái màu xanh có khác gì mạng màu đỏ ko??



"đại khái là thế này cho dễ hiểu :
mạng 1 chiều là mạng chỉ có 1 hàng hoặc 1 cột
mạng 2 chiều là có số hàng và số cột điều >= 2"

vậy F7:BH59 gồm bao nhiêu hàng bao nhiêu cột ????


[F9].Resize(, Cot) ý là thiết lập lại phạm vi từ F9 lấy số cột
ví dụ : [F9].Resize(, 3) tức là ta đang chon phạm vi F9:H9

[F9].Resize(, Cot).Value = gán trí trị của mạng vào phạm vi
 
Lần chỉnh sửa cuối:
Upvote 0
"mạng 1 chiều là mạng chỉ có 1 hàng hoặc 1 cột"
mạng 2 chiều là có số hàng và số cột điều >= 2"
Cái này sai hoàn toàn nha! Xem lại topic về Array
Tóm lại: Từ Range mà đưa lên thành mảng thì hổng có cái nào lại 1 chiều cả (cho dù nó có 1 dòng nhiều cột hay 1 cột nhiều dòng)
 
Upvote 0
Cái này sai hoàn toàn nha! Xem lại topic về Array
Tóm lại: Từ Range mà đưa lên thành mảng thì hổng có cái nào lại 1 chiều cả (cho dù nó có 1 dòng nhiều cột hay 1 cột nhiều dòng)
nói nôm na để hiểu bài thôi " vì trong trường các giáo viên thường cho là hàm Match là hàm 1 chiều để học viên dễ hiểu , nên nói vậy (ko những range mà cả cells thằng Bill cũng thể hiện rõ "Cells(dòng, cột) " nên cơ bản nó đã là mạng 2 chiều )
 
Lần chỉnh sửa cuối:
Upvote 0
Hihi, hiểu rồi, nó đây
Híc. Đừng gọi mình là Thầy, mình thích gọi mình là...Cò
Thân
Cảm ơn Thầy concogia nhiều nhiều file chay đúng ý em rồi. Em sẽ tìm hiểu thêm. Nhờ các Thầy viết vừa là để sử dụng vừa là để học nên phải gọi là thầy ạ.
 
Upvote 0
nói nôm na để hiểu bài thôi " vì trong trường các giáo viên thường cho là hàm Match là hàm 1 chiều để học viên dễ hiểu , nên nói vậy (ko những range mà cả cells thằng Bill cũng thể hiện rõ "Cells(dòng, cột) " nên cơ bản nó đã là mạng 2 chiều )

Đừng nói nôm na bạn nhé. Vì:
1. Đã không nói thì thôi chứ đã nói thì phải đúng. Đừng để người ta hiểu sai.
2. Tại sao bạn nói "nôm na" khi mà nói chính xác cũng bằng ấy công viết???

Giáo viên hay ai cũng thế thôi. Nếu người ta nói sai thì hoặc bạn có thể tranh luận hoặc nếu bạn không thích "tóe lửa" thì bạn im lặng nhưng khi nói lại với người khác thì bạn nói đúng bằng lời lẽ của mình. Đừng bắt chước người khác.

Tôi không bàn chuyện nói Match thế là đúng hay sai. Ý tôi là cái gì cũng nên nói đúng.
--------------
Tất nhiên nhiều khi có những cái ta không biết diễn đạt như thế nào cho chính xác (thiếu từ?, không giỏi ăn nói?) thì ta cũng có thể lấy ví dụ tuy không sát lắm. Nhưng lúc đó ta phải nói rõ cho người ta hiểu: tôi "nói nôm na, tôi lấy vd. như thế này thế này, có thể không chính xác. Nói thế để người ta ý thức được.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái thí dụ này vô lý: Cùng nộp tiền cho cơ quan BHXH mà chi 2 khoản trong 1 ngày, vừa tiền mặt vừa chuyển khoản.

Thậm chí nếu có xảy ra, cũng phải là 2 chứng từ chứ không phải 1.

Thử lấy vì dụ này xem, em thấy cũng có nhiều người nhập phần mềm hay gộp cho khỏe:

Nợ 642
Nợ 627
Nợ 622
Có 3383
Có 3384
Có 3385
Có 3335
Có 334

Vấn đề là phức tạo quá thì ta đánh lôi những "thằng" đó qua 1 sheet kế bên riêng để ta làm lại bằng ta vì trường hợp này không nhiều trong một data mấy mươi ngàn dòng.
 
Lần chỉnh sửa cuối:
Upvote 0
Ôi cha mẹ ơi, có cả bút toán nợ 621/ có 3383-3384-3389 kà. Cả đối ứng có 334, 3335 mới ghê lun
 
Upvote 0
Ôi cha mẹ ơi, có cả bút toán nợ 621/ có 3383-3384-3389 kà. Cả đối ứng có 334, 3335 mới ghê lun

Gõ nhanh nên nhằm 642..... hic......

Có cả đối ứng như thế đấy, em làm từ nhiều PM xuất la lấy data và gặp rất nhiều trường hợp như thế.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom