功能說明:
目前已設計可依勾選條件顯示對應欄位,如未勾選則隱藏該欄位,如取消全選則顯示所有欄位。
問題:
目前左方藍框選項,均可依條件顯示、隱藏,但欲加入左方紅框年份時,卻想不出該如何設計並互相影響。
例如:勾選「目標+達成率+2020年」時,B:SK欄僅顯示2021年(1-12月)+目標+達成率欄位,其餘隱藏。
勾選「實績+來客數+客單價+2020年+2021年」時,B:SK欄僅顯示2020年(1-12月)+2021年(1-12月)+實績+來客數+客單價欄位,其餘隱藏。
顯示、隱藏欄位功能需依勾選、取消勾選即時呈現。
以上請求大大解惑~~~~pls
測試檔https://drive.google.com/file/d/1pzCy7KmIpttYdWJhf61_EA7egCPP0rj1/view?usp=sharing
沒有實測過
看看合不合用
Sub ShowHide()
Dim arrCategory(), arrYear() As String
Dim nIdx As Integer
'1.收集有勾選的類別存成一個陣列
nIdx = 0
If checkbox1.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrCategory(nIdx)
arrCategory(nIdx) = "目標"
End If
If checkbox2.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrCategory(nIdx)
arrCategory(nIdx) = "實績"
End If
If checkbox13.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrCategory(nIdx)
arrCategory(nIdx) = "外送佔比"
End If
'2.收集有勾選的 年份 存成一個陣列
nIdx = 0
If checkbox14.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrYear(nIdx)
arrYear(nIdx) = "2019"
End If
If checkbox15.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrYear(nIdx)
arrYear(nIdx) = "2020"
End If
If checkbox16.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrYear(nIdx)
arrYear(nIdx) = "2021"
End If
If checkbox17.Value = True Then
nIdx = nIdx + 1
ReDim Preserve arrYear(nIdx)
arrYear(nIdx) = "2022"
End If
'3.比較 類別 與 年份,都有在陣列裡的就顯示,否則就隱藏
Set Rng = Range("B1", "SK1")
For Each x In Rng
If IsInArray(x.Offset(1, 0), arrCategory) And IsInArray(Left(x.Value, 4), arrYear) Then
Cells(x.Column, x.Column).EntireColumn.Hidden = False
Else
Cells(x.Column, x.Column).EntireColumn.Hidden = True
End If
Next
End Sub
Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
Dim i
For i = LBound(arr) To UBound(arr)
If arr(i) = stringToBeFound Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False
End Function
是不是應該每一個 CHECKBOX CLICK ACTION 也要把所有東西顯示回來先才再跟據所有 CHECKBOX 情況再做動作呢?
如果你不想 EXCEL 閃來閃去,便下個 SCREENUPDATE = FALSE 試試吧.