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

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,894
Được thích
1,213
Xin chào các bạn,
OT copy một vùng dữ liệu từ Website về để vào trong cột B từ cột B này OT muốn chuyển dữ liệu sang thành dòng (như hình ảnh đính kèm bên dưới:
1607568922961.png
Nhờ các bạn xem và giúp đỡ OT ạ.
 

File đính kèm

  • JP.xlsx
    16.3 KB · Đọc: 20
Sao mình không đưa link website ấy.

Xin chào , befaint cảm ơn Bạn đã quan tâm và giúp đỡ OT.
"mình" xin được gửi link ạ: :"'
 
Xin chào các bạn,
OT copy một vùng dữ liệu từ Website về để vào trong cột B từ cột B này OT muốn chuyển dữ liệu sang thành dòng (như hình ảnh đính kèm bên dưới:
Bạn thử code này, máy tôi không có phông chữ này nên kết quả ra toàn chữ gì gì
PHP:
Option Explicit

Public Sub Gpe()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 4)
    For I = 1 To R - 2
        K = K + 1
        dArr(K, 1) = sArr(I, 1)
        If sArr(I + 3, 1) = Empty Then
            dArr(K, 3) = sArr(I + 1, 1)
            dArr(K, 4) = sArr(I + 2, 1)
            I = I + 3
        Else
            dArr(K, 2) = sArr(I + 1, 1)
            dArr(K, 3) = sArr(I + 2, 1)
            dArr(K, 4) = sArr(I + 3, 1)
            I = I + 4
        End If
    Next I
    Range("D2").Resize(K, 4) = dArr
End Sub
 
Lần chỉnh sửa cuối:
Bạn thử code này, máy tôi không có phông chữ này nên kết quả ra toàn chữ gì gì
PHP:
Option Explicit

Public Sub Gpe()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
ReDim dArr(1 To R, 1 To 4)
    K = 1
    For I = 1 To R - 2
        dArr(K, 1) = sArr(I, 1)
        If sArr(I + 3, 1) = Empty Then
            dArr(K, 3) = sArr(I + 1, 1)
            dArr(K, 4) = sArr(I + 2, 1)
            I = I + 3
        Else
            dArr(K, 2) = sArr(I + 1, 1)
            dArr(K, 3) = sArr(I + 2, 1)
            dArr(K, 4) = sArr(I + 3, 1)
            I = I + 4
        End If
        K = K + 1
    Next I
    Range("D2").Resize(K, 4) = dArr
End Sub
Con chào Thầy ạ,
Cảm ơn Thầy đã luôn quan tâm và giúp đỡ con ạ.
Code đơn giản mà hiệu quả lắm Thầy ơi, con cảm ơn Thầy nhiều ạ.
------
À Thầy ơi, nếu mỗi từ ở các cột D,E,F,G con muốn x5 lần hoặc x10 lần (để chép đi chép lại cho thuộc từ) do vậy mà code của Thầy thêm thế nào cho hiệu quả ạ.
Còn để viết Sub riêng nữa con làm được Thầy ạ.
Con cảm ơn Thầy ạ, chúc Thầy nhiều sức khỏe ạ.
 

File đính kèm

  • JP.xlsm
    26.5 KB · Đọc: 10
Code hơi chuối cơ mà lỡ làm rồi cũng góp vui luôn :p
OT cảm ơn bạn nhiều ạ.
----
Code bằng Python, ôm cả giao diện nên hơi nặng. :)

Điền url rồi ấn Download, kết quả là file text mở ra, Ctrl A-C, Ctrl + V vào Excel là được.

Link download

View attachment 250953
Úi trời, nhìn hoành tráng quá à. Cảm ơn bạn nhiều befaint.
 
À Thầy ơi, nếu mỗi từ ở các cột D,E,F,G con muốn x5 lần hoặc x10 lần (để chép đi chép lại cho thuộc từ) do vậy mà code của Thầy thêm thế nào cho hiệu quả ạ
Hoặc mình sửa tạm code thầy Ba Tê
Mã:
Option Explicit
Public Sub Gpe()
Dim sArr(), dArr(), I As Long, K As Long, R As Long, J As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
    Const X As Long = 5
ReDim dArr(1 To Int(R * X / 4) + 1, 1 To 4)
    For I = 1 To R - 2
        If sArr(I + 3, 1) = Empty Then
            Do While J < X
                K = K + 1
                J = J + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 3) = sArr(I + 1, 1)
                dArr(K, 4) = sArr(I + 2, 1)
            Loop
            I = I + 3
        Else
            Do While J < X
                K = K + 1
                J = J + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 2) = sArr(I + 1, 1)
                dArr(K, 3) = sArr(I + 2, 1)
                dArr(K, 4) = sArr(I + 3, 1)
            Loop
            I = I + 4
        End If
        J = 0
    Next I
    Range("D2").Resize(Rows.Count - 1, 4).ClearContents
    Range("D2").Resize(K, 4) = dArr
