Học tiếng Nhật: tải bài từ web, sắp xếp, phát âm, dịch nghĩa

Liên hệ QC
Thử code VBA nhé. 99,99% code sẽ chạy chậm hơn EXE.

Code sẽ tự tải tất cả các bài. Nếu có 50 thì tải 50, nếu có 100 thì tải 100. Chỉ cần nhấn nút "Tải bài" rồi ngồi đợi.

Trong Module1 có Const sheetName = "Sheet1". Tức kết quả tải về sẽ nhập vào sheet1. Nếu sheet nhập có tên khác thì sửa thành tên hiện hành.
Con chào Bác Siwtom,
Cảm ơn Bác đã luôn quan tâm & giúp con ạ,
hic hơn cả những gì con mong đợi rồi Bác ơi.
-----
Con sẽ code lại cho trang in theo bài & số lần lặp của mỗi từ giống như cột D:H để học từ ạ.
Con cảm ơn Bác siwtom,
Chúc Bác nhiều khỏe ạ.
 
Nếu For ... Next thì có thể "túm gọn" nó thế này
Code của anh là bước hơi cao cao của suy luận rồi. Suy luận đầu tiên của người mới học là:
- Muốn có 10 kết quả thì chạy code cũ 10 lần
- Muốn chạy 10 lần thì tạo vòng lặp trùm ra ngoài code cũ
- Chạy xong sẽ thấy nó nối tiếp nhau theo kiểu 1-50, rồi 1-50, ... 10 lần
- Bổ sung 1 cái sort cho nối tiếp kiểu 1-1-1-1-1 rồi tới 2-2-2-2-2 cho đến hết
- Sort xong thấy thứ tự không giống ban đầu vì theo abc. Thêm 1 cột chuyên dùng để sort

Đó là nội dung của code tôi viết
Khiếp quá thấy chú Mỹ thả cái buồn mà con mới tỉnh ngộ.. có phải do tham số I+4 max lên mới phải tăng kích thước thêm 2 dòng không chú ?
Không phải. Giờ làm thế này:
- Xoá cái offset(2) đi, cho nó lỗi
- Chạy khi thông báo lỗi thì nhấn debug rồi xem:
- i đang là bao nhiêu
- i +2 (mới sửa là +3) = bao nhiêu
- So sánh với số dòng của SArr (không có offset)
- Quay lại thông báo lỗi xem nó chửi đúng việc đó không
- Giả sử người viết là chính mình, thì khắc phục ra sao. Cẩn thận hơn thì nghĩ xem cách mình khắc phục có gây hậu quả gì không
 
Code của anh là bước hơi cao cao của suy luận rồi. Suy luận đầu tiên của người mới học là:
- Muốn có 10 kết quả thì chạy code cũ 10 lần
- Muốn chạy 10 lần thì tạo vòng lặp trùm ra ngoài code cũ
- Chạy xong sẽ thấy nó nối tiếp nhau theo kiểu 1-50, rồi 1-50, ... 10 lần
- Bổ sung 1 cái sort cho nối tiếp kiểu 1-1-1-1-1 rồi tới 2-2-2-2-2 cho đến hết
- Sort xong thấy thứ tự không giống ban đầu vì theo abc. Thêm 1 cột chuyên dùng để sort

Đó là nội dung của code tôi viết

Không phải. Giờ làm thế này:
- Xoá cái offset(2) đi, cho nó lỗi
- Chạy khi thông báo lỗi thì nhấn debug rồi xem:
- i đang là bao nhiêu
- i +2 (mới sửa là +3) = bao nhiêu
- So sánh với số dòng của SArr (không có offset)
- Quay lại thông báo lỗi xem nó chửi đúng việc đó không
- Giả sử người viết là chính mình, thì khắc phục ra sao. Cẩn thận hơn thì nghĩ xem cách mình khắc phục có gây hậu quả gì không

