Gà excel muốn hỏi: nối chuỗi và format từng ký tự (ký số)

Liên hệ QC

bebo021999

Thành viên gạo cội
Tham gia
26/1/11
Bài viết
5,927
Được thích
8,707
Giới tính
Nam
Nghề nghiệp
GPE
Em gà lắm nhờ các bác giúp bằng VBA ạ,
Em có các ô :
A1, B1, C1 chứa ký tự là A,B,C format font từng màu khác nhau
A2, B2, C2 chứa ký số (VD: 1,2,3) format font từng màu khác nhau

Kết quả muốn có:
Ô D1 là chuỗi nối "ABC", và từng ký tự được format tương ứng
Ô D2 là chuỗi nối 123, và từng ký số được format tương ứng

Các cao thủ cho em xin 1 đoạn code để làm được việc đó ạ.
Ô D1 em có thể làm được, nhưng ô D2 thì đang vướng ạ.
Capture.JPG

Em xin cảm ơn và mong mỏi được chỉ giáo.
 

File đính kèm

  • Book2.xlsm
    8.4 KB · Đọc: 8
Em gà lắm nhờ các bác giúp bằng VBA ạ,
Em có các ô :
A1, B1, C1 chứa ký tự là A,B,C format font từng màu khác nhau
A2, B2, C2 chứa ký số (VD: 1,2,3) format font từng màu khác nhau

Kết quả muốn có:
Ô D1 là chuỗi nối "ABC", và từng ký tự được format tương ứng
Ô D2 là chuỗi nối 123, và từng ký số được format tương ứng

Các cao thủ cho em xin 1 đoạn code để làm được việc đó ạ.
Ô D1 em có thể làm được, nhưng ô D2 thì đang vướng ạ.
View attachment 285339

Em xin cảm ơn và mong mỏi được chỉ giáo.
Nếu có ai uy hiếp bác đăng bài thì hãy ra tín hiệu ét ô ét
 
Upvote 0
Mã:
Sub concatenate_cells_formats(cell As Range, source As Range)
'Anon

Dim c As Range
Dim i As Integer

i = 1

    With cell
    .Value = vbNullString
    .ClearFormats

        For Each c In source
        .Value = .Value & " " & Trim(c)
        Next c

    .Value = Trim(.Value)

        For Each c In source
            With .Characters(Start:=i, Length:=Len(Trim(c))).Font
            .Name = c.Font.Name
            .FontStyle = c.Font.FontStyle
            .Size = c.Font.Size
            .Strikethrough = c.Font.Strikethrough
            .Superscript = c.Font.Superscript
            .Subscript = c.Font.Subscript
            .OutlineFont = c.Font.OutlineFont
            .Shadow = c.Font.Shadow
            .Underline = c.Font.Underline
            .ColorIndex = c.Font.ColorIndex
            End With
            .Characters(Start:=i + Len(c), Length:=1).Font.Size = 1
        i = i + Len(Trim(c)) + 1
        Next c

    End With

End Sub
Sub test()
Dim rng As Range
Set rng = [A3:C3] 'Not yet looping
Dim row As Range
    For Each row In rng.Rows
    'Debug.Print col.Column
        Call concatenate_cells_formats([D3], rng) 'Not yet looping
    Next row
End Sub
Spam một đoạn code vậy
 
Upvote 0
Bác có thể tham khảo bài viết gộp ô giữ định dạng tại trang chủ diễn đàn
 
Lần chỉnh sửa cuối:
Upvote 0
Em gà lắm nhờ các bác giúp bằng VBA ạ,
Em có các ô :
A1, B1, C1 chứa ký tự là A,B,C format font từng màu khác nhau
A2, B2, C2 chứa ký số (VD: 1,2,3) format font từng màu khác nhau

Kết quả muốn có:
Ô D1 là chuỗi nối "ABC", và từng ký tự được format tương ứng
Ô D2 là chuỗi nối 123, và từng ký số được format tương ứng

