|
誤字脱字が沢山あったみたいです。
気が付いたところだけ訂正しときます。
>>給与計算を作ってってたんですが、計算等とか所得税はできたんですが、作ってるうちにだんだんファイルが大きくなってしまって、なんとか小さくならないとかと思いまして、大きな所の一部だけ載せてみました。人数分だけでも100人近くて
>>行を消したり出したりして役職変更できるようにしてみたのですが・・
>>ファイルが8M超えてしまって困ってたのでなんとかならないとかと思いまして。
>↑この容量が極端に大きくなってしまったのは、別の原因かもしれませんよ。
>
>コードを見せて頂きました。
>で、教えていただきたいのは、規則性なんです。
>
>例えば、かぶさんがご提示されたコードは、シート「氏名一覧」の4行目の
氏名データにはM列に役職を入力させるようになっているということですよね?
>そして、この役職によって、各シート(役職A、掃除、・・)のレイアウトを
>変えてしまおうという仕様ですね?
>(この仕様の良し悪しは別の話ですよ、この仕様を書いたら大変ですね!!
>給与計算の仕様やマニュアルを書こうとしたら、何十枚になってしまいますものね。)。
>
で、知りたいのは、シート「氏名一覧」の4行目氏名データの場合には、
>各シートのほとんどが4行目を表示・非表示の設定、役員シートの役員と監事がそれぞれ
>100+4、200+4行目を表示・非表示の設定を行っています。
>
>これが、シート「氏名一覧」の5行目氏名に対しては、各シートの何行目に対して表示・非表示の設定を行うのかということなんです。
>
>又、シート「氏名一覧」の6行目氏名に対しては、どうなのか?
>
>ここに等差数列のような規則性があれば、ループ処理が可能です。
>上記のような仕様なら、多分規則性があるはずですが・・・。
>
>又は、シート「氏名一覧」の選択した氏名に対して、ご提示されたような各シートの表示・非表示設定を行いたいということでしょうか?
>この場合、シート「氏名一覧」の氏名データが何行目のものであっても
>各シートの表示・非表示行は、ほとんどが4行目、役員シートの役員と監事がそれぞれ
>100+4、200+4行目を表示・非表示設定を行うという解釈ですが・・・。
>
>前者は、規則性がわからないのでコードは掲載しませんが、後者の仕様だと・・。
>
>以下に示すコードは、シート「氏名一覧」の選択した氏名データのM列の役職により、
>各シートの所定行の表示・非表示を行うコードです。氏名データを選択した状態で
>以下のコード(プロシジャーチェックA)を実行して下さい。
>
>'=============================================================
>Sub チェックA()
> Dim dsp_row_flg(1 To 10) As Boolean
>' 1: 一般 2:役職A 3:役職B 4:役職C 5:役職D 6:掃除 7:学生 8:社長 9:役員 10:監事
' True:非表示 False:表示
> Dim rng As Range
> Set rng = Selection
> If rng.Parent.Name <> "氏名一覧" Then
> MsgBox "シート""氏名一覧""の氏名行を選択してね!!"
> Else
> For idx = LBound(dsp_row_flg()) To UBound(dsp_row_flg())
> dsp_row_flg(idx) = True
> Next idx
> Select Case Range("m" & rng.Row).Value
> Case "役職A"
> dsp_row_flg(1) = False
> dsp_row_flg(2) = False
> Case "掃除" '表示・非表示設定の規則もはっきりしないので
>' 私の勝手な推測で設定しました。
> dsp_row_flg(1) = False
> dsp_row_flg(6) = False
> Case "役職B"
> dsp_row_flg(1) = False
> dsp_row_flg(3) = False
> Case "役職C"
> dsp_row_flg(1) = False
> dsp_row_flg(4) = False
> Case "役職D"
> dsp_row_flg(1) = False
> dsp_row_flg(5) = False
> Case "学生"
> dsp_row_flg(1) = False
> dsp_row_flg(7) = False
> Case "社長"
> dsp_row_flg(1) = False
> dsp_row_flg(8) = False
> Case "役員"
> dsp_row_flg(1) = False
> dsp_row_flg(9) = False
> Case "監事"
> dsp_row_flg(1) = False
> dsp_row_flg(10) = False
> Case "事務"
> dsp_row_flg(1) = False
> End Select
> Call シート設定(4, dsp_row_flg())
> End If
> Sheets("氏名一覧").Select
>End Sub
>'=============================================================
>Sub シート設定(設定行 As Long, 表示有無() As Boolean)
>'各シートの指定行を指定により、表示又は、非表示にする
>'input : 設定行 表示又は、非表示対象行
>' 表示有無() 各シートの表示・非表示の真偽
>' 1: 一般 2:役職A 3:役職B 4:役職C 5:役職D 6:掃除 7:学生 8:社長 9:役員 10:監事
' True:非表示 False:表示
> Sheets("一般").Rows(設定行).Hidden = 表示有無(1)
> Sheets("役職A").Rows(設定行).Hidden = 表示有無(2) '役職A
> Sheets("役職B").Rows(設定行).Hidden = 表示有無(3)
> Sheets("役職C").Rows(設定行).Hidden = 表示有無(4)
> Sheets("役職D").Rows(設定行).Hidden = 表示有無(5)
> Sheets("掃除").Rows(設定行).Hidden = 表示有無(6)
> Sheets("学生").Rows(設定行).Hidden = 表示有無(7)
> With Sheets("役員")
> .Rows(設定行).Hidden = 表示有無(8) '社長
> .Rows(設定行 + 100).Hidden = 表示有無(9) '役員
> .Rows(設定行 + 200).Hidden = 表示有無(10) '監事
> End With
>End Sub
>
|
|