Xin chào chú Mỹ,
Cảm ơn chú Mỹ đã chỉ dẫn,
Con đã hiểu vấn đề và đã tự mình làm được cái Sheet FormIn dựa theo cơ sở dữ liệu lấy từ Website về trong tập tin đính kèm của Bác Siwtom @batman1
Con up lên đây để mọi người góp ý để phát triển thêm ạ & nếu bạn nào có nhu cầu thì sử dụng ạ.
 

File đính kèm

  • Tai bai tieng Nhat.xlsm
    168.6 KB · Đọc: 9
Chưa xong đâu. Còn câu hỏi kế tiếp:
Tại sao code ban đầu của lão @Ba Tê Redim dArr(1 to R, 1 to 4), sau đó ở bài 35 sửa lại Redim dArr( 1 to R/ 3 *x, 1 to 4)?
Tại sao code của tôi lại Redim dArr( 1 to R/4 *s, 1 to 5)?
______
Biết đặt ra câu hỏi tại sao và biết trả lời, thế mới từ từ tiến bộ.
 
Chưa xong đâu. Còn câu hỏi kế tiếp:
Tại sao code ban đầu của lão @Ba Tê Redim dArr(1 to R, 1 to 4), sau đó ở bài 35 sửa lại Redim dArr( 1 to R/ 3 *x, 1 to 4)?
Tại sao code của tôi lại Redim dArr( 1 to R/4 *s, 1 to 5)?
______
Biết đặt ra câu hỏi tại sao và biết trả lời, thế mới từ từ tiến bộ.
Dạ theo con hiểu:
Redim dArr( 1 to R/4 *s, 1 to 5)
1 to 5 là vì thêm 1 cột thứ tự để sort theo cột này, còn R/4*s là vì mảng sArr có mỗi cột có 4 dòng nếu chuyển về 1 dòng 4 cột thì chỉ còn 1 dòng, tiếp tục * với số lần lặp lại ạ.
Như vậy phải không chú Mỹ?
 
mỗi cột có 4 dòng nếu chuyển về 1 dòng 4 cột thì chỉ còn 1 dòng
Như vậy phải không chú Mỹ?
Đúng. Nhưng tạm đúng. Suy luận như vậy thì thật ra dữ liệu 5 dòng chuyển thành 1 dòng 4 cột (dòng trống không cần chuyển). Tuy nhiên nếu chia 5 thì hơi thiếu, do dữ liệu có chỗ thiếu dòng còn 4. Chia 4 thì hơi dư nhưng dư ít thôi
Vậy ban đầu tại sao lão @Ba Tê không chia, sau đó lại chia 3? Không chia luôn có được không?
 
Lần chỉnh sửa cuối:
Đúng. Nhưng tạm đúng. Suy luận như vậy thì thật ra dữ liệu 5 dòng chuyển thành 1 dòng 4 cột (dòng trống không cần chuyển). Tuy nhiên nếu chia 5 thì hơi thiếu, do dữ liệu có chỗ thiếu dòng còn 4. Chia 4 thì hơi dư nhưng dư ít thôi
Vậy ban đầu tại sao lão @Ba Tê không chia, sau đó lại chia 3? Không chia luôn có được không?
Hihi, con cảm ơn chú.
Nếu không chia thì chắc là sẽ tốn kém tài nguyên thì phải.
Qua cách làm của thầy Ba Tê và của chú con đã hiểu chỉ cần đổi thứ tự vòng lặp là có thể xử lý được việc thêm cột phụ để sort hay không, chính vì làm từng bước của chú Mỹ mà con nhận thấy được vấn đề này.
Cảm ơn chú Mỹ đã chỉ dẫn ạ.
 
Con up lên đây để mọi người góp ý để phát triển thêm ạ & nếu bạn nào có nhu cầu thì sử dụng ạ.
Trang học tiếng Nhật sử dụng responsiveVoice để phát âm từ trang https://responsivevoice.org.

Nếu ai quan tâm thì nghiên cứu API trên trang https://responsivevoice.org.

Tôi làm qua, bạn thử xem.

