Đánh số thứ tự dòng trong 1 ô của excel

Liên hệ QC

giaosucan

Thành viên hoạt động
Tham gia
6/7/12
Bài viết
117
Được thích
1
Chào các bác, em đang gặp 1 vấn đề nan giản
E có 1 ô của excel , trong ô có các dòng text (Dùng Alt+Enter để cách dòng)

Line 1
Line 2
Line 3

Em muốn đánh số thứ tự tự động cho các line này (trong 1 ô) kiểu như
1. Line 1
2. Line 2
3. Line 3

Nan giản ở chỗ là cần đánh số thứ tự dòng như trên trong cùng 1 ô.
Các bác có idea gì ko giúp em với
thank các bác nhiều -\\/.
 
Bạn Copy hàm này vào 1 module là xử lý được bài toán này
PHP:
Public Function SOTT(cell As Range) As String
Dim dl, kq
dl = Split(cell, ChrW(10))
kq = 1
For i = 0 To UBound(dl) - 1
   kq = kq & ChrW(10) & i + 2
Next
SOTT = kq
End Function
 

File đính kèm

Bạn Copy hàm này vào 1 module là xử lý được bài toán này
PHP:
Public Function SOTT(cell As Range) As String
Dim dl, kq
dl = Split(cell, ChrW(10))
kq = 1
For i = 0 To UBound(dl) - 1
   kq = kq & ChrW(10) & i + 2
Next
SOTT = kq
End Function
Hình như bạn ấy cần kiểu này
 

File đính kèm

Chào các bác, em đang gặp 1 vấn đề nan giản
E có 1 ô của excel , trong ô có các dòng text (Dùng Alt+Enter để cách dòng)

Line 1
Line 2
Line 3

Em muốn đánh số thứ tự tự động cho các line này (trong 1 ô) kiểu như
1. Line 1
2. Line 2
3. Line 3

Nan giản ở chỗ là cần đánh số thứ tự dòng như trên trong cùng 1 ô.
Các bác có idea gì ko giúp em với
thank các bác nhiều -\\/.
Nếu như không muốn xài hàm thì dùng thủ tục này. Giả định là dữ liệu của bạn đang ở cột B và bắt đầu tại B1
PHP:
Sub STT()
Dim arrkq()
sarr = Range([b1], [b65536].End(3)).Value
ReDim arrkq(1 To UBound(sarr), 1 To 1)
For i = 1 To UBound(sarr)
   dl = Split(sarr(i, 1), ChrW(10))
   kq = "1."
   For j = 0 To UBound(dl) - 1
      kq = kq & ChrW(10) & j + 2 & "."
   Next
   arrkq(i, 1) = kq
Next
[a1].Resize(i - 1, 1) = arrkq
End Sub
 
Nếu như không muốn xài hàm thì dùng thủ tục này. Giả định là dữ liệu của bạn đang ở cột B và bắt đầu tại B1
PHP:
   For j = 0 To UBound(dl) - 1
      kq = kq & ChrW(10) & j + 2 & "."
Hình như 2 dòng trên chạy kết quả cũng giống 2 dòng này, hổng biết phải hông?
PHP:
For j = 1 To UBound(dl)
      kq = kq & ChrW(10) & j + 1 & "."
Mắc chi chạy từ 0 rồi lại -1 "Chời".
"Thua me gở bài cào".
Ẹc...
 
Lần chỉnh sửa cuối:
Hình như 2 dòng trên chạy kết quả cũng giống 2 dòng này, hổng biết phải hông?
PHP:
For j = 1 To UBound(dl)
      kq = kq & ChrW(10) & j + 1 & "."
Mắc chi chạy từ 0 rồi lại -1 "Chời".
"Thua me gở bài cào".
Ẹc...

Hỏng hiểu sao lại bắt đầu bằng 0 rồi lại trừ 1 nữa, hic. Bởi vậy anh mới có cơ hội gỡ vốn chứ
 
Đúng rồi bác, bác làm như thế nào ạ
 
Sao bạn không dùng Replace cho khỏe? Replace Chr(10) thành STT!
Chứ nối chuổi từng khúc chi cho cực
Lúc đầu em suy nghĩ dùng Replace đấy, nhưng khi làm thấy vướng ở chỗ thay thế Chr(10) bằng các số thứ tự khác nhau, như vậy thay thế từng cái một, hóa ra nối từng khúc 1 cũng như nhau thôi. Hay Sư phụ có cách khác?
 
Lúc đầu em suy nghĩ dùng Replace đấy, nhưng khi làm thấy vướng ở chỗ thay thế Chr(10) bằng các số thứ tự khác nhau, như vậy thay thế từng cái một, hóa ra nối từng khúc 1 cũng như nhau thôi. Hay Sư phụ có cách khác?

