Sửa công thức Excel từ clipboard với máy tính thay đổi định dạng thập phân

Liên hệ QC

cantl

!!! Giải thoát !!!
Tham gia
6/8/08
Bài viết
1,809
Được thích
1,156
Giới tính
Nam
Các bác ạ, tình hình là công trình đầu tay. :wallbash: :wallbash: :wallbash:
Mục đích là từ clipboard, chuyển dấu "," -> "\" (cho mảng) và "," -> ";" để test công thức trên những máy tính đã thay đổi định dạng thập phân.
Vì cũng tập tành, đi tắt sưu tầm nên code chạy được nhưng thừa tè le.
Tạm thời em đã test công thức có và không có "{":
Mã:
=COUNT(MMULT(--ISNUMBER(SEARCH("*"&{"Tổ chức Đảng","Công đoàn;","Hội Nông dân;","Hội Phụ nữ;","Đoàn thanh niên;","Hội Cựu chiến binh"}&"*",C2:C11)),ROW(1:6)^0)^0)
Mã:
={"Tổ chức Đảng","Công đoàn;","Hội Nông dân;","Hội Phụ nữ;","Đoàn thanh niên;","Hội Cựu chiến binh"}   &   {"Tổ chức Đảng","Công đoàn;","Hội Nông dân;","Hội Phụ nữ;","Đoàn thanh niên;","Hội Cựu chiến binh"}   &   {"Tổ chức Đảng","Công đoàn;","Hội Nông dân;","Hội Phụ nữ;","Đoàn thanh niên;","Hội Cựu chiến binh"}
Mã:
=IF(ISERROR(VLOOKUP($D2,sales_2021_W02!$D:$G,4,FALSE)),0,VLOOKUP($D2,sales_2021_W02!$D:$G,4,FALSE))
và nếu cố chấp thì dùng được (chuyển "\" trước rồi chuyển định dạng ";" sau)

Tuy nhiên có 2 vấn đề:
- nếu string trong mảng có dấu "," thì code sẽ chuyển luôn dẫn đến sai string của mảng.
- Em định tạo array xác định vị trí bắt đầu và kết thúc của từng cặp dấu "{}" (với công thức có nhiều mảng) rồi cho vòng lặp để replace từng mảng nhưng chưa viết được, đang bị thừa chỗ này (arrNgoac), mà thật ra là không biết sửa.
Vậy nên các bác bớt chút thời gian code giúp em kiểu array với ạ!!!
Mã:
Sub test()
    Dim DataObj As New MSForms.DataObject
    DataObj.GetFromClipboard
    Dim strcel, stri, strj, strNew, strcelNew As String, SoCapngoacnhon, i As Integer
    strcel = DataObj.GetText
    On Error GoTo Phay
    SoCapngoacnhon = Len(strcel) - Len(Replace(strcel, "{", ""))
    ReDim arrNgoac(1 To SoCapngoacnhon, 2)
    Dim arrStr() As String
    For i = 1 To Len(strcel)
        stri = Mid(strcel, i, 1)
        If stri = "{" Then
            x = x + 1
            arrNgoac(x, 1) = i
            For j = i To Len(strcel)
                strj = Mid(strcel, j, 1)
                If strj = "}" Then
                    arrNgoac(x, 2) = j
                    Exit For
                End If
            Next
            arrStr = Split(Mid(strcel, i + 1, j - i - 1), ",")
            strNew = Join(arrStr, "\")
            strcelNew = Replace(strcel, Mid(strcel, i + 1, j - i - 1), strNew)
        End If
    Next
    If InStr(strcelNew, ",") Then
        strcelNew = Replace(strcelNew, ",", ";")
    End If
    DataObj.SetText strcelNew
    DataObj.PutInClipboard
    Exit Sub
Phay:
    If InStr(strcel, ",") Then
        strcel = Replace(strcel, ",", ";")
    End If
    DataObj.SetText strcel
    DataObj.PutInClipboard
    Resume Next
End Sub
 

File đính kèm

  • viet code thay ngoac nhon.xlsm
    17.7 KB · Đọc: 3
Theo hàng: {"M1"\"M1"\"M1"}{"M1","M1","M1"}
Theo cột: {"M1";"N1";"M2";"N2";"M3"}{"M1";"N1";"M2";"N2";"M3"}
Hỗn hợp: {"M1"\"M1"\"M1";"N1"\"N1"\"N1"}{"M1","M1","M1";"N1","N1","N1"}

Nếu xài excel 365 thì có hàm arraytotext(A1:A3,1)
À, nếu không muốn bị chuyển luôn dấu , trong phần tử của mảng, vậy thì chuyển cả cụm "," thành "\". Dùng chức năng replace được mà.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo hàng: {"M1"\"M1"\"M1"}{"M1","M1","M1"}
Theo cột: {"M1";"N1";"M2";"N2";"M3"}{"M1";"N1";"M2";"N2";"M3"}
Hỗn hợp: {"M1"\"M1"\"M1";"N1"\"N1"\"N1"}{"M1","M1","M1";"N1","N1","N1"}

Nếu xài excel 365 thì có hàm arraytotext(A1:A3,1)
À, nếu không muốn bị chuyển luôn dấu , trong phần tử của mảng, vậy thì chuyển cả cụm "," thành "\". Dùng chức năng replace được mà.
Ý là mình sẽ copy công thức trên GPE rồi dán vào ô chứ không phải chỉ thay đơn giản thế này. Nhiều công thức dài mà định dạng dấu phẩy khác nhau ấy. Trên là 3 công thức đã test thử ấy, chôm chỉa của chủ đề khác ôm sang.
 
Upvote 0
Pha xử lý khá “cồng kềnh” hả?!
 
Upvote 0
Ý là mình sẽ copy công thức trên GPE rồi dán vào ô chứ không phải chỉ thay đơn giản thế này. Nhiều công thức dài mà định dạng dấu phẩy khác nhau ấy. Trên là 3 công thức đã test thử ấy, chôm chỉa của chủ đề khác ôm sang.
Bạn có biết chỗ đổi phân cách thập phân trong excel không? Nếu công thức ở dạng như ở #1 thì đổi thành kiểu "." ",". Xong dán công thức enter là nó chạy. Muốn đổi ngược lại dạng mà bạn đang muốn làm thì chỉnh lại thành "," ",". Công thức nó tự nhảy theo.
1672403649402.png
 
Upvote 0
Pha xử lý khá “cồng kềnh” hả?!
Nó cồng kềnh do bị thừa code thôi. Được các bác GPE tút lại thì gọn ngay ấy mà.
Bài đã được tự động gộp:

Bạn có biết chỗ đổi phân cách thập phân trong excel không? Nếu công thức ở dạng như ở #1 thì đổi thành kiểu "." ",". Xong dán công thức enter là nó chạy. Muốn đổi ngược lại dạng mà bạn đang muốn làm thì chỉnh lại thành "," ",". Công thức nó tự nhảy theo.
View attachment 285260
Cái này mình chưa thử. Vì một số file excel có đơn giá thành tiền nên phải luôn luôn để dấu "," là thập phân. Dấu "." là phần nghìn. Mình chỉ đổi trong win thôi chứ không có ý định đổi trong excel.
Mục đích là copy công thức vào clipboard, đổi dấu phẩy và dấu ngăn cách mảng, rồi đưa trở lại clipboard, ctrl+v vào excel. Hơi cồng kềnh nhưng 1 công đôi việc, tập code thử xem thế nào luôn.
Code chạy được nhưng thừa và chưa vừa ý.
 
Lần chỉnh sửa cuối:
Upvote 0
Ý tưởng của bạn là chuyển đổi cú pháp công thức sang cú pháp chuẩn cài đặt của Excel.

Bạn có thể tham khảo mã tại đây để thực hiện ý tưởng của bạn.

Ý tưởng của bạn trùng với bản cập nhật sắp tới của tôi và tôi đang viết để cập nhật vào phiên bản mới
 
Upvote 0
Web KT

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

Back
Top Bottom