Lấy dữ liệu thời tiết Accuweather để điền vào nhật ký thi công (1 người xem)

Liên hệ QC

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

Bùi Thúy Thúy

Thành viên thường trực
Tham gia
2/7/18
Bài viết
290
Được thích
38
Em tham khảo được cách lấy dữ liệu lịch sử thời tiết trên Accuweather từ giaiphapexxcel.
Có vấn đề sau muốn được xin ý kiến về ý tưởng và sự chỉ giúp từ các Anh Chị:
Sau khi em lấy dữ liệu thời tiết về từ Accuweather, bài toán đặt ra như sau (4 vấn đề):
1. Chuyển định dạng cột A hoặc G về định dạng "ngày/tháng/năm" và sau khi chuyển đổi định dạng thì dữ liệu định dạng được được điền vào cột H;
2. Đem lượng mưa ở (cột C) đối chiếu với bảng 1 và sau đó điền"mưa" hay " không mưa" vào cột "Dự báo"
3. Sau đó đến cột "Thời tiết" (cột I) trong sheet "tong hợp thoi tiet" sẽ được căn cứ vào cột "Dự báo" (Cột J), nếu trong cột"Dự báo" mà trời mưa thì cột thời tiết (Cột I) là "mưa", còn nếu "không mưa" thì sẽ căn cứ vào giá trị nhiệt độ lớn nhất trong ngày ( trị số nhiệt độ đứng trước được ngăn cách bởi dấu / ở Cột B) để đối chiếu với bảng 2 và điền dữ liệu vào cột I, giá trị nhiệt độ Max, Min được lấy từ cột B(..../......) và được điền vào cột Kcột L
*** Như vậy:
- Dữ liệu sau khi điền vào cột "dự báo" (Cột J) sẽ là: "mưa" hoặc "không mưa"
- Dữ liệu được điền vào cột "thời tiết" (Cột I) sẽ có : "mưa" hoặc " Nắng" hoặc "Bình thường"hoặc "Rét đậm, rét hại"
- Dữ liệu nhiệt độ Max, Min sẽ được điền vào tương ứng cột L cột K
4. Dữ liệu "Thời tiết" (Cột R) ở các ngày từ "sheet 1" đến "Sheet n" sẽ được lấy từ cột I của Sheet "Tong hop thoi tiet" và được điền vào (cột R) các ngày tương ứng từ sheet 1 đến Sheet n
Em xin cám ơn! và mong được sự đóng góp và chỉ bảo của các Thầy, các Anh, Chị.
tiet.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Em tham khảo được cách lấy dữ liệu lịch sử thời tiết trên Accuweather từ giaiphapexxcel.
Có vấn đề sau muốn được xin ý kiến về ý tưởng và sự chỉ giúp từ các Anh Chị:
Sau khi em lấy dữ liệu thời tiết về từ Accuweather, bài toán đặt ra như sau:
1. Chuyển định dạng cột A hoặc G về định dạng "ngày/tháng/năm" và sau khi chuyển đổi định dạng thì dữ liệu định dạng được được điền vào cột H;
2. Đem lượng mưa ở (cột C) đối chiếu với bảng 1 và sau đó điền"mưa" hay " không mưa" vào cột "Dự báo"
3. Sau đó đến cột "Thời tiết" (cột I) trong sheet "tong hợp thoi tiet" sẽ được căn cứ vào cột "Dự báo" (Cột E), nếu trong cột"Dự báo" mà trời mưa thì cột thời tiết (Cột I) là "mưa", còn nếu "không mưa" thì sẽ căn cứ vào giá trị nhiệt độ lớn nhất trong ngày ( trị số nhiệt độ đứng trước được ngăn cách bởi dấu / ở Cột B) để đối chiếu với bảng 2 và điền dữ liệu vào cột I
*** Như vậy:
- Dữ liệu sau khi điền vào cột "dự báo" (Cột E) sẽ là: "mưa" hoặc "không mưa"
- Dữ liệu được điền vào cột "thời tiết" (Cột I) sẽ có : "mưa" hoặc " Nắng" hoặc "Bình thường"
4. Dữ liệu "Thời tiết" (Cột R) các ngày trong sheet từ 1 đến Sheet n sẽ được lấy từ Sheet "Tong hop thoi tiet" và được điền vào các ngày tương ứng trong từng sheet từ sheet 1 đến Sheet n
Em xin cám ơn! và mong được sự đóng góp và chỉ bảo của các Thầy, các Anh, Chị.
View attachment 202512
Vậy trời không mưa nhiệt độ 4°c thì có cho nó là bình thường được không Bạn
 
Upvote 0
Vậy trời không mưa nhiệt độ 4°c thì có cho nó là bình thường được không Bạn
Nhiệt độ ở cột B dạng (... /.... ) em lấy giá trị trước dấu"/" đó là giá trị để đem so sánh, vâng cứ để vậy Chị ạ! vì cũng mấy khi mà nhiệt độ ở Việt Nam lạnh đến mức mà công trường nghỉ thi công đâu ạ!
Chị giúp e mới nhé! cảm ơn chị, chúc chị cuối tuần nhiều niềm vui và may mắn!
 
