Sembunyikan kolom di excel

Saya agak tidak yakin apa cara terbaik untuk menyembunyikan kolom di excel. Saya memiliki spreadsheet dengan kolom A hingga AL saat ini, tetapi orang-orang terus menambahkan kolom ke dalamnya secara teratur.

Kemudian kami memiliki beberapa kelompok pengguna, produksi, perancang, penjualan, revisi, dan sebagainya.

Bergantung pada grup pengguna mana pengguna tersebut berada, saya ingin menyembunyikan kolom yang tidak relevan bagi pengguna.

Jadi ide saya adalah menambahkan catatan ke setiap tajuk kolom dengan produksi teks, merancang apakah kolom itu relevan untuk kedua kelompok tersebut, dan seterusnya. Kemudian di vba ulangi semua kolom dan sembunyikan kolom yang tidak relevan.

Menyembunyikan kolom mudah dilakukan:

With Range("C:C,F:H,S:AC") .EntireColumn.Hidden = true End With

lalu di sheet tersembunyi atau file teks tentukan nama grup dan nama pengguna seperti:
design:kim,peter,kevin
production:arild,roar

Adakah ide tentang cara terbaik melakukan ini?


person skatun    schedule 19.03.2015    source sumber
comment
Salah satu pendekatan yang Anda sarankan baik-baik saja. Apa yang Anda harapkan dari kami?   -  person Jean-François Corbett    schedule 19.03.2015
comment
Jika ide dengan catatan adalah ide yang bagus, bagaimana saya bisa mengulang setiap catatan dan mendapatkan nilai catatan tersebut?   -  person skatun    schedule 19.03.2015
comment
Situs ini untuk penggemar pemrograman. Saya sarankan Anda mencoba sesuatu dan mengajukan pertanyaan baru tentang masalah spesifik apa pun yang Anda temui.   -  person Jean-François Corbett    schedule 19.03.2015


Jawaban (2)


Berikut ini contoh pendekatannya.

Misalnya kita menyimpan lembar kerja bernama Peran dengan nama individu, peran yang mereka mainkan, dan kolom yang disembunyikan untuk setiap peran:

masukkan deskripsi gambar di sini

Berikut ini adalah beberapa kode sederhana untuk:

  1. mendapatkan namanya
  2. menentukan perannya
  3. sembunyikan kolom di sheet Sheet1


Sub ColumnHider()
    Dim s1 As Worksheet, s2 As Worksheet
    Dim uName As String, r1 As Range, r2 As Range, HideC As String
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Roles")

    uName = Application.InputBox(Prompt:="Enter your name", Type:=2)
    Set r1 = s2.Range("A:A").Find(What:=uName, After:=s2.Range("A1"))
    role = r1.Offset(0, 1).Value
    Set r2 = s2.Range("D:D").Find(What:=role, After:=s2.Range("D1"))
    HideC = r2.Offset(0, 1).Value
    s1.Cells.EntireColumn.Hidden = False
    s1.Range(HideC).EntireColumn.Hidden = True
End Sub

Anda akan menambahkan beberapa penanganan kesalahan pada kode. Anda mungkin mempertimbangkan untuk mendapatkan nama menggunakan Environ("username") dll.

person Gary's Student    schedule 19.03.2015
comment
Terima kasih Gary dan @ jean-françois-corbett, Dalam kasus saya, saya memiliki sekitar 50 pengguna, dan karena spreadsheet excel masih berkembang dan semua pengguna tersebut masih menambahkan kolom ke spreadsheet saya tidak dapat menggunakan: Manajer:C:C sejak kemudian ketika kolom baru disisipkan di B:B akan banyak pekerjaan untuk memperbarui semua referensi kolom. Jadi saya bertanya-tanya apakah akan menambahkan catatan pada setiap kolom dengan grup pengguna atau lembar di mana semua header kolom terdaftar dengan grup pengguna masing-masing. Pendekatan mana yang terbaik? - person skatun; 20.03.2015