1. Có thể chọn từng ô (dùng chuột hoặc bàn phím) trong cột B của sheet "TU VUNG" để nghe phát âm.

2. Nếu nhấn nút "Tải phát âm" thì code sẽ tải về và ghi trên đĩa ở thư mục có tập tin Excel, mỗi tập tin MP3 có tên chính là chỉ số dòng của từ trên trang tính "TU VUNG". Tức vd. tập tin 19.mp3 là phát âm cho từ ở B19 của sheet TU VUNG. Do code ghi hàng nghìn tập tin MP3 trong cùng thư mục với tập tin Excel nên cần tạo 1 thư mục riêng và lưu tập tin Excel vào đấy.

Cả 1 và 2 đều dùng phát âm của Google.

Cách 1 luôn phải dùng kết nối internet vì chỉ khi chọn từ - chọn ô thì code mới tải nhạc về máy và ghi tạm trên đĩa -> phát nhạc -> xóa tập tin nhạc đã ghi trên đĩa.

Cách 2 thì các tập tin MP3 đã có trên máy nên không cần có internet. Nếu dùng cách 2 thì sửa Sub Worksheet_SelectionChange của sheet "TU VUNG" để phát nhạc từ tập tin trên đĩa.
 

File đính kèm

  • Tai bai tieng Nhat.xlsm
    175 KB · Đọc: 6
Nếu không chia thì chắc là sẽ tốn kém tài nguyên thì phải.
Đúng là không chia thì tốn kém tài nguyên, nhưng ban đầu không có yêu cầu nhân x nên tốn kém ít. Sau đó có nhu cầu nhân với x (10 chẳng hạn), nếu dữ liệu 100.000 dòng sẽ là 1 triệu, tốn kém bị nhân lên 10 lần.
Bây giờ tới câu hỏi khác liên quan đến cái dự án "Form In" tuyệt vời kia:
Trong code có 2 câu lệnh:
PHP:
Set Fnd = .Range("A1:A" & Lr).Find(BaiHoc)
Set Rng = .Range(.Cells(Fnd.Row, Fnd.Column + 1), .Cells(Fnd.Row, Fnd.Column + 1))
- Câu lệnh số 2 cho kết quả là mấy ô?
- Rng kết quả câu 2 so với Fnd kết quả câu 1 khác nhau thế nào mà phải thêm 1 câu lệnh?
 
Trang học tiếng Nhật sử dụng responsiveVoice để phát âm từ trang https://responsivevoice.org.

Nếu ai quan tâm thì nghiên cứu API trên trang https://responsivevoice.org.

Tôi làm qua, bạn thử xem.

1. Có thể chọn từng ô (dùng chuột hoặc bàn phím) trong cột B của sheet "TU VUNG" để nghe phát âm.

2. Nếu nhấn nút "Tải phát âm" thì code sẽ tải về và ghi trên đĩa ở thư mục có tập tin Excel, mỗi tập tin MP3 có tên chính là chỉ số dòng của từ trên trang tính "TU VUNG". Tức vd. tập tin 19.mp3 là phát âm cho từ ở B19 của sheet TU VUNG. Do code ghi hàng nghìn tập tin MP3 trong cùng thư mục với tập tin Excel nên cần tạo 1 thư mục riêng và lưu tập tin Excel vào đấy.

Cả 1 và 2 đều dùng phát âm của Google.

Cách 1 luôn phải dùng kết nối internet vì chỉ khi chọn từ - chọn ô thì code mới tải nhạc về máy và ghi tạm trên đĩa -> phát nhạc -> xóa tập tin nhạc đã ghi trên đĩa.

Cách 2 thì các tập tin MP3 đã có trên máy nên không cần có internet. Nếu dùng cách 2 thì sửa Sub Worksheet_SelectionChange của sheet "TU VUNG" để phát nhạc từ tập tin trên đĩa.