Upvote 0
Nhiệt độ ở cột B dạng ( / ) em lấy giá trị trước dấu"/" đó là giá trị để đem so sánh, vâng cứ để vậy Chi ạ! vì cũng mấy khi mà nhiệt độ ở Việt Nam lạnh đến mức mà công trường nghỉ thi công đâu ạ!
Chị giúp e mới nhé! cám ơn chị, chúc chị cuối tuần nhiều niềm vui và may mắn!
Trên Sapa nó đóng thành tuyết kìa. Mùa đông mặc 3 cái áo khoắc cấn lách sao mà đang tay ra làm được việc gì @$@!^%@$@!^%
 
Upvote 0
Trên Sapa nó đóng thành tuyết kìa. Mùa đông mặc 3 cái áo khoắc cấn lách sao mà đang tay ra làm được việc gì @$@!^%@$@!^%
Vâng, chị cho ý kiến hợp lý, để e đính chính lại file ban đầu chút cho những bạn nào thi công ở khu vực có thời tiết khắc nhiệt có thể tham khảo ạ!
Bài đã được tự động gộp:

Vâng, chị cho ý kiến hợp lý, để e đính chính lại file bài #1 ban đầu chút cho những bạn nào thi công ở khu vực có thời tiết khắc nhiệt có thể tham khảo ạ!
 
Upvote 0
Bạn dùng Formula để viết vào trong VBA biểu thức như mình viết nhé. bạn viết đã đến tầm đấy rồi thì chắc biết làm gì tiếp
 

File đính kèm

Upvote 0
Trên Sapa nó đóng thành tuyết kìa. Mùa đông mặc 3 cái áo khoắc cấn lách sao mà đang tay ra làm được việc gì @$@!^%@$@!^%
Em đã đính chính lại bài #1 cho phù hợp nếu nhiệt độ thấp quá, chị giúp đỡ và cho ý kiến thêm để phù hợp hơn ạ!
Bài đã được tự động gộp:

Bạn dùng Formula để viết vào trong VBA biểu thức như mình viết nhé. bạn viết đã đến tầm đấy rồi thì chắc biết làm gì tiếp
Hi em còn gà lắm, em lấy code dữ liệu thời tiết từ giaiphapexxcel và có ý tưởng vậy, chứ thực sự cũng chưa làm được ạ!
Mong anh và các Thầy giúp em ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Đây nhé, của bạn đây nhé. mình đã chỉnh sửa lại một số dữ liễu trên bảng của bạn cho hợp lý hơn, bạn kiểm tra lại nhé
 

File đính kèm

