Sửa công thức Excel từ clipboard với máy tính thay đổi định dạng thập phân
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ó "{":=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)={"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"}=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 ạ!!!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
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.
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.
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à.
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 ý.
1652
www.giaiphapexcel.com/diendan/threads/s%E1%BB%ADa-c%C3%B4ng-th%E1%BB%A9c-excel-t%E1%BB%AB-clipboard-v%E1%BB%9Bi-m%C3%A1y-t%C3%ADnh-thay-%C4%91%E1%BB%95i-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-th%E1%BA%ADp-ph%C3%A2n.163714/
Ý 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
www.giaiphapexcel.com/diendan/resources/17/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học