End Sub
 
Nếu mỗi từ ở các cột D,E,F,G con muốn x5 lần hoặc x10 lần (để chép đi chép lại cho thuộc từ) do vậy mà code của Thầy thêm thế nào cho hiệu quả ạ.
Sửa code của @Ba Tê như sau, muốn lặp bao nhiêu lần thì sửa câu "s = 10"
PHP:
Sub GpeBate()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
Dim m As Long, n As Long, s As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
    s = 10
ReDim dArr(1 To R * s / 4, 1 To 5)
For m = 1 To s
    n = 0
    For I = 1 To R - 2
        K = K + 1
        n = n + 1
        dArr(K, 1) = sArr(I, 1)
        If sArr(I + 3, 1) = Empty Then
            dArr(K, 3) = sArr(I + 1, 1)
            dArr(K, 4) = sArr(I + 2, 1)
            dArr(K, 5) = n
            I = I + 3
        Else
            dArr(K, 2) = sArr(I + 1, 1)
            dArr(K, 3) = sArr(I + 2, 1)
            dArr(K, 4) = sArr(I + 3, 1)
            dArr(K, 5) = n
            I = I + 4
        End If
    Next I
Next m
    Range("D2").Resize(100000, 5).Clear
    Range("D2").Resize(K, 5) = dArr
    Range("D1").Resize(K, 5).Sort Key1:=[H1], Order1:=xlAscending, Header:=xlYes
    Range("H1").Resize(K, 1).Clear
End Sub
 
Hoặc mình sửa tạm code thầy Ba Tê
Mã:
Option Explicit
Public Sub Gpe()
Dim sArr(), dArr(), I As Long, K As Long, R As Long, J As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
    Const X As Long = 5
ReDim dArr(1 To Int(R * X / 4) + 1, 1 To 4)
    For I = 1 To R - 2
        If sArr(I + 3, 1) = Empty Then
            Do While J < X
                K = K + 1
                J = J + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 3) = sArr(I + 1, 1)
                dArr(K, 4) = sArr(I + 2, 1)
            Loop
            I = I + 3
        Else
            Do While J < X
                K = K + 1
                J = J + 1
                dArr(K, 1) = sArr(I, 1)
                dArr(K, 2) = sArr(I + 1, 1)
                dArr(K, 3) = sArr(I + 2, 1)
                dArr(K, 4) = sArr(I + 3, 1)
            Loop
            I = I + 4
        End If
        J = 0
    Next I
    Range("D2").Resize(Rows.Count - 1, 4).ClearContents
    Range("D2").Resize(K, 4) = dArr
End Sub
OT xin cảm ơn bạn nhiều ạ.
Sửa code của @Ba Tê như sau, muốn lặp bao nhiêu lần thì sửa câu "s = 10"
PHP:
Sub GpeBate()
Dim sArr(), dArr(), I As Long, K As Long, R As Long
Dim m As Long, n As Long, s As Long
    sArr = Range("B2", Range("B100000").End(xlUp).Offset(2)).Value
    R = UBound(sArr)
    s = 10
ReDim dArr(1 To R * s / 4, 1 To 5)
For m = 1 To s
    n = 0
    For I = 1 To R - 2
        K = K + 1
        n = n + 1
        dArr(K, 1) = sArr(I, 1)
        If sArr(I + 3, 1) = Empty Then
            dArr(K, 3) = sArr(I + 1, 1)
            dArr(K, 4) = sArr(I + 2, 1)
            dArr(K, 5) = n
            I = I + 3
        Else
            dArr(K, 2) = sArr(I + 1, 1)
            dArr(K, 3) = sArr(I + 2, 1)
            dArr(K, 4) = sArr(I + 3, 1)
            dArr(K, 5) = n
            I = I + 4
        End If
    Next I
Next m
    Range("D2").Resize(100000, 5).Clear
    Range("D2").Resize(K, 5) = dArr
    Range("D1").Resize(K, 5).Sort Key1:=[H1], Order1:=xlAscending, Header:=xlYes
    Range("H1").Resize(K, 1).Clear
End Sub
Con cảm ơn chú Mỹ nhiều ạ.
 
Con cảm ơn chú Mỹ nhiều ạ.
Bài này code không khó nhưng tôi thích code của anh @Ba Tê vì suy luận đơn giản ít nhức đầu. Do đó nếu sửa code đó tôi cũng muốn làm đơn giản và không nhức đầu giống vậy. Chứ bài 12 cũng sửa nhưng cứ như tôi thì suy luận quay cuồng cũng không hiểu tại sao dùng Do mà không dùng For next.
 
Web KT
Back
Top Bottom