Upvote 0
Đây nhé, của bạn đây nhé. mình đã chỉnh sửa lại một số dữ liễu trên bảng của bạn cho hợp lý hơn, bạn kiểm tra lại nhé
Vâng, em cám ơn ạ!
Anh ơi em muốn hỏi anh thêm chút như sau:
1) Điển hình ở ô A6 dữ liệu được hiểu là "thứ 3 ngày 10 tháng 10", ở ô G6 là "tháng 10 năm 2017"
Em muốn dữ liệu ở cột H6 được điền vào (ở đây chắc phải kết hợp dữ liệu giữa cột A6 và cột G6 ) để có định dạng ngày/tháng/năm:
Em ví dụ ở dòng thứ 6 thì dữ liệu ở ô H6 sẽ là "10/10/2017", ở ô H19 là "23/10/2017" và các ô tiếp theo cũng theo quy luật tương tự
2) Dữ liệu được điền vào "cột E";; "cột I" trong vùng từ chọn từ cột A đến cột I chứ không phải trong bảng từ vùng chọ từ cột L đến cột O (ở đây em nói không rõ, em đã đính chính lại bài #1 để rõ hơn)
Em xin sự giúp đỡ từ anh ạ!
 
Lần chỉnh sửa cuối:
Upvote 0
Anh sửa lại cho em cái đoạn đấy định dạng đấy rồi mà. anh lấy trực tiếp dữ liệu từ cột G sang cột H mà. Còn như em nói muốn nhảy theo quy luật thì e cứ lấy dòng trên công thêm 1 với dòng dưới giống như anh làm ở cột H ấy là đc ( em xem từ dòng dữ liệu thứ 2 của cột H xem có đúng thế ko). còn dữ liệu em muốn điều chỉnh vào vùng nào để điền thì em tự dùng cách "Cut" cột là xong mà, ở đây em cứ "Cut" từ cột O sang cột I là đc.
 
Upvote 0
Anh sửa lại cho em cái đoạn đấy định dạng đấy rồi mà. anh lấy trực tiếp dữ liệu từ cột G sang cột H mà. Còn như em nói muốn nhảy theo quy luật thì e cứ lấy dòng trên công thêm 1 với dòng dưới giống như anh làm ở cột H ấy là đc ( em xem từ dòng dữ liệu thứ 2 của cột H xem có đúng thế ko). còn dữ liệu em muốn điều chỉnh vào vùng nào để điền thì em tự dùng cách "Cut" cột là xong mà, ở đây em cứ "Cut" từ cột O sang cột I là đc.
Vâng ạ! ở dòng thứ 6 kết hợp ô A6 và G6 thì dữ liệu ô H6 sẽ là ngày sẽ là 10/10/2017 nhưng em thấy định dạng là 1/10/2017
Cảm ơn anh!
 
Upvote 0
- Dữ liệu sau khi điền vào cột "dự báo" (Cột E) sẽ là: "mưa" hoặc "không mưa"
- Dữ liệu được điền vào cột "thời tiết" (Cột I) sẽ có : "mưa" hoặc " Nắng" hoặc "Bình thường"hoặc "Rét đậm, rét hại"
Tạm thời làm 1 sheet, nếu đúng rồi thì các sheet khác tính sau.
 

File đính kèm

Upvote 0
Tạm thời làm 1 sheet, nếu đúng rồi thì các sheet khác tính sau.
Dạ đúng quá Thầy ạ! có vấn đề này Em nhờ Thầy chỉnh lại cho em chút nữa là hoàn chỉnh lắm ạ!
1. Thầy điền giúp em dữ liệu "dự báo" trước ở "cột E" giờ chuyển về "cột J" (bởi vì nếu điền trong vùng chọn dữ liệu từ A đến G khi chạy maccro lấy lại dữ liệu thời tiết thì dữ liệu ở "cột E" sẽ bị xóa đi trở về mặc định ban đầu là trống) nên em muốn dữ liệu được điền chuyển ra khỏi vùng bảng từ cột A đến G.
2. Thầy giúp em thêm nhiệt độ Min và Max ở 2 cột tương ứng KL được lấy tương ứng từ Cột B (Nhiệt độ Max/Nhiệt độ Min)
3. Các sheet còn lại từ shee 1 đến Sheet n (giờ mới tính ...hi..)
E mới chỉ có ý tưởng nên chưa được chỉn chu, hi...chắc giờ cũng tương đối rồi.
Thầy làm ơn giúp em nốt lần này nhé!
Em chân thành cám ơn Thầy ạ!
tiet.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dạ đúng quá Thầy ạ! có vấn đề này Em nhờ Thầy chỉnh lại cho em chút nữa là hoàn chỉnh lắm ạ!
1. Thầy điền giúp em dữ liệu "dự báo" trước ở "cột E" giờ chuyển về "cột J" (bởi vì nếu điền trong vùng chọn dữ liệu từ A đến G khi chạy maccro lấy lại dữ liêu thời tiết thì dữ liệu ở "cột E" sẽ bị xóa đi trở về mặc định ban đầu là trống) nên em muốn dữ liệu được điền chuyển ra khỏi vùng bảng từ cột A đến G.
2. Thầy giúp em thêm nhiệt độ Min và Max ở 2 cột tương ứng JL được lấy tương ứng từ Cột B (Nhiệt độ Max/Nhiệt độ Min)
3. Các sheet còn lại từ shee 1 đến Sheet n
E mới chỉ có ý tưởng nên chưa được chỉn chu, hi...chắc giờ cũng tương đối rồi
Thầy làm ơn giúp em nốt lần này nhé!
Em chân thành cám ơn Thầy ạ!
Cái gì thì cũng có file để nhìn, chứ nói J, L ai biết nó là cái gì.
 
Upvote 0

File đính kèm

Upvote 0
Dạ em cảm ơn nhiều! Rất hay và cần thiết chị ạ!
Không phải cảm ơn đâu. Vì cái này định làm lâu rồi mà hôm nay mới làm được. Chắc hôm nào nhờ các Tiền bối sửa lại cái Code lấy dữ liệu từ Web thì tốt quá (Vì mình đã có địa chỉ từng trạm rồi)
 
Upvote 0
Không phải cảm ơn đâu. Vì cái này định làm lâu rồi mà hôm nay mới làm được. Chắc hôm nào nhờ các Tiền bối sửa lại cái Code lấy dữ liệu từ Web thì tốt quá (Vì mình đã có địa chỉ từng trạm rồi)
Em thấy có bài viết lấy lịch sử thời tiết từ Web ở GPE rồi ạ! ở đó cũng có code, phải sửa lại thêm à chị thì mới lấy được của từng trạm ạ!
 
Upvote 0
Em thấy có bài viết lấy lịch sử thời tiết từ Web ở GPE rồi ạ! ở đó cũng có code, phải sửa lại thêm à chị thì mới lấy được của từng trạm ạ!
Bấm vào cái nút hiện Form rồi chọn trạm cần lấy số liệu/. Mình mù tịt khoản này. Cái Code trong file của Bạn là của Anh @excel_lv1.5 . Một tỉnh nó có mấy trạm quan trắc sao mà nhớ hết nổi. Minh đã ngồi thống kê lại hôm nào nhờ Anh excel_lv1.5 hoặc các Thầy trên diễn đàn giúp lại xem lấy được địa chỉ trực tiếp từ cột C của Sheets("Data") tốc độ của nó có cải thiện được chút nào không :p
 
Upvote 0
Mình mù tịt khoản này. Cái Code trong file của Bạn là của Anh @excel_lv1.5 . Một tỉnh nó có mấy trạm quan trắc sao mà nhớ hết nổi. Minh đã ngồi thống kê lại hôm nào nhờ Anh excel_lv1.5 hoặc các Thầy trên diễn đàn giúp lại xem lấy được địa chỉ trực tiếp từ cột C của Sheets("Data") tốc độ của nó có cải thiện được chút nào không :p
Vâng em hôm qua em cũng vào tìm nhưng chỉ biết ứng dụng rồi đưa ra ý tưởng và xin ý kiến của các Thầy chứ gà quá không biết.
Qua đây cũng nhờ các Thầy cho ý kiến và chỉ giáo thêm trong bài #20 mà chị ♫ђöล♥ßล†♥†µ♫ đã đóng góp :<>
 
Upvote 0
Bấm vào cái nút hiện Form rồi chọn trạm cần lấy số liệu/. Mình mù tịt khoản này. Cái Code trong file của Bạn là của Anh @excel_lv1.5 . Một tỉnh nó có mấy trạm quan trắc sao mà nhớ hết nổi. Minh đã ngồi thống kê lại hôm nào nhờ Anh excel_lv1.5 hoặc các Thầy trên diễn đàn giúp lại xem lấy được địa chỉ trực tiếp từ cột C của Sheets("Data") tốc độ của nó có cải thiện được chút nào không :p
Ủa vậy là file này là đi gom của các bạn khác hả ? Vậy mà mình cứ tưởng diễn đàn xuất hiện thêm vị anh hùng nào nữa chứ :busted_cop:
 
Upvote 0
Ủa vậy là file này là đi gom của các bạn khác hả ? Vậy mà mình cứ tưởng diễn đàn xuất hiện thêm vị anh hùng nào nữa chứ :busted_cop:
Cũng muốn làm Anh hùng lắm ạ! nhưng chưa làm được!:gathering:, thôi thì đành gom của các Thầy, các bạn, hi....vừa gom vừa học {}{}{
 
Upvote 0
Upvote 0
Upvote 0
"Em" nó năn nỉ thì thôi chịu khó ra tay đi cái "cô" kia ơi.

Nếu có thời gian và "thấy vui" thì em vẫn làm mà không cần đợi ai phải nhắc, đam mê mà. Nhưng kì này cơm gạo dí dữ quá, em đâu dám hứa hẹn với ai, rốt cục lại trở thành kẻ xấu xa trong mắt mọi người.:)
 
Upvote 0

File đính kèm

Upvote 0
Em xin cám ơn Thầy Ba Tê ạ!
Bài đã được tự động gộp:

"Em" nó năn nỉ thì thôi chịu khó ra tay đi cái "cô" kia ơi.
Vâng em hôm qua em cũng vào tìm nhưng chỉ biết ứng dụng rồi đưa ra ý tưởng và xin ý kiến của các Thầy chứ gà quá không biết.
Qua đây cũng nhờ các Thầy cho ý kiến và chỉ giáo thêm trong bài #20 mà chị @♫ђöล♥ßล†♥†µ♫ đã đóng góp
clap3.gif
 
Lần chỉnh sửa cuối:
Upvote 0
Em có xem lại bài #30 thầy giúp em, các vấn đề từ 1 đến 3 (đã nêu ở bài #1) đều rất tốt ạ!
Còn vấn đề 4 :
Dữ liệu "Thời tiết" (Cột R) ở các ngày từ "sheet 1" đến "Sheet n" sẽ được lấy từ cột I của Sheet "Tong hop thoi tiet" và được điền vào (cột R) các ngày tương ứng từ sheet 1 đến Sheet n.
Mong thầy giúp đỡ em vấn đề 4 nêu trên để hoàn thiện.
E cám ơn Thầy!
 
Lần chỉnh sửa cuối:
Upvote 0
Em có xem lại bài #30 thầy giúp em, các vấn đề từ 1 đến 3 (đã nêu ở bài #1) đều rất tốt ạ!
Còn vấn đề 4 :
Dữ liệu "Thời tiết" (Cột R) ở các ngày từ "sheet 1" đến "Sheet n" sẽ được lấy từ cột I của Sheet "Tong hop thoi tiet" và được điền vào (cột R) các ngày tương ứng từ sheet 1 đến Sheet n.
Mong thầy giúp đỡ em vấn đề 4 nêu trên để hoàn thiện.
E cám ơn Thầy!
Sheet gì là sheet gì, có tên họ đàng hoàng.
Sheet 1 đến sheet n là sao, nói kiểu giỡn chơi làm sao biết quy luật tên sheet mà viết code.
T1 đến T10 khác với T01 đến T10, 01_2018 đến 12_2018 .... và 1 đống cái lu bu nữa.
Bạn "giỡn" với dữ liệu của bạn làm sao người khác "tôn trọng" dữ liệu của bạn mà giúp.
Tôi nghỉ Topic này từ đây.
Hẹn gặp lại ở những topic rõ ràng hơn.
 
Upvote 0
Sheet gì là sheet gì, có tên họ đàng hoàng.
Sheet 1 đến sheet n là sao, nói kiểu giỡn chơi làm sao biết quy luật tên sheet mà viết code.
T1 đến T10 khác với T01 đến T10, 01_2018 đến 12_2018 .... và 1 đống cái lu bu nữa.
Bạn "giỡn" với dữ liệu của bạn làm sao người khác "tôn trọng" dữ liệu của bạn mà giúp.
Tôi nghỉ Topic này từ đây.
Hẹn gặp lại ở những topic rõ ràng hơn.
Vâng, em cám ơn Thầy! em sẽ rút kinh nghiệm ạ!
 
Upvote 0
Không phải cảm ơn đâu. Vì cái này định làm lâu rồi mà hôm nay mới làm được. Chắc hôm nào nhờ các Tiền bối sửa lại cái Code lấy dữ liệu từ Web thì tốt quá (Vì mình đã có địa chỉ từng trạm rồi)
Chào Chị, chúc chị ngày mới vui vẻ!
Chị cho em hỏi chút em thấy code lấy thời tiết của chị bài #16 chạy tốt mà, code có còn vấn đề gì nữa không chị ?
 
Upvote 0
Chào Chị, chúc chị ngày mới vui vẻ!
Chị cho em hỏi chút em thấy code lấy thời tiết của chị bài #16 chạy tốt mà, code có còn vấn đề gì nữa không chị ?
Đâu có vấn đề gì đâu Bạn. Hôm trước là mình chỉ nói "Nếu như .... thì ..." thôi mà. Hiện nay mình vẫn đang dùng Code trên ;););)
 
