মাপদণ্ডের উপর ভিত্তি করে এক্সেল সারিগুলিকে কিভাবে একাধিক কক্ষের উপর ভিত্তি করে লুকানো যায়, সেই সারিতে অ-ক্রমাগত কলামগুলি খালি


2

এক্সেল ইন, আমি কীভাবে সারিগুলি লুকিয়ে রাখতে পারি যদি কেবল এবং একাধিক ক্ষেত্রে সমস্ত ঘর, সারিতে অ-ক্রমাগত কলাম খালি থাকে? আমার ওয়ার্কশীটে প্রায় 300 টি কলাম রয়েছে, তাই আমি প্রত্যেকটিতে প্রত্যেকটিতে একত্রে ক্লিক করতে পারছি না।

আমি ইতোমধ্যে নীচের VBA কোড চেষ্টা করেছি, তবে এটি দুইটি শ্রেণির বেশি অনুমতি দেবে না। ধন্যবাদ.

Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice 20160913
Dim xRg As Range
Application.ScreenUpdating = False
    For Each xRg In Range("B1:B825","D1:D825","F1:F825")
        If xRg.Value = "" Then
            xRg.EntireRow.Hidden = True

        Else
            xRg.EntireRow.Hidden = False
        End If
    Next xRg
Application.ScreenUpdating = True
End Sub

উত্তর:


0

এটা চেষ্টা কর


Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Long

    Application.ScreenUpdating = False
    With UsedRange
        For c = 2 To .Columns.Count Step 2
            .AutoFilter Field:=c, Criteria1:="<>"
        Next
    End With
    Application.ScreenUpdating = True
End Sub


0

চেক করার জন্য অনেকগুলি কলাম রয়েছে, নিম্নলিখিত সাধারণ সমাধান কোড এন্ট্রি সরল করবে:

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

* শিট সম্পাদনা করা হয় হিসাবে স্বতঃ লুকানো সারি পূর্বাবস্থায় ফিরিয়ে আনতে ক্ষমতা হারানোর খরচ। প্রয়োজন হলে এই প্রতিকার করা যেতে পারে।


এটি চমৎকার. ধন্যবাদ! আরও একটি যোগসূত্র সহায়ক হবে: আমি কি স্প্লিট ("বি, ডি, এফ", ",") কোনও কলামের প্রতিটি কলামে স্বয়ংক্রিয়ভাবে তালিকাবদ্ধ করতে পারি? আমার ক্ষেত্রে, এটি হবে ("বি, ডি, এফ।, বিডিবি"), তাই আপনি দেখতে পারেন কেন আমি আশা করি আমি তাদের সবাইকে পৃথকভাবে টাইপ না করার আশা করছি।
Claire

@ ক্লেয়ার সহজে একটি অনুমতি দেওয়া আপডেট অনেক বিকল্প কলামের। মূলত এই পোস্ট করা উচিত, কিন্তু আমি সাবধানে যথেষ্ট আপনার পোস্ট পড়া হয়নি।
robinCTS

এমনকি আরো চমত্কার। ধন্যবাদ! এখন, এই সমাধানটি প্রয়োগ করার পরে, আমি বুঝতে পারি যে আমি (একযোগে) পরিসীমাতে থাকা সমস্ত কলামগুলি লুকাতে হবে। অর্থাৎ, কলামগুলি যেখানে সারিগুলি 5২ সারি থেকে 5২5 পর্যন্ত ফাঁকা হয়। আপনার কি তাতে এটি যুক্ত করার উপায় আছে?
Claire

@ ক্লেয়ার আমি কোডটি v1.1 এর সাথে সংশোধন করেছি যা কলাম এবং সারিগুলিকে লুকিয়ে রাখে।
robinCTS
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.