Nút chuyển đổi qua lại dữ liệu nhập từ 02 cột data (1 người xem)

  • Thread starter Thread starter kloud7
  • Ngày gửi Ngày gửi
Liên hệ QC

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

kloud7

Thành viên mới
Tham gia
7/4/11
Bài viết
22
Được thích
1
Chào mọi người.

Mình có vấn đề này rất mong mọi người giúp đỡ nhé.

Mình muốn tạo ra 1 nút chuyển đổi ngôn ngữ theo 02 cột data từ sheet khác. Nếu là tiếng Anh thì sau khi click thì ô hiện hành sẽ chuyển sang tiếng Việt dựa vào việc tìm kiếm tương ứng trên 02 cột data có sắn. Nếu là tiếng Việt thì sẽ cho kết quả chuyển sang tiếng Anh. Việc này có thể thực hiện bằng 02 hoặc 01 button. Không biết việc này excel có làm được ko.

Mình gửi theo đính kèm, nhờ các bạn xem giúp mình nhé.

Cảm ơn tất cả mọi người.
 

File đính kèm

Bạn insert thêm dòng 1 ở sheet DATA, O1 nhập "Translate", P1 nhập "Dịch" (không có dấu"").
Nhập code này vào nút bấm:
Mã:
Sub Translate()
    Dim i&, j&, k&, n&, arr(), data()
    With Sheets("DATA")
        n = .Range("P" & .Columns(1).Rows.Count).End(xlUp).Row
        data = .Range("O1:P" & n).Value
    End With
    Sheets("Thuchanh").Activate
    i = IIf(ActiveSheet.Shapes(1).TextFrame.Characters.Caption = data(1, 1), 0, 1)
    ActiveSheet.Shapes(1).TextFrame.Characters.Caption = data(1, 2 - i)
    arr = Range("B4", Range("B65536").End(xlUp))
    For j = 1 To UBound(arr)
        For k = 2 To UBound(data)
            If arr(j, 1) = data(k, i + 1) Then
                arr(j, 1) = data(k, 2 - i)
                Exit For
            End If
        Next
    Next
    Range("B4:B" & (j + 2)) = arr
End Sub
 
Upvote 0
Chào mọi người.

Mình có vấn đề này rất mong mọi người giúp đỡ nhé.

Mình muốn tạo ra 1 nút chuyển đổi ngôn ngữ theo 02 cột data từ sheet khác. Nếu là tiếng Anh thì sau khi click thì ô hiện hành sẽ chuyển sang tiếng Việt dựa vào việc tìm kiếm tương ứng trên 02 cột data có sắn. Nếu là tiếng Việt thì sẽ cho kết quả chuyển sang tiếng Anh. Việc này có thể thực hiện bằng 02 hoặc 01 button. Không biết việc này excel có làm được ko.

Mình gửi theo đính kèm, nhờ các bạn xem giúp mình nhé.

Cảm ơn tất cả mọi người.