Upvote 0
Đâu có vấn đề gì đâu Bạn. Hôm trước là mình chỉ nói "Nếu như .... thì ..." thôi mà. Hiện nay mình vẫn đang dùng Code trên ;););)
Dạ, vâng em thấy code chạy tốt mà, chắc chị muốn tăng tốc lên ạ! hi
Bài đã được tự động gộp:

Bạn xem thử cái này. Bao gồm 64 tỉnh thành :p:p:p
Em vừa tham khảo chức năng " UserForm_TT" để điền dữ liệu vào đó rồi chạy! em cũng có file tương tự của chị, chị giúp em có thêm cái " UserForm_TT" như của chị để nhập liệu được không ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Dạ, vâng em thấy code chạy tốt mà, chắc chị muốn tăng tốc lên ạ! hi
Bài đã được tự động gộp:


Em vừa tham khảo chức năng " UserForm_TT" để điền dữ liệu vào đó rồi chạy! em cũng có file tương tự của chị, chị giúp em có thêm cái " UserForm_TT" như của chị để nhập liệu được không ạ!
Bạn xem thử
 

File đính kèm

Upvote 0
mình không theo dõi hết từ đầu chủ đề, mình có thể hỏi bạn đã tạo sheet data bằng cách nào không ạ ?
Em lên trang Web Copy thủ công về ạ. Cực lắm chị ạ. Chị giúp em cái Code tạo phần ấy được không ạ
 