Cú pháp hàm Replace là:
Mã:
Function Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [COLOR=#ff0000][B][Count As Long = -1][/B][/COLOR], [Compare As VbCompareMethod = vbBinaryCompare]) As String
Để ý chổ màu đỏ. Nếu cho đối số này = 1 thì nó chỉ thay có mỗi chuổi đầu tiên tìm thấy. Vậy cứ thế mà thay vào thôi (mỗi lần sẽ tăng n lên 1 đơn vị) đến khi nào hết thì ngưng
Ẹc... Ẹc... Nghiên cứu thử xem! Đằng nào thì giải thuật "cắt ra xong ráp vào" có thể sẽ chậm hơn so với Replace đấy
 
Cú pháp hàm Replace là:
Mã:
Function Replace(Expression As String, Find As String, Replace As String, [Start As Long = 1], [COLOR=#ff0000][B][Count As Long = -1][/B][/COLOR], [Compare As VbCompareMethod = vbBinaryCompare]) As String
Để ý chổ màu đỏ. Nếu cho đối số này = 1 thì nó chỉ thay có mỗi chuổi đầu tiên tìm thấy. Vậy cứ thế mà thay vào thôi (mỗi lần sẽ tăng n lên 1 đơn vị) đến khi nào hết thì ngưng
Ẹc... Ẹc... Nghiên cứu thử xem! Đằng nào thì giải thuật "cắt ra xong ráp vào" có thể sẽ chậm hơn so với Replace đấy
Em đã thử nhưng vẫn chưa cho kết quả, xin Sư phụ hướng dẫn rõ hơn
Em xin cảm ơn
 
Em đã thử nhưng vẫn chưa cho kết quả, xin Sư phụ hướng dẫn rõ hơn
Em xin cảm ơn
Thì đại khái vầy thôi:
Mã:
Function Ordinal(ByVal Text As String) As String
  Dim tmp As String, n As Long
  tmp = Trim(Text)
  If Len(tmp) Then
    n = 1
    tmp = "1. " & tmp
    Do While InStr(1, tmp, vbLf)
      n = n + 1
      tmp = Replace(tmp, vbLf, vbBack & n & ". ", , [B][COLOR=#ff0000]1[/COLOR][/B])
    Loop
    Ordinal = Replace(tmp, vbBack, vbLf)
  End If
End Function
 
Mượn hàm của ndu cải tiến 1 ít như sau:

PHP:
Function Ordinal(ByVal Text As String) As String
  Dim tmp As String, n As Long
  tmp = Trim(Text)
    For n = 1 To Len(tmp) - Len(Replace(tmp, vbLf, ""))
        tmp = Replace(tmp, vbLf, vbBack & n & ". ", , 1)
    Next
    Ordinal = Replace(tmp, vbBack, vbLf)
End Function

Hàm này yêu cầu phải có dấu xuống dòng ở ngay dòng đầu tiên và sẽ trả lại chuỗi rỗng nếu đối số là rỗng.
Nếu chuỗi vào không có dấu xuống dòng ở trước thi có thể thêm câu lệnh kiểm tra điều kiện:

If Len(tmp) And Left(tmp, 1) <> vbLf Then tmp = vbLf & tmp

trước vòng lặp For.
 
Lần chỉnh sửa cuối:
Nhận tiện đây xin các pro chỉ dùm hàm nào đánh số liên tiếp khi các dòng bị hide, nếu được các pro viết dùm đọan code để thực thực hiện. xin chân thành cảm ơn.
 

File đính kèm

Nhận tiện đây xin các pro chỉ dùm hàm nào đánh số liên tiếp khi các dòng bị hide, nếu được các pro viết dùm đọan code để thực thực hiện. xin chân thành cảm ơn.
Nếu muốn hỏi gì thì hoặc vào 1 topic dùng chung, hoặc tự mình mở 1 topic để hỏi - đừng chen ngang bài viết trong 1 topi riêng thế này nhé.
Trả lời câu hỏi của bạn: hãy tìm hiểu hàm SubTotal, nó sẽ giải quyết được vấn đề của bạn.
 
Nhận tiện đây xin các pro chỉ dùm hàm nào đánh số liên tiếp khi các dòng bị hide, nếu được các pro viết dùm đọan code để thực thực hiện. xin chân thành cảm ơn.
Muốn code thì có code đây. Nhớ xoá cột E trước khi chạy code
PHP:
Sub STT_khong_tinh_dong_bi_an()
Dim arr()
Range([a8], [a65536].End(3)).SpecialCells(12).Offset(, 4) = 1
dl = Range([a8], [a65536].End(3)).Offset(, 4).Value
ReDim arr(1 To UBound(dl), 1 To 1)
For i = 1 To UBound(dl)
   If dl(i, 1) <> "" Then
      j = j + 1
      arr(i, 1) = j
   End If
Next
[e8].Resize(i - 1, 1) = arr
End Sub
 
nếu em muốn xem đoạn mã code của lệnh replace trong excel thì phải làm như thế nào? vào mục nào của máy tính mới xem đc?
 
Web KT

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

Back
Top Bottom