- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
9#
發表於 2023-10-11 11:57
| 只看該作者
回復 7# Andy2483
複習,修正與註解
Option Explicit
Sub 加入主表格()
Dim Crr(1 To 100, 1 To 6), Q, i&, j%, A, n&
'↑宣告Crr變數是二維陣列縱向範圍1到 100,橫向範圍從1到 6
'(Q,A)是通用型變數,(i,n)是長整數,j是短整數
Dim sh1 As Worksheet, sh2 As Worksheet, Frng As Range
'↑宣告(sh1,sh2)是工作表變數,Frng是儲存格變數
For Each Q In Worksheets
'↑設逐項迴圈!令Q是活頁簿中的工作表
If Q.[F1] = "建議廠牌" Then Set sh1 = Q
'↑如果工作表中的[F1]儲存格值是"建議廠牌"!就令sh1變數是工作表Q
If Q.[G3] = "建議廠牌" Then Set sh2 = Q
'↑如果工作表中的[G3]儲存格值是"建議廠牌"!就令sh2變數是工作表Q
Next
A = Array(1, 2, 4, 5, 6)
'↑令A變數是一維陣列,0~4索引號陣列值依序是(1, 2, 4, 5, 6)
With sh1: .Activate
'↑以下是關於工作表sh1的程序
'↑令激活該工作表
If .AutoFilter Is Nothing Then
'↑如果工作表沒有篩選的功能?
.[A2].AutoFilter
'↑令該表從該表[A2]儲存格建立篩選功能
With ActiveWindow
'↑以下是關於視窗的程序
.FreezePanes = False: .SplitRow = 1: .FreezePanes = True
'↑令凍結視窗解除,第1列分割視窗:令凍結視窗
End With
End If
If .[B65536].End(3).Row = 1 Then MsgBox "沒有資料": Exit Sub
'↑如果該表B欄最後有內容儲存格列號是1? True就跳出提視窗,結束程式執行
For i = 2 To .[B65536].End(3).Row
'↑設順迴圈!i從2到該表B欄最後有內容儲存格列號
If .Rows(i).EntireRow.Hidden = True Then GoTo i02
'↑如果該列是隱藏的!就跳到標示i02位置繼續執行
n = n + 1
'↑令n變數累加1
For j = 0 To 4
'↑設順迴圈!j從0到 4
Crr(n, A(j)) = Cells(i, j + 2)
'↑令n變數列(j變數A陣列值)欄的Crr陣列值是i變數列j變數+2欄儲存格值
Next
i02: Next
End With
With sh2.[B65536].End(3)(2).Resize(n, 6)
'↑以下是關於工作表sh2從下往上找到的B欄第1個空白格向下擴展n變數列,
'向右擴展6欄儲存格的程序
.Value = Crr
'↑令儲存格值以Crr陣列值帶入
sh2.Activate
'↑令激活工作表
.Select
'↑令選取該範圍儲存格
End With
Set sh1 = Nothing: Set sh2 = Nothing: Set Frng = Nothing: Erase Crr
'↑令釋放變數
End Sub
Sub 清除項目()
Dim Q
For Each Q In Worksheets
If Q.[G3] = "建議廠牌" Then Q.UsedRange.Offset(3, 0).EntireRow.Delete: Exit Sub
Next
'↑令結果表清除第3列以後的資料(含)
End Sub |
|