Con chào Bác Siwtom,
Con cảm ơn Bác Siwtom rất nhiều.
Ahii, càng lúc càng cảm thấy tuyệt vời quá Bác ơi.
Có lẽ tên chủ đề này cũng lên sửa thành "công cụ hỗ trợ học tiếng Nhật" thay vì tên chủ đề "Chuyển dữ liệu từ cột sang dòng theo điều kiện" vì từ bài 39 của Bác (với code vba từ file Excel) đã lấy thẳng dữ liệu từ Website về theo nhu cầu với tên chủ đề rồi, để những người mà muốn học tiếng Nhật có thể biết đến thay vì là học code VBA ạ :D
Chú @ptm0412 nếu thấy hợp lý thì chú sửa lại tên chủ đề giúp con với ạ? Con cảm ơn chú Mỹ.
-----
Con đang nghĩ đến việc tạo thêm sheet "KIEM TRA" để kiểm tra ngẫu nhiên những từ đã học theo bài và theo các lựa chọn hiện con chưa có ý tưởng về thiết kế thế nào, để con nghĩ thêm sau đó con sẽ thông tin lại lên đây ạ,nếu không xử lý được con lại up lên đây nhờ mọi người tiếp sức ạ.

Đúng là không chia thì tốn kém tài nguyên, nhưng ban đầu không có yêu cầu nhân x nên tốn kém ít. Sau đó có nhu cầu nhân với x (10 chẳng hạn), nếu dữ liệu 100.000 dòng sẽ là 1 triệu, tốn kém bị nhân lên 10 lần.
Bây giờ tới câu hỏi khác liên quan đến cái dự án "Form In" tuyệt vời kia:
Trong code có 2 câu lệnh:
PHP:
Set Fnd = .Range("A1:A" & Lr).Find(BaiHoc)
Set Rng = .Range(.Cells(Fnd.Row, Fnd.Column + 1), .Cells(Fnd.Row, Fnd.Column + 1))
- Câu lệnh số 2 cho kết quả là mấy ô?
- Rng kết quả câu 2 so với Fnd kết quả câu 1 khác nhau thế nào mà phải thêm 1 câu lệnh?

Con chào chú Mỹ,cảm ơn chú Mỹ ạ
Hehe tuyệt vời thật ah chú Mỹ,
Con chẳng biết xử lý kiểu gì vì cột bài học ở sheet dữ liệu lấy từ Website trong sheet "TU VUNG" nó chỉ có một từ không liên tục giống như một khối dữ liệu từ vựng của mỗi bài nên con nghĩ đến việc sử dụng tìm kiếm rồi di chuyển sang 1 cột, sau đó quét mảng dữ liệu liên tục.... thành ra code nó phải tách làm 2 dòng như vậy ạ.
Trước khi con đổ dữ liệu vào mảng thì cũng đã sử câu lệnh select đến vị trí trước xem có đúng không ạ, chính vì thế mà trong code con vẫn để các dòng select để khi cần có thể kiểm tra lại.
Câu lệnh "Fnd " là để tìm vị trí của bài học sau khi xác định vị trí được rồi thì tai dòng Fnd.Row & Fnd.Column + 1 (dịch sang bên phải 1 cột) để di chuyển đến vùng dữ liệu liên tục.
Theo qui định của thuộc tính Range có 2 tham số lên nó thành: .Range(.Cells(Fnd.Row, Fnd.Column + 1), .Cells(Fnd.Row, Fnd.Column + 1))
Ủa tự nhiên được khen con thấy mình tiến bộ hay sau ấy hí hí hí..
 
(dịch sang bên phải 1 cột)
...
Theo qui định của thuộc tính Range có 2 tham số lên nó thành: .Range(.Cells(Fnd.Row, Fnd.Column + 1), .Cells(Fnd.Row, Fnd.Column + 1))
Ủa tự nhiên được khen con thấy mình tiến bộ hay sau ấy hí hí hí..
Dịch sang phải 1 cột thì có cái hàm offset rất tuyệt vời
Nếu dùng offset thì mắc gì phải dùng Range cho bị lệ thuộc vào việc 2 tham số
Kết hợp với câu 1 thì chẳng cần đến 2 câu:
PHP:
Set Rng = .Range("A1:A" & Lr).Find(BaiHoc).Offset(0, 1)
_______
Hình như mình mắng mà nó tưởng mình khen, thôi kệ, cho nó miếng động lực :p :p
 