Upvote 0
Em lên trang Web Copy thủ công về ạ. Cực lắm chị ạ. Chị giúp em cái Code tạo phần ấy được không ạ

Đó thực sự là 1 nỗ lực tuyệt vời, cho thấy sự kiên trì, bền bỉ tuyệt vời. Bạn có những đức tính ấy thì sẽ sớm trở thành chuyên gia rất giỏi.
Mình thấy hổ thẹn không được như bạn. Mình cũng không biết có cách nào tạo ra phần đó bằng code.
 
Upvote 0
Đó thực sự là 1 nỗ lực tuyệt vời, cho thấy sự kiên trì, bền bỉ tuyệt vời. Bạn có những đức tính ấy thì sẽ sớm trở thành chuyên gia rất giỏi.
Mình thấy hổ thẹn không được như bạn. Mình cũng không biết có cách nào tạo ra phần đó bằng code.
Chị ơi. Chị ơi... em vào GPE (cũng khoảng 2 năm rùi mà ). Em cũng đọc rất nhiều bài của chị (À không phải. Bài của Anh kia). Qua đó em cũng vọc vạch trả lời trên diễn đàn để thực tập các kiến thức mình đã học được. Mong Chị yêu quý giúp đỡ bọn em với (*). Em cám ơn chị nhiều
(*) Chị không giúp là em mách thầy em đóa. Mà có lần Thầy em bẩu Chị là "Tên lười bướng nhấc máy" :p:p:p
 
Lần chỉnh sửa cuối:
Upvote 0
Chị ơi. Chị ơi... em vào GPE (cũng khoảng 2 năm rùi mà ). Em cũng đọc rất nhiều bài của chị (À không phải. Bài của Anh kia). Qua đó em cũng vọc vạch trả lời trên diễn đàn để thực tập các kiến thức mình đã học được. Mong Chị yêu quý giúp đỡ bọn em với (*). Em cám ơn chị nhiều
(*) Chị không giúp là em mách thầy em đóa. Mà có lần Thầy em bẩu Chị là "Tên lười bướng nhấc máy":p:p:p

Ủa chị này, anh kia là gì vậy bạn ? mình không hiểu bạn đang nói về điều gì ?
Nay mình được nghỉ nên vào nghịch chơi, lấy danh sách các trạm gì đó.
Lâu quá không viết mấy cái này, chắc lạc hậu với các bạn ở đây rồi.

Mã:
Public Sub hello()
Dim arrTinh, arrTram, arrGop, x As Long, y As Long, k As Long
arrTinh = dichNoiDungUlHtml(layNoiDungWeb("https://www.accuweather.com/vi/browse-locations/asi/vn"))
ReDim arrGop(1 To 100 * UBound(arrTinh), 1 To 3)
For x = 1 To UBound(arrTinh) Step 1
    arrTram = dichNoiDungUlHtml(layNoiDungWeb(arrTinh(x, 1)))
    For y = 1 To UBound(arrTram) Step 1
        k = k + 1
        arrGop(k, 1) = arrTinh(x, 2)
        arrGop(k, 2) = arrTram(y, 2)
        arrGop(k, 3) = arrTram(y, 1)
        'Exit For
    Next
    'Exit For
Next
Sheet123456789.Range("A2").Resize(UBound(arrGop), UBound(arrGop, 2)).Value = arrGop
End Sub

Private Function layNoiDungWeb(ByVal duongdan As String) As String
Dim req As Object
Set req = CreateObject("msxml2.xmlhttp")
req.Open "GET", duongdan, False
req.send
layNoiDungWeb = req.responsetext
Set req = Nothing
End Function