Các cao thủ cho em xin 1 đoạn code để làm được việc đó ạ.
Ô D1 em có thể làm được, nhưng ô D2 thì đang vướng ạ.
View attachment 285339

Em xin cảm ơn và mong mỏi được chỉ giáo.
Code dưới của bạn @bebo021999 đã trả lời ở thớt khác
"Bạn" xem xài được không?!
PHP:
Sub LoaiBoSo()
Dim i&, j&, cell As Range, k As String, st As String, arr(1 To 10000, 1 To 3)
Application.ScreenUpdating = False
For Each cell In Selection
    st = "": j = 0
    For i = 1 To Len(cell)
        k = Mid(cell, i, 1)
        If Not IsNumeric(k) Then
            j = j + 1
            arr(j, 1) = k: arr(j, 2) = cell.Characters(i, 1).Font.Color
            arr(j, 3) = cell.Characters(i, 1).Font.Bold
        End If
    Next
    For i = 1 To j
        st = st & arr(i, 1)
    Next
    cell.Value = st
    For i = 1 To j
        With cell.Characters(i, 1).Font
            .Color = arr(i, 2)
            .Bold = arr(i, 3)
        End With
    Next
Next
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Code dưới của bạn @bebo021999 đã trả lời ở thớt khác
"Bạn" xem xài được không?!
Code này có liên quan đến ghép chuỗi đâu nhỉ?
Spam một đoạn code vậy
Hihi, kết quả ghép 1,2,3 là "1 2 3", với len = 5
Ý mình là khi ghép 1,2,3 ra con số 123 và format nó
Mình đã thử nhiều lần nhưng vẫn chưa ra kết quả.
Mình đoán lý do là:
1- Khi dùng cells. characters, nếu A,B,C thì sẽ ra đúng "ABC" và format đúng như vậy.
2- Khi dùng cells. characters, nếu 1,2,3 thì sẽ ra đúng "123" nhưng format lại là format của số đầu tiên là số 1
3- Khi dùng cells. characters thì nó làm việc hiệu quả với "real characters" không phải với number ???
4- Mình đã thử insert thêm ký tự để ra "123" với chuỗi rỗng (như kết quả của bạn) và replace, thì kết quả lại về như 2)

Capture.JPG
 
Upvote 0
Code này có liên quan đến ghép chuỗi đâu nhỉ?

Hihi, kết quả ghép 1,2,3 là "1 2 3", với len = 5
Ý mình là khi ghép 1,2,3 ra con số 123 và format nó
Mình đã thử nhiều lần nhưng vẫn chưa ra kết quả.
Mình đoán lý do là:
1- Khi dùng cells. characters, nếu A,B,C thì sẽ ra đúng "ABC" và format đúng như vậy.
2- Khi dùng cells. characters, nếu 1,2,3 thì sẽ ra đúng "123" nhưng format lại là format của số đầu tiên là số 1
3- Khi dùng cells. characters thì nó làm việc hiệu quả với "real characters" không phải với number ???
4- Mình đã thử insert thêm ký tự để ra "123" với chuỗi rỗng (như kết quả của bạn) và replace, thì kết quả lại về như 2)
Theo tôi thì hàm Characters() không dùng được cho dạng số nên nó không tách từng ký tự để định dạng. Bạn đổi 1 cột dạng String xem thử.
Tôi nghĩ nên đổi qua cách duyệt chuỗi thông thường là đếm từng ký tự chứ không dùng hàm Characters().
 
Upvote 0
Có thể số 123 được định dạng từng số thì không thể, khi nó là giá trị. Mình đã thử format bằng tay cũng không được
Nhưng nếu nhập dạng text:
'123
và format bằng tay thì được (như file đính kèm ở post 1)
Tuy nhiên, dùng code để format cái text này thì vẫn không được.
Mong các cao thủ ghé qua và chỉ giáo.
 
Upvote 0
Nhập bằng số - gán kết quả xuống Cell rồi đổi thành Text sẽ format được nhưng khi đổi lại thành Number là trở về 1 loại định dạng. :)
 
