চেক করার জন্য অনেকগুলি কলাম রয়েছে, নিম্নলিখিত সাধারণ সমাধান কোড এন্ট্রি সরল করবে:
Private Sub Worksheet_Change(ByVal Target As Range)
Const strcRowExtent As String = "1:825"
Const strcColExtent As String = "B:BDB"
Dim boolHideRow As Boolean
Dim lngFirstColNumber As Long
Dim rngRow As Range
Dim rngVisibleRowExtent As Range
Dim rngColumn As Range
Dim rngColExtent As Range
Set rngVisibleRowExtent = Range(strcRowExtent).SpecialCells(xlCellTypeVisible)
Set rngColExtent = Range(strcColExtent)
lngFirstColNumber = rngColExtent.Column
Application.ScreenUpdating = False
For Each rngRow In rngVisibleRowExtent.Rows
boolHideRow = True
For Each rngColumn In rngColExtent.Columns
If (rngColumn.Column - lngFirstColNumber) Mod 2 = 1 Then
'Skip every second column
ElseIf rngColumn.Cells(rngRow.Row).Value2 <> "" Then
boolHideRow = False
Exit For
End If
Next rngColumn
If boolHideRow Then Rows(rngRow.Row).EntireRow.Hidden = boolHideRow
Next rngRow
Application.ScreenUpdating = True
End Sub
ব্যাখ্যা:
প্রাথমিকভাবে, দৃশ্যমান সারির সেট সারির সম্পূর্ণ সেট থেকে বের করা হয়। এটি একটি সুবিশাল গতি উন্নতির জন্য অনুমতি দেয়। *
তারপর কোড দৃশ্যমান সারির এই সেট মাধ্যমে loops। প্রতিটি সারির জন্য, এটি যথাযথ কলামগুলির মাধ্যমে অ-ফাঁকা মানের জন্য এবং চেক করে না যত তাড়াতাড়ি প্রথম এক পাওয়া যায় সারি গোপন। (একটি সারি লুকানো ডিফল্ট কর্ম শুধুমাত্র যদি সমস্ত উপযুক্ত কলাম খালি হয়।)
সম্পাদনা # 2:
দ্বিতীয় সংস্করণ (v2.1) যা কলামগুলিকে লুকিয়ে রাখে, সেটি নীচের OP মন্তব্য অনুসারে:
Private Sub Worksheet_Change(ByVal Target As Range)
' v2.1
Const lngcSkipRows As Long = 4
Const strcRowExtent As String = "1:825"
Const strcColExtent As String = "B:BDB"
Dim boolHideRow As Boolean
Dim lngFirstColNumber As Long
Dim rngRow As Range
Dim rngVisibleRowExtent As Range
Dim rngColumn As Range
Dim rngColExtent As Range
Dim rngCol As Range
Dim rngVisibleColExtent As Range
Dim rngCroppedCol As Range
Application.ScreenUpdating = False
' Hide rows
Set rngVisibleRowExtent _
= Range(strcRowExtent).Columns(1).SpecialCells(xlCellTypeVisible).EntireRow
Set rngColExtent = Range(strcColExtent)
lngFirstColNumber = rngColExtent.Column
For Each rngRow In rngVisibleRowExtent.Rows
boolHideRow = True
For Each rngColumn In rngColExtent.Columns
If (rngColumn.Column - lngFirstColNumber) Mod 2 = 1 Then
'Skip every second column
ElseIf rngColumn.Cells(rngRow.Row).Value2 <> "" Then
boolHideRow = False
Exit For
End If
Next rngColumn
If boolHideRow Then Rows(rngRow.Row).EntireRow.Hidden = boolHideRow
Next rngRow
'Hide Columns
Set rngVisibleColExtent _
= Range(strcColExtent).Rows(1).SpecialCells(xlCellTypeVisible).EntireColumn
For Each rngCol In rngVisibleColExtent.Columns
Set rngCroppedCol _
= rngCol _
.Resize(Range(strcRowExtent).Rows.Count - lngcSkipRows) _
.Offset(lngcSkipRows)
If WorksheetFunction.CountA(rngCroppedCol) = 0 Then rngCol.Hidden = True
Next rngCol
Application.ScreenUpdating = True
End Sub
ব্যাখ্যা:
যখন লুকানো সারি (এবং বিপরীতভাবে) এক্সটেনশন সূত্রের সামান্য পরিবর্তন প্রয়োজন হয় তখন দৃশ্যমান কলামগুলির সেটটি বের করে বের করে।
দৃশ্যমান কলামগুলির সেটের মাধ্যমে যে কোডটি লুপ করে তা সারির জন্য একের চেয়েও সরল, যেমন একটি অভ্যন্তরীণ লুপ প্রয়োজন হয় না। ওয়ার্কশীট ফাংশন CountA()
পরিবর্তে ব্যবহার করা হয়।
মনে রাখবেন যে এখনও খোলা কলাম হতে পারে যা সমস্ত ফাঁকা। এই লুকানো সারি মধ্যে মান আছে। এই কলাম গোপন হয় ইচ্ছাকৃতভাবে, আপনার মন্তব্য অনুযায়ী কঠোরভাবে।
দ্রষ্টব্য: আপনি আমার পরিবর্তনশীল নামকরণ কনভেনশন সম্পর্কে অদ্ভুত যদি, এটি উপর ভিত্তি করে RVBA ।
* শিট সম্পাদনা করা হয় হিসাবে স্বতঃ লুকানো সারি পূর্বাবস্থায় ফিরিয়ে আনতে ক্ষমতা হারানোর খরচ। প্রয়োজন হলে এই প্রতিকার করা যেতে পারে।