標題:
[發問]
表單列印超過一頁範圍,可否在列印時單頁加總數值?
[打印本頁]
作者:
zhiling
時間:
2012-6-2 16:00
標題:
表單列印超過一頁範圍,可否在列印時單頁加總數值?
請問大大,
excel資料在預覽列印時超過一頁的範圍,可以在印出的每頁頁尾做數值的加總嗎?
例如:
A欄 B欄
大明 123
.......
老陳 325
小花 521
小王 456
資料預覽列印時,第一頁的最後一筆資料只能列印到老陳,想要加總B欄數值,並在第一頁頁尾秀出,
第二頁也是加總B欄,並在下方再加總第一頁與第二頁的B欄,請問excel可以這樣設定嗎?
作者:
Hsieh
時間:
2012-6-2 17:52
回復
1#
zhiling
[attach]11230[/attach]
作者:
register313
時間:
2012-6-3 15:53
本帖最後由 register313 於 2012-6-3 23:17 編輯
回復
1#
zhiling
[attach]11242[/attach]
Private Sub CommandButton1_Click()
N = 10
CommandButton2_Click
ResetAllPageBreaks
r = [A65536].End(xlUp).Row
If r Mod N <> 0 Then m = r \ N + 1
For i = m To 1 Step -1
k = i * N + 2
Rows(k & ":" & k + 1).Insert Shift:=xlDown
Cells(k, 1) = "小計"
Cells(k + 1, 1) = "累計"
Cells(k, 2) = Application.Sum(Range(Cells(k - N, 2), Cells(k - 1, 2)))
Cells(k + 1, 2) = Application.Sum(Range(Cells(3, 2), Cells(k - 1, 2)))
HPageBreaks.Add Before:=Range("A" & k + 2)
Next i
r = [A65536].End(xlUp).Row
PageSetup.PrintTitleRows = Rows("1:2").Address
PageSetup.PrintArea = "$A$2:$B$" & r
End Sub
Private Sub CommandButton2_Click()
Dim Rng As Range
r = [A65536].End(xlUp).Row
For i = r To 1 Step -1
If Cells(i, 1) = "小計" Or Cells(i, 1) = "累計" Then
If Rng Is Nothing Then
Set Rng = Rows(i)
Else
Set Rng = Union(Rng, Rows(i))
End If
End If
Next i
If Not Rng Is Nothing Then Rng.Delete
End Sub
複製代碼
Private Sub CommandButton1_Click() '加入分頁小計累計
N = 10 '設定10筆資料一頁
CommandButton2_Click
ResetAllPageBreaks '重設所有分頁線
r = [A65536].End(xlUp).Row
If r Mod N <> 0 Then m = r \ N + 1 '共有幾個20的倍數
For i = m To 1 Step -1
k = i * N + 2
Rows(k & ":" & k + 1).Insert Shift:=xlDown '加入2列空白列
Cells(k, 1) = "小計"
Cells(k + 1, 1) = "累計"
Cells(k, 2) = Application.Sum(Range(Cells(k - N, 2), Cells(k - 1, 2))) '小計
Cells(k + 1, 2) = Application.Sum(Range(Cells(3, 2), Cells(k - 1, 2))) '累計
HPageBreaks.Add Before:=Range("A" & k + 2) '水平分頁線
Next i
r = [A65536].End(xlUp).Row
PageSetup.PrintTitleRows = Rows("1:2").Address '設定標題列
PageSetup.PrintArea = "$A$2:$B$" & r '設定列印範圍
End Sub
Private Sub CommandButton2_Click() '移除分頁小計累計
Dim Rng As Range
r = [A65536].End(xlUp).Row
For i = r To 1 Step -1
If Cells(i, 1) = "小計" Or Cells(i, 1) = "累計" Then
If Rng Is Nothing Then
Set Rng = Rows(i)
Else
Set Rng = Union(Rng, Rows(i))
End If
End If
Next i
If Not Rng Is Nothing Then Rng.Delete
End Sub
複製代碼
作者:
zhiling
時間:
2012-6-3 16:13
感謝大大的回覆,又學了一招,
不好意思,應該是我表達的不夠清楚,
所以還是有問題要再請教,
1、我要加總小計的數值共有40筆,預覽列印一頁可以看到25筆,可以在這一頁(前25筆數值)下方小計,
在第二頁下方的小計另外後面15筆數值,並在第二頁小計下方再加總第一頁與第二頁的小計嗎?
2、我在一個excel檔案中用了好幾個vlookup(大約7.8個),結果存檔時,檔案要跑比較久,有辦法改善嗎?
(其中有5個vlookup只是為了把另一個sheet的數值整個搬到另一個sheet,但是要比對名稱,
因為不知道有沒有其他比較快的方式,目前只會使用vlookup一個一個比對)
[attach]11243[/attach]
不好意思,最近才開始試著把excel的函數應用在工作上,之前只會加總的函數而已,所以如果問題比較笨,
請各位大大多多包涵,謝謝!!
作者:
Baracuda
時間:
2012-6-4 18:17
因為每台印表機設定一頁有幾個 Rows 是不一定
所以就算先在現在做好了,下一台印表機的設定也不一定可用。
如果要跑的比較快
1.換電腦
2.公式化為值
作者:
zhiling
時間:
2012-6-5 07:06
感謝諸位大大的回覆與說明,我再試看看,
確實換一台電腦儲存速度就好多了,謝謝!!
作者:
GBKEE
時間:
2012-6-5 09:57
回復
6#
zhiling
因為每台印表機設定一頁有幾個 Rows 是不一定
這裡試試看
Option Explicit
Sub Ex()
Dim Msg As String, xi As Integer
With ActiveSheet
If Application.CountA(.Range("a1").CurrentRegion) = 0 Then
MsgBox "範圍內沒有資料可印列"
Exit Sub
End If
ActiveWindow.View = xlPageBreakPreview
.PageSetup.PrintArea = .Range("a1").CurrentRegion.Address
.PageSetup.PrintTitleRows = "$1:$1"
.PageSetup.LeftFooter = "&14&N 頁- &P"
'頁尾右邊: &14-> 字體Size =14, &N->總頁數, &P->第幾頁
For xi = 0 To .HPageBreaks.Count
Msg = "&14 小計: " '&14: 字體Size =14
If xi = 0 Then
Msg = Msg & Application.Sum(.Range([b2], .HPageBreaks(1).Location.Cells(0, 2)))
ElseIf xi > 0 And xi < .HPageBreaks.Count Then
Msg = Msg & Application.Sum(.Range(.HPageBreaks(xi).Location.Cells(1, 2), .HPageBreaks(xi + 1).Location.Cells(0, 2)))
Msg = Msg & Chr(10) & "累計: " & Application.Sum(.Range([b2], .HPageBreaks(xi + 1).Location.Cells(0, 2)))
Else
Msg = Msg & Application.Sum(.Range(.HPageBreaks(.HPageBreaks.Count).Location, .[b2].End(xlDown)))
Msg = Msg & Chr(10) & "累計: " & Application.Sum(.Range("B:B"))
End If
.PageSetup.RightFooter = Msg '頁尾左邊:
.PrintOut From:=xi + 1, To:=xi + 1, Copies:=1 '一頁一頁印列
Next
.DisplayPageBreaks = False '取消分頁線
End With
ActiveWindow.View = xlNormalView
MsgBox "印列 完成"
End Sub
複製代碼
應用在 3# 檔案 如圖的資料中
[attach]11257[/attach]
作者:
ccp
時間:
2012-6-8 16:50
如何能顯示出 千分位數值格式?
作者:
register313
時間:
2012-6-8 17:00
回復
8#
ccp
一般操作:
格式/儲存格 數值 勾選千分位
工作表函數:
=TEXT(數值,"0,000")
VBA:
Format(數值, "0,000")
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)