Dịch sang phải 1 cột thì có cái hàm offset rất tuyệt vời
Nếu dùng offset thì mắc gì phải dùng Range cho bị lệ thuộc vào việc 2 tham số
Kết hợp với câu 1 thì chẳng cần đến 2 câu:
PHP:
Set Rng = .Range("A1:A" & Lr).Find(BaiHoc).Offset(0, 1)
_______
Hình như mình mắng mà nó tưởng mình khen, thôi kệ, cho nó miếng động lực :p :p
Vầng xong con sẽ sửa lại chỗ này, con măm măm đã ạ (khuya khuya rồi con lại tiếp tục) không bọn trẻ nó đói (vừa về đến nhà con nhận được cái file kèm âm thanh của bác Siwtom thích quá lại vào máy ngồi).
Chú sửa giúp con tên chủ đề với ạ, con cảm ơn chú Mỹ.
 
"mình" xin được gửi link ạ: :"'
Tôi làm vui, một cách dùng Power query connect web!
 

File đính kèm

  • PQ connect web.xlsx
    156.9 KB · Đọc: 20
Vậy sửa luôn 3 câu thành 1, gộp luôn cả Offset cả Resize. Chú khỏi hỏi thêm câu nữa, khỏi thức phia
PHP:
Set r = .Range("A1:A" & Lr).Find(BaiHoc).Offset(0, 1).Resize(, 4)
Con chào chú Mỹ, chắc chú chưa để ý chỗ: Rng.End(xlDown) để quét toàn bộ khối dữ liệu của bài học (đến dòng cuối của bài) vì mỗi bài được cách nhau bởi dấu cách tìm được.
Hôm nay con cũng phải loay hoay mãi chỗ này,chính vì thế để gộp cả 3 câu thành 1 thì câu lệnh trên lại phải dài thêm nữa rồi khó nhìn hơn chú ạ.
Nên con chọn cách gộp 2 dòng cho dễ nhìn chú ạ.
Con thấy tên chủ đề đã thay đổi con cảm ơn chú @ptm0412 rất nhiều, hi vọng ứng dụng này sẽ được phát triển thêm để có thêm tiện ích và cảm hứng cho người học ạ.

Phiền chú có thể sửa giúp con tại bài 1 bổ sung thêm 1 đoạn gì ghi chú khác biệt gì đó để thông tin đến mọi người hoặc đính kèm thêm tập tin tại bài 48 của bác Siwtom được không ạ?

Tôi làm vui, một cách dùng Power query connect web!
Xin chào excel_lv1.5,
Xin cảm ơn bạn đã quan tâm & chỉ dẫn cho OT biết thêm cách mới,
OT đã được thấy sự lợi hại của "Power query" qua nhiều bài viết của bạn và chú Mỹ, nên nhiều lúc cũng muốn tìm hiểu thêm mà thấy ngại quá ạ.
OT thấy bạn có kiến thức cao về code rất mong được bạn tham gia & góp ý thêm cho ứng dụng "Học tiếng Nhật" này ạ.
 
Hôm nay con cũng phải loay hoay mãi chỗ này,chính vì thế để gộp cả 3 câu thành 1 thì câu lệnh trên lại phải dài thêm nữa rồi khó nhìn hơn chú ạ.
Biết dừng đúng lúc. Câu này khen thật
------
Xin chào excel_lv1.5,
Xin cảm ơn bạn đã quan tâm & chỉ dẫn cho OT biết thêm cách mới,
OT đã được thấy sự lợi hại của "Power query" qua nhiều bài viết của bạn và chú Mỹ, nên nhiều lúc cũng muốn tìm hiểu thêm mà thấy ngại quá ạ.
Power query mức độ căn bản như tài liệu tôi viết là đủ xài, khi đụng vấn đề lớn như những bài của @excel_lv1.5 thì dừng cũng phải, chứ chưa gì đã ngại sao? Lỡ khen câu trên chả lẽ rút lại.
 