Saya kembali dari liburan Paskah dan terima kasih atas bantuan Anda, saya memecahkan masalah,

Ini memiliki lembar tempat filter ditentukan, berdasarkan kolom yang tersedia di lembar daftar. Ini menyimpan data dalam kamus sehingga tidak masalah jika pengguna menambahkan kolom ke lembar daftar. Di bawah ini adalah kode yang mungkin berguna bagi orang lain.

Sub filterCreation()

Dim lColumn As Long
rowHeader = 2 ' HEader row in list sheet
rowHeader2 = 1 'header row in filter sheet

Set ws = ThisWorkbook.Sheets("List")
Set ws2 = ThisWorkbook.Sheets("Filter")
lColumn = ws.Cells(rowHeader, Columns.Count).End(xlToLeft).column
Set columnHeader = CreateObject("Scripting.Dictionary")
Set filterDict = CreateObject("Scripting.Dictionary")
Dim temp() As Variant

lRow = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row

For i = rowHeader2 To lRow
lcolumn2 = ws2.Cells(i, Columns.Count).End(xlToLeft).column
If lcolumn2 > 1 Then
    ReDim temp(lcolumn2 - 2)

    For j = 2 To lcolumn2
        temp(j - 2) = ws2.Cells(i, j)
    Next j

    Else
        temp = Array(Empty)
    End If

    filterDict.Add CStr(ws2.Cells(i, 1).Value), temp

 Next i


tempCol = ws2.Cells(1, Columns.Count).End(xlToLeft).column
ws2.Range(ws2.Cells(rowHeader2 + 1, 1), ws2.Cells(lRow, tempCol)).Clear


'Refill the sheet
For i = 1 To lColumn
'columnHeader.Add ws.Cells(rowHeader, i), ""

If filterDict.Exists(CStr(ws.Cells(rowHeader, i).Value)) Then
    b = filterDict.Item(CStr(ws.Cells(rowHeader, i).Value))

    For k = LBound(b) To UBound(b)
        ws2.Cells(rowHeader2 + i, k + 2).Value = b(k)
    Next k
End If

'column header to excel sheet
ws2.Cells(rowHeader2 + i, 1).Value = ws.Cells(rowHeader, i).Value

Next i



'Set columnHeader = Nothing
Set filterDict = Nothing

End Sub

Selain itu saya juga menambahkan tombol otomatis ke lembar daftar untuk mengaktifkan filter:

Sub CreateButtons()
'On Error Resume Next

Set ws2 = ThisWorkbook.Sheets("Filter")
Set ws1 = ThisWorkbook.Sheets("List")

For Each wShape In ws1.Shapes
    wShape.Delete
Next wShape

rowHeader2 = 1
lcolumn2 = ws2.Cells(rowHeader2, Columns.Count).End(xlToLeft).column

tempName = "All"
ws1.Buttons.Add(20, 20, 81, 36).Name = tempName
ws1.Shapes(tempName).OnAction = "Unhide_All_Columns"
ws1.Shapes(tempName).Placement = xlFreeFloating
ws1.Shapes(tempName).Select
Selection.Characters.Text = "All"


tempName = "ShowGUI"
ws1.Buttons.Add(120, 20, 81, 36).Name = tempName
ws1.Shapes(tempName).OnAction = "loadGUI"
ws1.Shapes(tempName).Placement = xlFreeFloating
ws1.Shapes(tempName).Select
Selection.Characters.Text = "Show GUI"


For i = 2 To lcolumn2
    tempName = CStr(ws2.Cells(rowHeader2, i).Value)
    ws1.Buttons.Add(15 + i * 100, 20, 81, 36).Name = tempName
    ws1.Shapes(tempName).OnAction = "Tester"
    ws1.Shapes(tempName).Placement = xlFreeFloating
    ws1.Shapes(tempName).Select
    Selection.Characters.Text = tempName
    'ws2.Shapes(tempName).Characters.Text = CStr(ws2.Cells(rowHeader2, i).Value)
Next i
End Sub

Filter

Daftar

person skatun    schedule 09.04.2015