Bạn gán code này cho nút lệnh
PHP:
Sub Translate()
Dim iCll As Range, FCll As Range
On Error Resume Next
For Each iCll In Selection
    If iCll.Value <> "" Then
        Set FCll = Nothing
        Set FCll = Sheet2.Range("O:P").Find(What:=iCll.Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
        If Not FCll Is Nothing Then
            iCll.Value = FCll.Offset(, (15.5 - FCll.Column) * 2)
        Else
            MsgBox """" & iCll.Value & """ Khong co trong tu dien"
        End If
    End If
Next
End Sub
Sử dụng: Chọn vùng muốn chuyển ngôn ngữ rồi chạy code Translate hoặc bấm vào nút lệnh (nếu đã gán cho nút lệnh)
Lưu ý: Do sử dụng chung một code nên nếu vùng chuyển đổi vừa có tiếng Việt vừa có tiếng Anh thì tiếng Việt sẽ chuyển sang tiếng Anh và ngược lại.
 
Upvote 0
@Hau151978 :
Cảm ơn anh Hau151978. Cho em hỏi thêm chút nữa.
Trong code ko thấy đoạn nào viết có liên quan đến 02 ô O1 và P1, nếu em đổi O1 thành ENGLISH, còn P1 thành VIETNAMESE có được ko. Và nhờ anh chỉnh giúp em code có lựa chọn 1 hay nhiều ô rồi click button để thực thi macro. Nếu ko tìm thấy dữ liệu ở bên Sheet DATA thì vẫn giữ nguyên dữ liệu ở ô hiện hành trên sheet Thuchanh

Rất mong anh giúp đỡ. Cảm ơn anh Hau151978 nhiều!
 
Upvote 0
@ huuthang_bd :
Cảm ơn anh huuthang_bd đã giúp đỡ, macro anh viết chạy ầm ầm theo đúng ý em rồi. Em đã bỏ Msgbox đi để khỏi phải ok mỗi khi ko tìm được data rồi, nhưng nhờ anh thêm giúp em một dòng lệnh có ý nghĩa là: Sau khi thực hiện xong con trỏ chạy xuống dòng tiếp theo (ngay dưới ô vừa chạy macro) để em tiện sử dụng hơn ah.

Cảm ơn anh huuthang_bd!
 
Upvote 0
@Hau151978 :
Cảm ơn anh Hau151978. Cho em hỏi thêm chút nữa.
Trong code ko thấy đoạn nào viết có liên quan đến 02 ô O1 và P1, nếu em đổi O1 thành ENGLISH, còn P1 thành VIETNAMESE có được ko. Và nhờ anh chỉnh giúp em code có lựa chọn 1 hay nhiều ô rồi click button để thực thi macro. Nếu ko tìm thấy dữ liệu ở bên Sheet DATA thì vẫn giữ nguyên dữ liệu ở ô hiện hành trên sheet Thuchanh

Rất mong anh giúp đỡ. Cảm ơn anh Hau151978 nhiều!
Bạn chú ý code của mình khác với của bạn huuthang_bd. Của mình bấm 1 lần sẽ dịch E-V, bấm lần nữa V-E; còn của bạn huuthang_bd sẽ tìm nếu là E sẽ dịch thành V và ngược lại. Đối với code của mình có thể thay O1, P1 thành English, Vietnamese; mỗi lần bấm thì caption của nút sẽ thay đổi (các lệnh dòng 8, 9).
- Hiện tại code không tìm thấy dữ liệu thì vẫn để nguyên.
Mã:
Sub Translate1()
    Dim i&, k&, data(), cll As Range
    With Sheets("DATA")
        k = .Range("P" & .Columns(1).Rows.Count).End(xlUp).Row
        data = .Range("O1:P" & k).Value
    End With
    i = IIf(ActiveSheet.Shapes(1).TextFrame.Characters.Caption = data(1, 1), 0, 1)
    ActiveSheet.Shapes(1).TextFrame.Characters.Caption = data(1, 2 - i)
    For Each cll In Selection
        For k = 2 To UBound(data)
            If cll = data(k, i + 1) Then
                cll = data(k, 2 - i)
                Exit For
            End If
        Next
    Next
End Sub
Để tự động nhảy xuống dòng dưới thì bạn thêm lệnh sau vào cuối code
Selection.Offset(Selection.Rows.Count).Resize(1).Select
 
Lần chỉnh sửa cuối:
Upvote 0
@ huuthang_bd :
Cảm ơn anh huuthang_bd đã giúp đỡ, macro anh viết chạy ầm ầm theo đúng ý em rồi. Em đã bỏ Msgbox đi để khỏi phải ok mỗi khi ko tìm được data rồi, nhưng nhờ anh thêm giúp em một dòng lệnh có ý nghĩa là: Sau khi thực hiện xong con trỏ chạy xuống dòng tiếp theo (ngay dưới ô vừa chạy macro) để em tiện sử dụng hơn ah.

Cảm ơn anh huuthang_bd!
Bạn sửa lại như thế này
PHP:
Sub Translate()
Dim iCll As Range, FCll As Range
On Error Resume Next
For Each iCll In Selection
    If iCll.Value <> "" Then
        Set FCll = Nothing
        Set FCll = Sheet2.Range("O:P").Find(What:=iCll.Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
        If Not FCll Is Nothing Then iCll.Value = FCll.Offset(, (15.5 - FCll.Column) * 2)
    End If
Next
With Selection.Areas(1)
    Cells(.Row + .Rows.Count, .Column).Select
End With
End Sub
P/S: Tôi nghĩ nếu không thông báo thì cũng nên tô màu hoặc đánh dấu bằng cách nào đó để kiểm soát dữ liệu.
 
Lần chỉnh sửa cuối:
Upvote 0
@Hau151978 :

Cảm ơn anh Hau15978 , em xem lại thì hiểu 02 ô 01 và P1 để làm gì rồi, như vậy cũng rất tiện. Sau khi anh sửa thì Macro cũng chạy ok rồi, cũng rất đúng với mong muốn của em. Theo như anh giải thích thì cách của anh và anh Huuthang_bd là khác nhau, em cũng hiểu sơ sơ chứ còn về code thì em cũng ko biết được nhiều, nhưng về kết quả là em rất ưng ý
--=0--=0. Em sẽ dùng cả hai luôn.

Cảm ơn anh nhiều nhé, chúc anh sức khỏe ah!


 
Upvote 0
@ huuthang_bd :
Cảm ơn anh huuthang_bd đã giúp đỡ, thế này là em rất ưng rồi, ko có comment gì thêm, còn về Msgbox như anh góp ý thì tùy trường hợp em sẽ chèn thêm vào cũng được để tránh việc không kiểm soát được dữ liệu.

Cảm ơn anh rất nhiều ah!
/-*+//-*+//-*+/
 
Upvote 0
@ huuthang_bd: Em thử add macro của anh sang file làm việc của em, sheet data có tên là PRICE LIST và 02 cột tương ứng là X và Y, vậy em chỉnh sao cho để chạy được, có thể sửa macro để chỉ định vùng tìm kiếm là sheet PRICE LIST và cột X, Y được không anh?

Cảm ơn anh nhiều!
 
Upvote 0
@Hau151978 : Em nhờ anh chút nữa, trong macro của anh khi thực hiện thì như sau: Item (tiếng Việt) >> click button lúc này đang là VIE thì Item sẽ chuyển sang tiếng Anh (nếu button đang là ENG thì item sẽ ko chuyển). Vậy anh chuyển giúp em khi Item (tiếng Việt) >> click button (ENG) sẽ chạy macro (thay vì button VIE như lúc trước) và ngược lại được ko ah. Em không biết code nên mò mãi vẫn chưa làm được (nếu em đổi giá trị 02 ô O và P cho nhau là OK ngay nhưng hơi kỳ kỳ)

Em xin cảm ơn ah!
 
Upvote 0
@Hau151978 : Em nhờ anh chút nữa, trong macro của anh khi thực hiện thì như sau: Item (tiếng Việt) >> click button lúc này đang là VIE thì Item sẽ chuyển sang tiếng Anh (nếu button đang là ENG thì item sẽ ko chuyển). Vậy anh chuyển giúp em khi Item (tiếng Việt) >> click button (ENG) sẽ chạy macro (thay vì button VIE như lúc trước) và ngược lại được ko ah. Em không biết code nên mò mãi vẫn chưa làm được (nếu em đổi giá trị 02 ô O và P cho nhau là OK ngay nhưng hơi kỳ kỳ)

Em xin cảm ơn ah!
Bạn nên upload file mới và mô tả lại. Trong Selection có cả E và V không, nếu có thì dịch cả 2 (như cách của bạn huuthang_bd) hay chỉ dịch 1 trong 2 (như cách của mình)?
 
Upvote 0
Bạn nên upload file mới và mô tả lại. Trong Selection có cả E và V không, nếu có thì dịch cả 2 (như cách của bạn huuthang_bd) hay chỉ dịch 1 trong 2 (như cách của mình)?

Ok anh. Vậy em up file mới anh xem giúp em nhé. Cách của bác huuthang_bd em đã modify để dùng được rồi. Của anh thì em đang vướng chỗ sau:
- Mỗi khi Macro của anh chạy thì nó lại Đổi tên nút đã Assign macro của anh huuthang_bd, có cách nào để gán đc vào nút bất kỳ ko ah?
- Ngoài ra thì theo macro ở fie cũ thì như em viết ở câu hỏi trên, Item tiếng Việt khi button (có tên VIE) mới chuyển sang tiếng Anh, em muốn đổi lại Item tiếng Việt khi click button (có tên ENG) để chuyển, tức là chỉ thay đổi 02 cái tên của button cho nhau thôi ah, mọi thứ khác đều ko đổi vì cũng đã ok rồi.

Vậy anh bớt chút thời gian xem giúp em nhé!
 

File đính kèm

Upvote 0
Ok anh. Vậy em up file mới anh xem giúp em nhé. Cách của bác huuthang_bd em đã modify để dùng được rồi. Của anh thì em đang vướng chỗ sau:
- Mỗi khi Macro của anh chạy thì nó lại Đổi tên nút đã Assign macro của anh huuthang_bd, có cách nào để gán đc vào nút bất kỳ ko ah?
Đó là do các lệnh có chữ Shapes(1) (là nút bấm bên trái), bạn cần sửa thành Shapes(2) (nút bên phải). Các yêu cầu khác của bạn không rõ lắm, có gì hôm sau xem tiếp mà khó quá thì bỏ!
 
Upvote 0
Ok bác, dù sao cũng cảm ơn bác nhiều. Về phần còn lại thì chỉ đơn giản là đổi cách gán tên cho nút button VIE thành ENG và ngược lại thôi ah. Em chả biết j mò mẫm cả tối ko ăn thua, nếu ko sửa đc thì để em đổi ô O1 và P1 cho nhau :D

Chúc bác ngủ ngủ ah :D
 
Upvote 0
@ huuthang_bd: Em thử add macro của anh sang file làm việc của em, sheet data có tên là PRICE LIST và 02 cột tương ứng là X và Y, vậy em chỉnh sao cho để chạy được, có thể sửa macro để chỉ định vùng tìm kiếm là sheet PRICE LIST và cột X, Y được không anh?

Cảm ơn anh nhiều!
Nếu là chuyển toàn bộ sang tiếng Việt (dữ liệu đang là tiếng Việt thì không chuyển) hoặc ngược lại thì tôi đề xuất một cách khác để bạn tham khảo thêm: Dựa vào dữ liệu ô hiện hành, nếu là tiếng Việt thì chuyển toàn bộ vùng chọn sang tiếng Anh và ngược lại.
PHP:
Sub AutoTrans()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim iCll As Range, FCll As Range, Col As Long
On Error Resume Next
If ActiveCell.Value <> "" Then
    Set FCll = Sheets("PRICE LIST").Range("X:Y").Find(What:=ActiveCell.Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
End If
If Not FCll Is Nothing Then
    Col = FCll.Column
    For Each iCll In Selection
        If iCll.Value <> "" Then
            Set FCll = Nothing
            Set FCll = Sheets("PRICE LIST").Range("X:Y").Find(What:=iCll.Value, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
            If Not FCll Is Nothing Then
                If FCll.Column = Col Then iCll.Value = FCll.Offset(, (24.5 - Col) * 2)
'            Else
'               MsgBox """" & iCll.Value & """ Khong co trong tu dien"
            End If
        End If
    Next
Else
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Neu khong phan biet duoc o hien hanh la Viet hay Anh thì lam gi gi do ban them code vao day'
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
'With Selection.Areas(1)
'    Cells(.Row + .Rows.Count, .Column).Select
'End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Nếu là chuyển toàn bộ sang tiếng Việt (dữ liệu đang là tiếng Việt thì không chuyển) hoặc ngược lại thì tôi đề xuất một cách khác để bạn tham khảo thêm: Dựa vào dữ liệu ô hiện hành, nếu là tiếng Việt thì chuyển toàn bộ vùng chọn sang tiếng Anh và ngược lại.

Cảm ơn anh huuthang_bd, hôm qua hỏi xong em lần mò thì cũng áp dụng được rồi, code anh vừa gửi cũng ok rồi ah. Còn như anh viết ở trên chỉ chuyển tiếng Việt khi dữ liệu là tiếng Anh hoặc ngược lại thì anh hau151978 đã viết rồi anh ah.

Em xin trợ giúp mà 02 bác lại 02 cách làm khác nhau nhưng em thấy đều hay cả nên em dùng song song cả hai luôn --=0--=0--=0

Em rất cảm ơn anh ah.
 
Upvote 0
Cảm ơn anh huuthang_bd, hôm qua hỏi xong em lần mò thì cũng áp dụng được rồi, code anh vừa gửi cũng ok rồi ah. Còn như anh viết ở trên chỉ chuyển tiếng Việt khi dữ liệu là tiếng Anh hoặc ngược lại thì anh hau151978 đã viết rồi anh ah.

Em xin trợ giúp mà 02 bác lại 02 cách làm khác nhau nhưng em thấy đều hay cả nên em dùng song song cả hai luôn --=0--=0--=0

Em rất cảm ơn anh ah.
Bạn đọc kỹ lại những gì tôi viết nhé.
Dựa vào dữ liệu ô hiện hành, nếu là tiếng Việt thì chuyển toàn bộ vùng chọn sang tiếng Anh và ngược lại.
Có khác thì tôi mới đề xuất chứ nếu giống như cái đã có thì tôi đề xuất với bạn làm gì.
 
Upvote 0
Bạn đọc kỹ lại những gì tôi viết nhé.

Có khác thì tôi mới đề xuất chứ nếu giống như cái đã có thì tôi đề xuất với bạn làm gì.

Hì, em hiểu rồi, nếu vậy thì lại nhờ anh bớt chút tgian cho em rồi ah.

Bác nhiệt tình, em cũng ngại quá. Cảm ơn bác nhiều nhé.
 
Upvote 0

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

Back
Top Bottom