Xin chào tất cả mọi người ( @batman1 @ptm0412 @Ba Tê @excel_lv1.5 ...)
Con đã tạo thêm một mẫu sheet "ON TAP" với ý tưởng như ảnh kèm bên dưới,Bác/Thầy và Chú xem & giúp con xem thiết kế như này có ổn không ạ?
Hic con xin phép, giờ con phải học một chút tiếng Nhật ạ tối mai con đi học rồi mà cả ngày nay loay hoay mãi cái công cụ chưa được chữ nào vào đầu cả, ngày mai con vẫn phải đi làm chắc đêm mai con mới code thử được ạ. Nếu thầy/Chú/Bác có nhã hứng & thời gian code chơi & phát triển thêm giúp con được thì còn gì bằng ạ.
Cảm ơn tất cả mọi người ạ.

Untitled.jpg
 

File đính kèm

  • Tai bai tieng Nhat (1).xlsm
    190.5 KB · Đọc: 10
Trang học tiếng Nhật sử dụng responsiveVoice để phát âm từ trang https://responsivevoice.org.
Nếu ai quan tâm thì nghiên cứu API trên trang https://responsivevoice.org.

Tôi làm qua, bạn thử xem.

1. Có thể chọn từng ô (dùng chuột hoặc bàn phím) trong cột B của sheet "TU VUNG" để nghe phát âm.

2. Nếu nhấn nút "Tải phát âm" thì code sẽ tải về và ghi trên đĩa ở thư mục có tập tin Excel, mỗi tập tin MP3 có tên chính là chỉ số dòng của từ trên trang tính "TU VUNG". Tức vd. tập tin 19.mp3 là phát âm cho từ ở B19 của sheet TU VUNG. Do code ghi hàng nghìn tập tin MP3 trong cùng thư mục với tập tin Excel nên cần tạo 1 thư mục riêng và lưu tập tin Excel vào đấy.

Cả 1 và 2 đều dùng phát âm của Google.

Cách 1 luôn phải dùng kết nối internet vì chỉ khi chọn từ - chọn ô thì code mới tải nhạc về máy và ghi tạm trên đĩa -> phát nhạc -> xóa tập tin nhạc đã ghi trên đĩa.

Cách 2 thì các tập tin MP3 đã có trên máy nên không cần có internet. Nếu dùng cách 2 thì sửa Sub Worksheet_SelectionChange của sheet "TU VUNG" để phát nhạc từ tập tin trên đĩa.
Bác ơi, hiện tại bác đang sử dụng trình phát âm của Google vậy nếu phải để phát âm từ trang https://responsivevoice.org. , thì code có thay đổi nhiều không ạ?
Nếu ít Bác xem giúp con với ạ, bác có thểm thêm giúp con mục lựa chọn nguồn theo Google hoặc trang https://responsivevoice.org. tại ô nào đó trên bảng tính được không ạ?
Con cảm ơn Bác nhiều ạ.
 
Biết dừng đúng lúc. Câu này khen thật
------

Power query mức độ căn bản như tài liệu tôi viết là đủ xài, khi đụng vấn đề lớn như những bài của @excel_lv1.5 thì dừng cũng phải, chứ chưa gì đã ngại sao? Lỡ khen câu trên chả lẽ rút lại.
Dạ chú, ngại vì còn ít tuổi (cũng già đầu 3 :D rồi ấy) con muốn dành thời gian cho gia đình & công việc trước ạ.
Hiện nay vba con thấy giải quyết khá là hữu ích có thể tùy biến các kiểu còn "Power query" thì nó còn phụ thuộc vào cơ sở dữ liệu nguồn phải chuẩn chỉnh nữa thì phải ạ.
 
Web KT
Back
Top Bottom