Private Function dichNoiDungUlHtml(ByVal noidung As String)
Static reg As Object
Dim lPos As Long, lEnd As Long
Dim mats As Object, arr, r As Long
If reg Is Nothing Then
    Set reg = CreateObject("VBScript.RegExp")
    reg.IgnoreCase = True
    reg.Pattern = "a href=""([^""]+)""><em>([^<]+)"
    reg.Global = True
End If
lPos = InStr(1, noidung, "<ul class=""articles")
lEnd = InStr(lPos, noidung, "</ul>")
noidung = Mid(noidung, lPos, lEnd - lPos + 5)

Set mats = reg.Execute(noidung)
If mats.Count > 0 Then
    ReDim arr(1 To mats.Count, 1 To 2)
    For r = 1 To UBound(arr) Step 1
        arr(r, 1) = mats(r - 1).submatches(0)
        arr(r, 2) = dichHexHtml(mats(r - 1).submatches(1))
    Next
End If
dichNoiDungUlHtml = arr
End Function

Private Function dichHexHtml(ByVal content As String) As String
Static doc As Object
If doc Is Nothing Then Set doc = CreateObject("Msxml2.DOMDocument")
doc.LoadXML "<root>" & content & "</root>"
dichHexHtml = doc.Text
End Function
 
Upvote 0
Ủa chị này, anh kia là gì vậy bạn ? mình không hiểu bạn đang nói về điều gì ?
Nay mình được nghỉ nên vào nghịch chơi, lấy danh sách các trạm gì đó.
Lâu quá không viết mấy cái này, chắc lạc hậu với các bạn ở đây rồi.

Mã:
Public Sub hello()
Dim arrTinh, arrTram, arrGop, x As Long, y As Long, k As Long
arrTinh = dichNoiDungUlHtml(layNoiDungWeb("https://www.accuweather.com/vi/browse-locations/asi/vn"))
ReDim arrGop(1 To 100 * UBound(arrTinh), 1 To 3)
For x = 1 To UBound(arrTinh) Step 1
    arrTram = dichNoiDungUlHtml(layNoiDungWeb(arrTinh(x, 1)))
    For y = 1 To UBound(arrTram) Step 1
        k = k + 1
        arrGop(k, 1) = arrTinh(x, 2)
        arrGop(k, 2) = arrTram(y, 2)
        arrGop(k, 3) = arrTram(y, 1)
        'Exit For
    Next
    'Exit For
Next
Sheet123456789.Range("A2").Resize(UBound(arrGop), UBound(arrGop, 2)).Value = arrGop
End Sub

Private Function layNoiDungWeb(ByVal duongdan As String) As String
Dim req As Object
Set req = CreateObject("msxml2.xmlhttp")
req.Open "GET", duongdan, False
req.send
layNoiDungWeb = req.responsetext
Set req = Nothing
End Function

Private Function dichNoiDungUlHtml(ByVal noidung As String)
Static reg As Object
Dim lPos As Long, lEnd As Long
Dim mats As Object, arr, r As Long
If reg Is Nothing Then
    Set reg = CreateObject("VBScript.RegExp")
    reg.IgnoreCase = True
    reg.Pattern = "a href=""([^""]+)""><em>([^<]+)"
    reg.Global = True
End If
lPos = InStr(1, noidung, "<ul class=""articles")
lEnd = InStr(lPos, noidung, "</ul>")
noidung = Mid(noidung, lPos, lEnd - lPos + 5)

Set mats = reg.Execute(noidung)
If mats.Count > 0 Then
    ReDim arr(1 To mats.Count, 1 To 2)
    For r = 1 To UBound(arr) Step 1
        arr(r, 1) = mats(r - 1).submatches(0)
        arr(r, 2) = dichHexHtml(mats(r - 1).submatches(1))
    Next
End If
dichNoiDungUlHtml = arr
End Function

Private Function dichHexHtml(ByVal content As String) As String
Static doc As Object
If doc Is Nothing Then Set doc = CreateObject("Msxml2.DOMDocument")
doc.LoadXML "<root>" & content & "</root>"
dichHexHtml = doc.Text
End Function
Em cám ơn Chị rất nhiều. Chúc Chị và Gia đình có 1 kỳ lễ vui vẻ và Hạnh phúc
 
Upvote 0
Upvote 0
Hình như là chỉ lấy được được qua khứ 2 năm thôi và tương lai là 5 ngày thì phải. Mà chỉ được ó 63 tỉnh thôi. Mất mất 1 tỉnh rồi :p:p:p
 
Upvote 0
Upvote 0
Ủa chị này, anh kia là gì vậy bạn ? mình không hiểu bạn đang nói về điều gì ?
Nay mình được nghỉ nên vào nghịch chơi, lấy danh sách các trạm gì đó.
Lâu quá không viết mấy cái này, chắc lạc hậu với các bạn ở đây rồi.

Mã:
Public Sub hello()
Dim arrTinh, arrTram, arrGop, x As Long, y As Long, k As Long
arrTinh = dichNoiDungUlHtml(layNoiDungWeb("https://www.accuweather.com/vi/browse-locations/asi/vn"))
ReDim arrGop(1 To 100 * UBound(arrTinh), 1 To 3)
For x = 1 To UBound(arrTinh) Step 1
    arrTram = dichNoiDungUlHtml(layNoiDungWeb(arrTinh(x, 1)))
    For y = 1 To UBound(arrTram) Step 1
        k = k + 1
        arrGop(k, 1) = arrTinh(x, 2)
        arrGop(k, 2) = arrTram(y, 2)
        arrGop(k, 3) = arrTram(y, 1)
        'Exit For
    Next
    'Exit For
