Đánh số thứ tự dòng trong 1 ô của excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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?
 
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 dữ liệu tại cột B của bạn đầy đủ (không có dòng trống nào) thì có thẻ dùng công thức này tại A8:
PHP:
=SUBTOTAL(103,$B$8:$B8)
 
Tại dòng 2 sửa lại thế này
Dim Arr(), dl, i, j
Em có sửa lại cho nó chạy ở dòng a8, nhưng chỉ chạy được 2 số. Anh ơi sau nó chạy ở 2 cột A và E.(ở cột e8 =1; e9=1) anh xem giúp em nhé, em mới làm quen và tìm hiểu code, nên chưa biết nhiều mong anh chỉ giáo. vừa hỏi trên diễn đàn vừa coi sách của Bác Phan Tự Hướng mong được học hỏi thêm.
View attachment vd.xls
 
Em có sửa lại cho nó chạy ở dòng a8, nhưng chỉ chạy được 2 số. Anh ơi sau nó chạy ở 2 cột A và E.(ở cột e8 =1; e9=1) anh xem giúp em nhé, em mới làm quen và tìm hiểu code, nên chưa biết nhiều mong anh chỉ giáo. vừa hỏi trên diễn đàn vừa coi sách của Bác Phan Tự Hướng mong được học hỏi thêm.
View attachment 86838
Bạn chạy ra STT rồi copy cột này dán về cột A. Vì dữ liệu của bạn không rõ ràng nên chỉ biết góp ý vậy thôi
 

File đính kèm

Em có sửa lại cho nó chạy ở dòng a8, nhưng chỉ chạy được 2 số. Anh ơi sau nó chạy ở 2 cột A và E.(ở cột e8 =1; e9=1) anh xem giúp em nhé, em mới làm quen và tìm hiểu code, nên chưa biết nhiều mong anh chỉ giáo. vừa hỏi trên diễn đàn vừa coi sách của Bác Phan Tự Hướng mong được học hỏi thêm.
View attachment 86838
Thêm một Code nữa cho vui.
PHP:
Sub GPE()
Application.ScreenUpdating = False
Dim j, Rng As Range, Cll As Range
Set Rng = Range([b8], [b65536].End(3))
Range("A8:A1000").ClearContents
For Each Cll In Rng
   If Cll.EntireRow.Hidden = False Then
        If Cll.Value <> "" Then
            If Not Cll.Value Like "Tieu de*" Then   ''"Thay doi dieu kien nay cho phu hop"
                j = j + 1
                Cll.Offset(, -1).Value = j
            End If
        End If
   End If
Next
Set Rng = Nothing
Application.ScreenUpdating = False
End Sub
 

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 -\\/.

À đối với bài toán ngược lại
nếu có 1 ô với những line thế náy

1. Line 1
2. Line 2

Làm thế nào để del được kí tự số và dấu "." nhỉ .

Hiện nay e đã làm macro del đc số trong số lượng selected cell rồi, e đang muốn cải tiến del dc số và dấu . luôn
 
Lần chỉnh sửa cuối:
À đối với bài toán ngược lại
nếu có 1 ô với những line thế náy

1. Line 1
2. Line 2

Làm thế nào để del được kí tự số và dấu "." nhỉ .

Hiện nay e đã làm macro del đc số trong số lượng selected cell rồi, e đang muốn cải tiến del dc số và dấu . luôn

Sao cứ lòng vòng hoài vậy ta? Thêm vào, xóa đi...

PHP:
Public Function xoadaudong(cell As Range) As String
Dim dl, kq, i
dl = Split(cell, ChrW(10))
For i = 0 To UBound(dl)
   kq = kq & Trim(Right(dl(i), Len(dl(i)) - 2)) & ChrW(10)
Next
xoadaudong = Left(kq, Len(kq) - 1)
End Function
 
Lần chỉnh sửa cuối:
Sao cứ lòng vòng hoài vậy ta? Thêm vào, xóa đi...

PHP:
Public Function xoadaudong(cell As Range) As String
Dim dl, kq, i
dl = Split(cell, ChrW(10))
For i = 0 To UBound(dl)
   kq = kq & Trim(Right(dl(i), Len(dl(i)) - 2)) & ChrW(10)
Next
xoadaudong = Left(kq, Len(kq) - 1)
End Function
Nếu số ở đầu dòng lên hàng chục hoặc hàng trăm thì sao hả ....Trời ????
Híc
 
Nếu số ở đầu dòng lên hàng chục hoặc hàng trăm thì sao hả ....Trời ????
Híc

Em cam đoan là không có thế đâu, nếu có thì em xin hứa sẽ .... viết lại code
Nếu cho thấy dữ liệu thật thì xài Instr(...) tìm khoảng trắng đầu tiên. Em đoán đại như thế
 

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

Back
Top Bottom