nhờ viết dùm code vòng lập lấy data từ ngày đến ngày

Liên hệ QC

ketoan113

Thành viên hoạt động
Tham gia
10/3/07
Bài viết
199
Được thích
30
kính gửi các anh chị
em có mày mò viết vba lấy data từ web cafef.vn về, file em nó như sau:

ô B3 = mã cp
ô F3 = ngày bắt đầu (trong code em ghi là ngaybd)
ô I3 = ngày kết thúc (trong code em nghi là ngaykt)

vd ngày hiện tại em gõ = 10/11/2022, code hiện tại của em sẽ lấy data là ngày bắt đầu (10/11/2022), sau đó copy data em cần sang paste vào sheet1

nhưng em cần lấy data từ ngày đến ngày ( từ ngày bắt đầu đến ngày kết thúc) em không viết viết code sao,

em nhờ anh chị giúp em xíu, viết dùm em code vòng lập với ạ

em cảm ơn các anh chị

p/s: anh anhtuan2939 có đọc được topic của em thì giúp em với nhé, tks a ạ
 

File đính kèm

  • Chi tiet giao dich CK - Copy.xlsm
    135.3 KB · Đọc: 37
Nếu dùng code lấy dữ liệu từ web, chi bằng lấy bằng M-code của Power query.

PHP:
let
    MaGD= Excel.CurrentWorkbook(){[Name = "MaGD"]}[Content][Column1]{0},
    DFrom = Excel.CurrentWorkbook(){[Name = "DFrom"]}[Content][Column1]{0},
    DTo = Excel.CurrentWorkbook(){[Name = "DTo"]}[Content][Column1]{0},
    Initialweb = "https://s.cafef.vn/Lich-su-giao-dich-",
    EndWeb ="-6.chn?date=",
    List0 = {0..Number.From(DTo) - Number.From(DFrom)},
    List1 = {Number.From(DFrom)..Number.From(DTo)},
   
    Source = List.Transform(List0, (d) =>
    let
        D1 = Date.ToText(Date.From(List1{d}),"dd/MM/yyyy"),
        WebAdd = Initialweb & MaGD & EndWeb & D1,
        Source0 = Web.Page(Web.Contents(WebAdd))[Data]{0},
        Source1 = Table.AddColumn(Source0, "Date", each Date.From(List1{d}))
    in Source1),
    ColumnList = Table.ColumnNames(Source{0}),
    SourceN= Table.FromList(Source,Splitter.SplitByNothing()),
    Result =Table.ExpandTableColumn(SourceN,"Column1",ColumnList),
    ReplaceP = Table.ReplaceValue(Result," (%)","",Replacer.ReplaceText,{"Tỷ trọng"}),
    DataType = Table.TransformColumnTypes(ReplaceP,{{"Giá", type number}, {"Khối lượng", type number}, {"Date", type date}, {"Tỷ trọng", type number}})

in
    DataType

Tôi cho rằng Power query lấy đủ dữ liệu hơn VBA code, lại còn có thể thêm cột ngày

1668502026135.png
 

File đính kèm

  • Stock-Transfer.xlsm
    161.7 KB · Đọc: 21
  • Stock-Transfer.xlsx
    152.3 KB · Đọc: 15
Lần chỉnh sửa cuối:
Upvote 0
Nếu dùng code lấy dữ liệu từ web, chi bằng lấy bằng M-code của Power query.

PHP:
let
    MaGD= Excel.CurrentWorkbook(){[Name = "MaGD"]}[Content][Column1]{0},
    DFrom = Excel.CurrentWorkbook(){[Name = "DFrom"]}[Content][Column1]{0},
    DTo = Excel.CurrentWorkbook(){[Name = "DTo"]}[Content][Column1]{0},
    Initialweb = "https://s.cafef.vn/Lich-su-giao-dich-",
    EndWeb ="-6.chn?date=",
    List0 = {0..Number.From(DTo) - Number.From(DFrom)},
    List1 = {Number.From(DFrom)..Number.From(DTo)},
  
    Source = List.Transform(List0, (d) =>
    let
        D1 = Date.ToText(Date.From(List1{d}),"dd/MM/yyyy"),
        WebAdd = Initialweb & MaGD & EndWeb & D1,
        Source0 = Web.Page(Web.Contents(WebAdd))[Data]{0},
        Source1 = Table.AddColumn(Source0, "Date", each Date.From(List1{d}))
    in Source1),
    ColumnList = Table.ColumnNames(Source{0}),
    SourceN= Table.FromList(Source,Splitter.SplitByNothing()),
    Result =Table.ExpandTableColumn(SourceN,"Column1",ColumnList),
    ReplaceP = Table.ReplaceValue(Result," (%)","",Replacer.ReplaceText,{"Tỷ trọng"}),
    DataType = Table.TransformColumnTypes(ReplaceP,{{"Giá", type number}, {"Khối lượng", type number}, {"Date", type date}, {"Tỷ trọng", type number}})

in
    DataType

Tôi cho rằng Power query lấy đủ dữ liệu hơn VBA code, lại còn có thể thêm cột ngày

View attachment 283367
1668502663406.png


file bác em tải về check thấy báo lỗi bác ơi
tks
 
Upvote 0
Anh gửi lại file giúp với. Em load file bị lỗi.
Cái M-code của Power query là em hoàn toàn không có biết gì.
 