Next
Sheet123456789.Range("A2").Resize(UBound(arrGop), UBound(arrGop, 2)).Value = arrGop
End Sub

Private Function layNoiDungWeb(ByVal duongdan As String) As String
Dim req As Object
Set req = CreateObject("msxml2.xmlhttp")
req.Open "GET", duongdan, False
req.send
layNoiDungWeb = req.responsetext
Set req = Nothing
End Function

Private Function dichNoiDungUlHtml(ByVal noidung As String)
Static reg As Object
Dim lPos As Long, lEnd As Long
Dim mats As Object, arr, r As Long
If reg Is Nothing Then
    Set reg = CreateObject("VBScript.RegExp")
    reg.IgnoreCase = True
    reg.Pattern = "a href=""([^""]+)""><em>([^<]+)"
    reg.Global = True
End If
lPos = InStr(1, noidung, "<ul class=""articles")
lEnd = InStr(lPos, noidung, "</ul>")
noidung = Mid(noidung, lPos, lEnd - lPos + 5)

Set mats = reg.Execute(noidung)
If mats.Count > 0 Then
    ReDim arr(1 To mats.Count, 1 To 2)
    For r = 1 To UBound(arr) Step 1
        arr(r, 1) = mats(r - 1).submatches(0)
        arr(r, 2) = dichHexHtml(mats(r - 1).submatches(1))
    Next
End If
dichNoiDungUlHtml = arr
End Function

Private Function dichHexHtml(ByVal content As String) As String
Static doc As Object
If doc Is Nothing Then Set doc = CreateObject("Msxml2.DOMDocument")
doc.LoadXML "<root>" & content & "</root>"
dichHexHtml = doc.Text
End Function
Chị cho em hỏi code này có tâc dụng gi vậy ạ? em chạy thấy báo lỗi ạ?
loi.png
 
Lần chỉnh sửa cuối:
Upvote 0
Vâng ạ! ở dòng thứ 6 kết hợp ô A6 và G6 thì dữ liệu ô H6 sẽ là ngày sẽ là 10/10/2017 nhưng em thấy định dạng là 1/10/2017
Cảm ơn anh!

Xin chào chị E có tìm kiếm trên Web và thấy bài của chị không biết hiện tại chị đã có được file excel lấy được lịch sử thời tiết chưa? chị có thể gưi cho em xin được không? Email: theksgt@gmail.com e cảm ơn ạ
 
Upvote 0
Lỗi này là thế nào ạ. xin mọi người chỉ giúp
1587084463266.png
 
Upvote 0
Em không rõ về vba, cho em hỏi sửa đoạn mã bị lỗi như này như nào ạ. em cảm ơn các bác ạ


Sub Thoitiet()
UserForm_TT.Show
End Sub
Sub ShowURL()
Dim rng As Object, cel As Range
Set rng = Range("B2:B583")
If TypeOf rng Is Range Then
For Each cel In rng
If cel.Hyperlinks.Count Then cel.Offset(, 1).Value = cel.Hyperlinks(1).Address
Next
End If
End Sub
Sub GetdatawebAccuweather(ByVal Tram As String, fDate As Date, eDate As Date)
Application.ScreenUpdating = False
Dim hrq As Object, html As Object, url As String, dated As Date, row As Object, cell As Object, a As Object, reg As Object, Str As String, id As String
Dim I As Long, j As Long, k As Long, nmonth As Long, wf As WorksheetFunction, url2 As String, url3 As String, id2 As String, lcal As String
Dim dArr(), R As Long
Set wf = WorksheetFunction: Set hrq = CreateObject("msxml2.xmlhttp"): Set html = CreateObject("htmlfile")
url = "https://www.accuweather.com/vi/vn/thai-binh/356177/january-weather/356177?monyr="
R = Range("A" & Rows.Count).End(xlUp).row + 1
If R > 5 Then Range("A5:G" & R).Clear
R = eDate - fDate + 1: ReDim dArr(1 To R, 1 To 8)
With hrq
.Open "POST", "https://www.accuweather.com/vi/search-locations", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "s=" & Tram
Do While .readystate <> 4
DoEvents
Loop
html.body.innerhtml = .responsetext
'MsgBox InStr(1, .responsetext, Tram)
End With
Dim RX As Object
Set RX = CreateObject("vbscript.regexp")
RX.Pattern = "^(?:https://www.accuweather.com)/.+/(\w+)/[^\/]+/(\w+)$": RX.Global = True
For Each a In html.getelementsbytagname("a")
If RX.test(a.href) And (a.innertext Like "*" & Tram & "*" Or a.innertext Like "*" & Split(Tram, ",")(0) & "*") Then '
id = RX.Replace(a.href, "$1")
id2 = RX.Replace(a.href, "$2")
End If
Next
RX.Global = True
RX.Pattern = "\/\d+"
url2 = Replace(Replace(RX.Replace(url, "@@"), "@@", "/" & id, , 1), "@@", "/" & id2)
For nmonth = 0 To DateDiff("m", wf.EoMonth(fDate, -1) + 1, wf.EoMonth(eDate, 0) + 1)
url3 = url2 & Format(wf.eDate(fDate, nmonth), "m/d/yyyy") & "&view=table"
With hrq
.Open "GET", url3, False
.send
Do While .readystate <> 4
DoEvents
Loop
html.body.innerhtml = .responsetext
End With
For Each row In html.getelementsbytagname("tbody")(0).Rows
dated = DateValue(Split(Trim(row.Cells(0).innertext), " ")(1) & "/" & Year(wf.eDate(fDate, nmonth)))
If dated >= fDate And dated <= eDate Then
I = I + 1: j = 0: k = k + 1
For Each cell In row.Cells
j = j + 1
dArr(I, j) = cell.innertext:
Next
dArr(I, 7) = dated
dArr(I, 5) = Accuweather(dArr(I, 2), 1)
dArr(I, 8) = Accuweather(dArr(I, 3), 2)
End If
Next
Next nmonth
Range("A5").Resize(k, 8) = dArr
Range("A5").Resize(k, 8).Borders.LineStyle = 1
Set hrq = Nothing: Set html = Nothing
Application.ScreenUpdating = True
MsgBox "Done!"
Set RX = Nothing
End Sub
 