Upvote 0

@bebo021999


Bác thử thêm dấu cách không có chiều rộng mã ChrW(8203) vào trước số
 

File đính kèm

  • Book1.xlsx
    8.7 KB · Đọc: 5
Upvote 0
Mình đã thử 1 đoạn code đơn giản:
PHP:
Option Explicit
Sub test()
Dim i&, j&
For i = 1 To 2
    For j = 1 To 3
        Cells(i, "D").Value = Cells(i, "D").Value & Cells(i, j)
    Next
    For j = 1 To 3
        Cells(i, "D").Characters(j, 1).Font.Color = Cells(i, j).Font.Color
    Next
Next

'Neu thêm doan này vào thì "Puteo"
'Range("D1").Value = CLng(Range("D1").Value)

End Sub
Chạy ngon cho ABC nhưng 123 thì ra 123 dạng text. Nếu cố đổi ra số thì tèo.

Chốt lại (không biết có đúng không):
"Một con số dạng value thì không thể format từng phần bên trong."

Capture.JPG
 
Upvote 0
Cho biết Lý do tại sao số lại có chuyện chữ này khác chữ kia?
Có lý do chính đáng rồi mới tính đến chuyện giải quyết.
Rất có thể MS nghĩ rằng chuyện lắc léo vậy rất hiếm khi xảy ra cho nên họ giấu cách giải quyết ở đâu đó. Tránh rắc rối choi những người... không thích chuyện rắc rối.
Nếu biết nhu cầu thì có thể dùng cái nhu cầu ấy để hỏi mấy tay chuyên mò giải pháp.

Hỏi nhỏ: thành viên gạo cội mà cũng nói chuyên cao nhơn với chỉ giáo như con nít nhỉ? -.,\;
 
Upvote 0
Cho biết Lý do tại sao số lại có chuyện chữ này khác chữ kia?
Có lý do chính đáng rồi mới tính đến chuyện giải quyết.
Rất có thể MS nghĩ rằng chuyện lắc léo vậy rất hiếm khi xảy ra cho nên họ giấu cách giải quyết ở đâu đó. Tránh rắc rối choi những người... không thích chuyện rắc rối.
Nếu biết nhu cầu thì có thể dùng cái nhu cầu ấy để hỏi mấy tay chuyên mò giải pháp.
Hỏi nhỏ: thành viên gạo cội mà cũng nói chuyên cao nhơn với chỉ giáo như con nít nhỉ? -.,\;
Nhu cầu có chứ bác.
Cũng có lúc cần format con số hàng ngàn chẳng hạn
10000
Với con số 10 lớn hơn và bôi đỏ
Kiểu như VND mất giá, người ta không quan tâm số lẻ, chỉ muốn xem số hàng ngàn mà thôi

Vấn đề em quan tâm là: Có cách nào format từng con số bên trong mà thôi.
 
Upvote 0
Nhu cầu có chứ bác.
Cũng có lúc cần format con số hàng ngàn chẳng hạn
10000
Với con số 10 lớn hơn và bôi đỏ
Kiểu như VND mất giá, người ta không quan tâm số lẻ, chỉ muốn xem số hàng ngàn mà thôi

Vấn đề em quan tâm là: Có cách nào format từng con số bên trong mà thôi.
Tôi chỉ có thể dịch những nhu cầu theo cách làm của bọn tôi và hỏi những người quen (họ là người nước ngoài). Bọn tôi nhìn bàng giá theo con mắt tài chính, thiết kế khác những người ở đây.
Những nhu cầu lạ quá, sử dụng theo kiểu VN hóa thì tôi không thể "communicate" với họ. Chịu thua.
 
Upvote 0
Được bình thường mà.

Mình thấy trong chủ để này, câu hỏi ở bài #2 và #3 đáng quan tâm hơn cả.

1672732237696.png
 
Upvote 0
Web KT

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

Back
Top Bottom