Upvote 0
Bạn hiểu mấy từ ấy hả? Chúc mừng đã đạt cảnh giới. :p
Cảnh giới có sẵn :p :p, chỉ là có khó chịu hay không thôi.
em chạy nó cũng ra như vây
file này ko ổn bằng của bác huhumalu ạ
Bạn thử cả 2 file chưa? Lấy xlsx này, còn xlsm đã sửa lỗi ở trên. Lỗi xảy ra do dùng file của bạn ở bài 1 và viết power query, phải lưu mở lên lại 2, 3 lần để excel tự sửa lỗi
 

File đính kèm

  • Stock-Transfer.xlsx
    56.1 KB · Đọc: 20
Upvote 0
Cảnh giới có sẵn :p :p, chỉ là có khó chịu hay không thôi.

Bạn thử cả 2 file chưa? Lấy xlsx này, còn xlsm đã sửa lỗi ở trên. Lỗi xảy ra do dùng file của bạn ở bài 1 và viết power query, phải lưu mở lên l1668557379527.pngại 2, 3 lần để excel tự sửa lỗi
em chạy nó báo gì vậy bác ??
Bài đã được tự động gộp:

Cảnh giới có sẵn :p :p, chỉ là có khó chịu hay không thôi.

Bạn thử cả 2 file chưa? Lấy xlsx này, còn xlsm đã sửa lỗi ở trên. Lỗi xảy ra do dùng file của bạn ở bài 1 và viết power query, phải lưu mở lên lại 2, 3 lần để excel tự sửa lỗi
1668557650257.png
em gõ ngày không có giao dịch (vd ngày 12/11/2022 ko giao dịch) thì báo lỗi ko lấy dược ạ

nếu được chỉnh dùm em cột date để sang bên trái (cot A) được ko ạ? em cảm ơn bác
 
Lần chỉnh sửa cuối:
Upvote 0
Lấy lại file. Sửa được lỗi khi ngày bắt đầu là ngày không giao dịch, chưa sửa được trường hợp ngày cuối. Có gì nếu nó báo lỗi chọn dư vài ngày
Cứ thử với mã công ty khác
PHP:
let
    MaGD= Excel.CurrentWorkbook(){[Name = "MaGD"]}[Content][Column1]{0},
    DFrom = Excel.CurrentWorkbook(){[Name = "DFrom"]}[Content][Column1]{0},
    DTo = Excel.CurrentWorkbook(){[Name = "DTo"]}[Content][Column1]{0},
    Initialweb = "https://s.cafef.vn/Lich-su-giao-dich-",
    EndWeb ="-6.chn?date=",
    List0 = {0..Number.From(DTo) - Number.From(DFrom)},
    List1 = {Number.From(DFrom)..Number.From(DTo)},
   
    Source = List.Transform(List0, (d) =>
    let
        D1 = Date.ToText(Date.From(List1{d}),"dd/MM/yyyy"),
        WebAdd = Initialweb & MaGD & EndWeb & D1,
        Source0 = Web.Page(Web.Contents(WebAdd))[Data]{0},
        Source1 = Table.AddColumn(Source0, "Date", each Date.From(List1{d}))
    in Source1),
    ColumnList = Table.ColumnNames(Source{List.Count(Source)-1}),
    SourceN= Table.FromList(Source,Splitter.SplitByNothing()),
    Result =Table.ExpandTableColumn(SourceN,"Column1",ColumnList),
    ReplaceP = Table.ReplaceValue(Result," (%)","",Replacer.ReplaceText,{"Tỷ trọng"}),
    ReplacePr = Table.ReplaceValue(ReplaceP,"Giá",null,Replacer.ReplaceValue,{"Giá"}),
    ReplaceTT = Table.ReplaceValue(ReplacePr,"Tỷ trọng",null,Replacer.ReplaceValue,{"Tỷ trọng"}),
    DataType = Table.TransformColumnTypes(ReplaceTT,{{"Giá", type number}, {"Khối lượng", type number}, {"Date", type date}, {"Tỷ trọng", type number}}),
    Reorder = Table.ReorderColumns(DataType,{"Date", "Giá", "Khối lượng", "Tỷ trọng"})

in
    Reorder
 

File đính kèm

  • Stock-Transfer2.xlsx
    57.9 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Lấy lại file. Sửa được lỗi khi ngày bắt đầu là ngày không giao dịch, chưa sửa được trường hợp ngày cuối. Có gì nếu nó báo lỗi chọn dư vài ngày
Cứ thử với mã công ty khác
Do cái web này :
+ Ngày không giao dịch nó vẫn ra cái header chỉ không có dữ liệu.
+ Ngày hiện tại (hôm nay) trước 9h sáng (giờ mở phiên) thì vẫn lấy kết quả của ngày trước đó.
Em cũng phải sửa đi sửa lại mấy lần.
 
Upvote 0
tks = cám ơn bác

tôi báo cáo admin về comment của bác rồi nhá

bác rảnh quá
Tôi reject cái báo cáo của bạn. Trong bài #34 tôi có ghi là "có khó chịu hay không", nghĩa là nếu bình thường tôi sẽ khó chịu khi bài viết được viết tắt kiển chat chit như ko, dc, ntn, ... hoặc chêm từ tiếng Anh như tks, hi, thank, ...
Chêm tiếng Anh là không lịch sự đối với người Việt, và viết tắt không định nghĩa trước thì người ta có quyền đoán nghĩa. Khi đoán nghĩa sai thì người hỏi bị thiệt thòi. Huống hồ kiểu chat chit là vi phạm nội quy.
 
Upvote 0
Web KT

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

Back
Top Bottom