File đính kèm

  • Ma cod bao loi file lay thoi tiet tren web1.jpg
    Ma cod bao loi file lay thoi tiet tren web1.jpg
    87.2 KB · Đọc: 22
Upvote 0
Bạn xem thử cái này. Bao gồm 64 tỉnh thành :p:p:p
Chị ơi, em nhập mà cứ bị báo lỗi T_T có cách nào ko ạ
Em không rõ về vba, cho em hỏi sửa đoạn mã bị lỗi như này như nào ạ. em cảm ơn các bác ạ


Sub Thoitiet()
UserForm_TT.Show
End Sub
Sub ShowURL()
Dim rng As Object, cel As Range
Set rng = Range("B2:B583")
If TypeOf rng Is Range Then
For Each cel In rng
If cel.Hyperlinks.Count Then cel.Offset(, 1).Value = cel.Hyperlinks(1).Address
Next
End If
End Sub
Sub GetdatawebAccuweather(ByVal Tram As String, fDate As Date, eDate As Date)
Application.ScreenUpdating = False
Dim hrq As Object, html As Object, url As String, dated As Date, row As Object, cell As Object, a As Object, reg As Object, Str As String, id As String
Dim I As Long, j As Long, k As Long, nmonth As Long, wf As WorksheetFunction, url2 As String, url3 As String, id2 As String, lcal As String
Dim dArr(), R As Long
Set wf = WorksheetFunction: Set hrq = CreateObject("msxml2.xmlhttp"): Set html = CreateObject("htmlfile")
url = "https://www.accuweather.com/vi/vn/thai-binh/356177/january-weather/356177?monyr="
R = Range("A" & Rows.Count).End(xlUp).row + 1
If R > 5 Then Range("A5:G" & R).Clear
R = eDate - fDate + 1: ReDim dArr(1 To R, 1 To 8)
With hrq
.Open "POST", "https://www.accuweather.com/vi/search-locations", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "s=" & Tram
Do While .readystate <> 4
DoEvents
Loop
html.body.innerhtml = .responsetext
'MsgBox InStr(1, .responsetext, Tram)
End With
Dim RX As Object
Set RX = CreateObject("vbscript.regexp")
RX.Pattern = "^(?:https://www.accuweather.com)/.+/(\w+)/[^\/]+/(\w+)$": RX.Global = True
For Each a In html.getelementsbytagname("a")
If RX.test(a.href) And (a.innertext Like "*" & Tram & "*" Or a.innertext Like "*" & Split(Tram, ",")(0) & "*") Then '
id = RX.Replace(a.href, "$1")
id2 = RX.Replace(a.href, "$2")
End If
Next
RX.Global = True
RX.Pattern = "\/\d+"
url2 = Replace(Replace(RX.Replace(url, "@@"), "@@", "/" & id, , 1), "@@", "/" & id2)
For nmonth = 0 To DateDiff("m", wf.EoMonth(fDate, -1) + 1, wf.EoMonth(eDate, 0) + 1)
url3 = url2 & Format(wf.eDate(fDate, nmonth), "m/d/yyyy") & "&view=table"
With hrq
.Open "GET", url3, False
.send
Do While .readystate <> 4
DoEvents
Loop
html.body.innerhtml = .responsetext
End With
For Each row In html.getelementsbytagname("tbody")(0).Rows
dated = DateValue(Split(Trim(row.Cells(0).innertext), " ")(1) & "/" & Year(wf.eDate(fDate, nmonth)))
If dated >= fDate And dated <= eDate Then
I = I + 1: j = 0: k = k + 1
For Each cell In row.Cells
j = j + 1
dArr(I, j) = cell.innertext:
Next
dArr(I, 7) = dated
dArr(I, 5) = Accuweather(dArr(I, 2), 1)
dArr(I, 8) = Accuweather(dArr(I, 3), 2)
End If
Next
Next nmonth
Range("A5").Resize(k, 8) = dArr
Range("A5").Resize(k, 8).Borders.LineStyle = 1
Set hrq = Nothing: Set html = Nothing
Application.ScreenUpdating = True
MsgBox "Done!"
Set RX = Nothing
End Sub
em cũng bị tương tự. có ai giúp bọn em với ạ
 
Upvote 0
Upvote 0
Các bạn có thể tham khảo thêm ứng dụng lấy dữ liệu thời tiết với việc tải dữ liệu bất đồng bộ nhanh chóng tại bài viết

 
Upvote 0

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

Back
Top Bottom