- Bạn đưa dữ liệu thật nếu có thể !Có nghĩa là khi anh in ra từ STT 1 đến STT 45 nó nằm ở trang 1. Thì từ C3:C45 điền số 1. Stt 46 đến Stt 92 nằm ở trang 2 khi đó từ C46:C94 điền số 2.... Không biết yêu cầu của em có giải quyết được bằng EXCEL không. Em tính dủm nó trong file Nhật ký chung ấy mà. Cột Trang số.
Nhờ các anh chị giúp mình điền số trang vào cell, hay có link về nó chỉ mình ghen. Cám ơn nhiều (CÔNG THỨC HOẶC VBA)
Option Explicit
Public Sub pagenumbers()
Application.ScreenUpdating = False
Dim MyR As Range
Dim PageNumber As Long, eR As Long, i As Long
Dim Mysheet As Worksheet
eR = [A65536].End(xlUp)
Set Mysheet = ActiveSheet
PageNumber = 1
Set MyR = ActiveCell ' Range("E1") ' starting cell
For i = 1 To eR
If MyR.EntireRow.PageBreak = xlPageBreakAutomatic _
Or MyR.EntireRow.PageBreak = xlPageBreakManual Then PageNumber = PageNumber + 1
MyR.Value = PageNumber
Set MyR = MyR.Offset(1, 0) ' move down
Next i
End Sub
Code này gắn số trang vào cột D và dòng bắt đầu là 3, cái này có thể chỉnh lại.Sheet Nhat ky chung, nhờ bạn xem qua, dữ liệu mình đã bỏ bớt.
Sub GanSoTrang()
Application.ScreenUpdating = False
'Chi dung khi co 1 trang wide va n trang tall
Sheets("sheet1").Select
Range("F1:F100").ClearContents
Range("E3:E1000").ClearContents
ActiveWindow.View = xlPageBreakPreview
Dim nBreaks As Integer, i As Integer, j As Integer, SoDong As Integer, DongDau As Integer, endR As Integer
nBreaks = ActiveSheet.HPageBreaks.Count
DongDau = 1
endR = Range("A65000").End(xlUp).Row
Cells(1, 6) = 2 'Dong dau gan so trang
For i = 1 To nBreaks
Cells(i + 1, 6) = ActiveSheet.HPageBreaks(i).Location.Row - 1
SoDong = Cells(i + 1, 6)
DongDau = Cells(i, 6)
Range(Cells(DongDau + 1, 5), Cells(SoDong, 5)).Value = i
Next i
'Gan so trang cuoi
SoDong = endR
DongDau = Cells(i, 6)
Range(Cells(DongDau + 1, 5), Cells(SoDong, 5)).Value = i
Range("F1:F100").ClearContents
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub
Option Explicit
Sub GanSoTrang()
Application.ScreenUpdating = False
Dim nBreaks As Integer, i As Integer, SoDong As Integer, DongDau As Integer, endR As Integer, DongCuoi As Integer
'Chi dung khi co 1 trang wide va n trang tall
ActiveSheet.Select
Range("E1:E1000").ClearContents
ActiveWindow.View = xlPageBreakPreview
nBreaks = ActiveSheet.HPageBreaks.Count
DongDau = 2 'Bat dau la dong 3
endR = Range("A65000").End(xlUp).Row
For i = 1 To nBreaks - 1
DongCuoi = ActiveSheet.HPageBreaks(i).Location.Row - 1
Range(Cells(DongDau + 1, 5), Cells(DongCuoi, 5)).Value = i
SoDong = DongCuoi - DongDau
DongDau = DongCuoi
Next i
If SoDong * i = endR Then
Range(Cells(DongDau + 1, 5), Cells(endR, 5)).Value = i
Else
Range(Cells(DongDau + 1, 5), Cells(SoDong * i, 5)).Value = i
Range(Cells(SoDong * i + 1, 5), Cells(endR, 5)).Value = i + 1
End If
ActiveWindow.View = xlNormalView
Application.ScreenUpdating = True
End Sub
Em đọc hoài nhưng không hiểu. HícMyR.EntireRow.PageBreak = xlPageBreakAutomatic _
Or MyR.EntireRow.PageBreak
If MyR.EntireRow.PageBreak = xlPageBreakAutomatic _
Or MyR.EntireRow.PageBreak = xlPageBreakManual Then PageNumber = PageNumber + 1
Sub DienSotrang()
Dim lRow As Long, lStart As Long
Dim i As Integer, nPage As Integer
Dim varPB As Variant
i = 1: lStart = 3: nPage = 1
lRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Do While IsError(varPB) = False
varPB = ExecuteExcel4Macro("INDEX(GET.DOCUMENT(64)," & nPage & ")")
If IsError(varPB) Then
Range(Cells(lStart, 3), Cells(lRow, 3)) = i
Exit Do
Else
Range(Cells(lStart, 3), Cells(varPB - 1, 3)) = i
i = i + 1: lStart = varPB
End If
nPage = nPage + 1
Loop
End Sub
=GET.DOCUMENT(64)+NOW()*0
=IF(ISNA(MATCH(ROW(),Hbrk,1)),1,MATCH(ROW(),Hbrk,1)+1)
ĐÚng như tigertiger đã viết trên ta có thể sd công thức - cám ơn bác voda vể GET.DOCUMENT(64) - bài viết trên đã gợi nhớ cho tigertiger tìm kiếm thông tin và có công thức này
Để sd công thức chúng ta làm 2 bước sau
+ Đặt 1 name có (Insert\ name \define: ) là Hbrk có Reffer to là
PHP:=GET.DOCUMENT(64)+NOW()*0
+ Khi đó tại ô (cell) muốn thấy thứ tự trang ta gõ công thức sau:
(Copy công thức cho các ô khác)PHP:=IF(ISNA(MATCH(ROW(),Hbrk,1)),1,MATCH(ROW(),Hbrk,1)+1)
.
mình thấy có name động là lấy số trang lấy tên sheet nhưng chưa thấy lấy một vùng dữ liệu khi có một sheet được tạo ra, sao nhỉ!...............khi đó viết công thức cập nhật như thế nào cơ.
............
'CODE thêm sheet mới
.............
'CODE xử lý liên kết với sheet vừa tạo thêm
...........
Qua test thử, thấy Code của Thầy Voda là OK nhất.
MyCode và TiGerTiGer cũng sai khi có dòng tiêu đề. Để ý khi dòng cuối trùng với ngắt trang.
Cái này chắc phải nhờ thêm Bác Phạm Duy Long tham gia.
cứ preview chúng ta sẽ thấy ngay đúng saiĐể ý khi dòng cuối trùng với ngắt trang hay là dòng cuối <> ngắt trang và dòng tiêu đề trang thay đổi. Kiểm tra với các điều chỉnh Margins.
Chậm nhưng chấp nhận được,Còn công thức thì thua, chậm lắm.