Thay thế hàng loạt mà không làm mất định dạng của kí tự trong ô.

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

a10

Thành viên mới
Tham gia
6/4/12
Bài viết
20
Được thích
1
Mình có 1 file gửi kèm. Mình muốn thay thế nhưng k biết diễn tả thế nào. Các bác vào xem file và giải quyết giúp cho e với. E có ghi miêu tả cụ thể trong file rồi
Cảm ơn anh em, cảm ơn diễn đàn
 

File đính kèm

Thay/Thêm sẽ mất 1 số định dạng cũ, nhưng macro sau sẽ tái lập lại cho bạn trên

PHP:
Option Explicit
Sub FormatFont()
 Dim J As Long, Rws As Long, VTr As Byte, Hgt As Double, W As Byte, DDai As Integer
 
 Rws = [i999].End(xlUp).Row
 For J = 1 To Rws
    With Cells(J, "I")
        VTr = 0
        For W = 1 To 2
            DDai = Len(.Value)
            VTr = InStr(VTr + W, .Value, "m2")
            .Value = Left(.Value, VTr - 1) & " " & Mid(.Value, VTr, 99)
            With .Characters(Start:=VTr + 2, Length:=1).Font
                .Size = .Size + 1
                .Superscript = True
            End With
            If VTr + 9 > DDai Then Exit For
        Next W
    End With
 Next J
End Sub
 
PHP:
Option Explicit
Sub FormatFont()
 Dim J As Long, Rws As Long, VTr As Byte, Hgt As Double, W As Byte, DDai As Integer
 
 Rws = [i999].End(xlUp).Row
 For J = 1 To Rws
    With Cells(J, "I")
        VTr = 0
        For W = 1 To 2
            DDai = Len(.Value)
            VTr = InStr(VTr + W, .Value, "m2")
            .Value = Left(.Value, VTr - 1) & " " & Mid(.Value, VTr, 99)
            With .Characters(Start:=VTr + 2, Length:=1).Font
                .Size = .Size + 1
                .Superscript = True
            End With
            If VTr + 9 > DDai Then Exit For
        Next W
    End With
 Next J
End Sub
Code này cho kết quả thì khỏi chê rồi, nhưng sao thầy không cho phép chọn vùng cần Fomat luôn cho nó tổng quát. Code này chỉ cho Fomat ở cột I thôi!
 
PHP:
Option Explicit
Sub FormatFont()
 Dim J As Long, Rws As Long, VTr As Byte, Hgt As Double, W As Byte, DDai As Integer
 
 Rws = [i999].End(xlUp).Row
 For J = 1 To Rws
    With Cells(J, "I")
        VTr = 0
        For W = 1 To 2
            DDai = Len(.Value)
            VTr = InStr(VTr + W, .Value, "m2")
            .Value = Left(.Value, VTr - 1) & " " & Mid(.Value, VTr, 99)
            With .Characters(Start:=VTr + 2, Length:=1).Font
                .Size = .Size + 1
                .Superscript = True
            End With
            If VTr + 9 > DDai Then Exit For
        Next W
    End With
 Next J
End Sub
Cảm ơn bác đã trả lời giúp tôi rất sớm. Xong có điều muốn hỏi rõ hơn chút vì mình k phải dân công nghệ mà
- Các chữ m2 ở dòng có chữ diện tích ==> Cái này OK rồi k phải sửa lại, nhưng hình như chạy xong code của bác nó lại cách ra thêm 1 kí tự trắng nữa thì phải - Nếu vậy thành ra nó bị cách ra 2 kí tự trắng mất r. Dòng này giữ nguyên?
- Mình muốn áp dụng đổi hàng loạt cho toàn bộ văn bản nhưng hình như bác mới viết code áp dụng cho cột I, và các kí tự m2 vẫn chưa đổi được hết thì phải
Rất mong hồi âm bác !
 
Cảm ơn bác; Song có điều muốn hỏi rõ hơn chút vì k phải dân công nghệ
(1) - Các chữ m2 ở dòng có chữ diện tích ==> Cái này OK rồi k phải sửa lại, nhưng hình như chạy xong code của bác nó lại cách ra thêm 1 kí tự trắng nữa thì phải - Nếu vậy thành ra nó bị cách ra 2 kí tự trắng mất r. Dòng này giữ nguyên?
(2) - Mình muốn áp dụng đổi hàng loạt cho toàn bộ văn bản nhưng hình như bác mới viết code áp dụng cho cột I, và (3) các kí tự m2 vẫn chưa đổi được hết thì phải
Rất mong hồi âm bác !

(1): Trong ví dụ ở cột của bạn chúng dính với kí tự trước nó mà!
Còn nếu không muốn thêm 1 khoảng trống thì sửa lại dòng lệnh 1 chút (Thực chất là bớt đi 1 động tác cho macro)

(2) Chuyện này không khó; Nhưng mà bạn chưa iêu cầu ngay từ đầu đó nghe!
Vật cần fạt tìm hiểu thêm cách thức mà ai đó trên cộng đồng ta hay làm đi (chắc chí ít cũng là 2!)

(3) Thì cũng trong ví dụ của bạn ở cột chỉ có 1 hay 2 chổ cần đổi thôi!
Lần sau viết thêm trong câu hỏi các trường hợp cho tổng quát lên nha!
 
Mình có 1 file gửi kèm. Mình muốn thay thế nhưng k biết diễn tả thế nào. Các bác vào xem file và giải quyết giúp cho e với. E có ghi miêu tả cụ thể trong file rồi
Cảm ơn anh em, cảm ơn diễn đàn

Viết code đơn giản thế này cho dễ xài:
Mã:
Sub Main()
  Dim Cel As Range
  For Each Cel In Selection
    Cel.Value = Replace(Cel.Value, "m2", " m²")
    Cel.Value = WorksheetFunction.Trim(Cel.Value)
  Next
End Sub
Cách dùng: Quét chọn vùng dữ liệu rồi chạy code
 
Viết code đơn giản thế này cho dễ xài:
Mã:
Sub Main()
  Dim Cel As Range
  For Each Cel In Selection
    Cel.Value = Replace(Cel.Value, "m2", " m²")
    Cel.Value = WorksheetFunction.Trim(Cel.Value)
  Next
End Sub
Cách dùng: Quét chọn vùng dữ liệu rồi chạy code
Code rất ngắn lại cho kết quả nhanh và chính xác, cảm ơn thầy nhiều. Đúng là học được từ thầy rất nhiều điều. Nhưng cho em hỏi là kí hiệu " m²" trong VBA viết như thế nào vậy thầy?
 
Nhưng cho em hỏi là kí hiệu " m²" trong VBA viết như thế nào vậy thầy?
Sau khi bạn nhập " m, bạn nhấn phím Alt rồi gõ tiếp 4 con số 0178 (bằng bàn phím số bên tay phải), rồi đóng dấu móc kép (") lại.

P/s: Post xong mới thấy bạn Hong.Van trả lời rồi.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom