Excel - ワークシート自動生成

Excelは、数値処理とデータ表現に便利なツールです。 VBA組み合わせると 、無数のシナリオに合わせてカスタマイズできる非常に動的なアプリケーションになります。 そのような例の1つは、 エントリがマスターリストに追加または削除されるたびに生成されるワークシートの 自動生成機能を作成できる場合です。 VBAコードは、 自動生成機能マスターシート内名前を検索し、ブック内のすべてのシートを移動するように機能します。 事前に指定された基準が一致する場合は常に、 ユーザーの入力に基づいてワークシートを追加または削除できます

  • 問題
  • 溶液
  • 注意

問題

私は、タイムカードに記入する必要があるすべての情報を含む名前シートと、従業員が記入するタイムカードを含むマスターシートを含むワークブックを持っています。 毎週新しいタイムカードを自動的に生成するにはどうすればよいですか。 彼らが彼らのカードを見つけて、彼らのカードに名前シートからのすべての情報を置くことができるように、私はそれがタブの従業員の名前でシートに名前を付けることを必要とします。 アルファベット順に並ぶ新しい名前がリストに追加または削除されると、新しいカードに名前が付けられ、リストシートから各カードの正しい情報が生成されます。 これどうやってするの? 私はこれに慣れていません、そしてこれがされる必要がある最後の事です。

溶液

あなたの名前とテンプレートがどのように見えるかわかりません

ファイルのバックアップコピーを作成してください

コードを読み、適切な変更を加えてください、私はあなたのためにすべてをコメントアウトしました。

  • Altキーを押しながらF11キーを押してvbeを開きます
  • 挿入をクリックしてモジュールを選択
  • 以下のコードをコピーして貼り付けます。

 Sub generateTimeSheets()Dim sMasterNameSheet As String従業員情報を持つシートの名前Dim sTimeSheetTempate As String 'タイムカードテンプレートであるシートの名前'整数としてのDim 'iMaxNameColとしての最も多くの行が存在する列番号Dim lMaxNameRow As Integer Dim sTemp As String '一時変数Dim vWarning As Variant'削除の警告 '################################## ###################あなたのニーズに合うようにここにカスタマイズ '####################### ############################ sMasterNameSheet = "Names" 'これは従業員情報を持つシートの名前ですsTimeSheetTempate = "タイムシートテンプレート"'これはタイムシートテンプレートであるシートの名前です。Dim iNameCol As Integer'従業員情報シートのcolに、名前情報があります(他の列を追加)Dim sEmpName As String '従業員の名前iMaxNameCol = 1'この列従業員シートの最大行数はiNameCol = 1です。これはemplの列です。 oWee = MsgBox( "これは" _&sMasterNameSheet& "と"&sTimeSheetTempate _& "を除くすべてのシートを削除します。 "、vbCritical + vbDefaultButton2 + vbYesNo)"続行したくない場合は、vWarning vbYes [Subを終了して2つのシート以外をすべて削除する]を選択すると、ブック内のすべてのシートが移動されます。シートの検査が2つの重要なシートでない場合は、ループsTemp = mysheet.Name 'を削除し、削除します。((UCase(Trim(sTemp))UCase(Trim(sMasterNameSheet)))And _(UCase(Trim(sTemp))UCase(Trim(次のシートの場合は終了(sMasterNameSheet)を選択します。最大行数を検索します。lMaxNameRow = Cells(65536、iMaxNameCol).End(xlUp).Row sTemp = sTimeSheetTempate lThisRow = sTimeSheetTempate sEmpName = Cells(lThisRow、iNameCol)sEmpName = Trim(sEmpName) "(sEmpName" ")の場合シート(sTimeSheetTempate)を選択します。シート(sTimeSheetTempate)を選択します。コピー後:=シート(sTemp)ActiveSheet.Name = sEmpName sTemp 'このサンプル行では、修正を行う必要があります。新しくコピーされたテンプレートのセルA1に、 従業員シートSheets(sEmpName)の列Aにeが見つかりました。Range( "A1")= Sheets(sMasterNameSheet).Range( "A"&lThisRow)次の場合は終了次へ次へ 
  • 4. F5キーを押して実行します

注意

フォーラムでこのヒントを寄せてくれたrizvisa1に感謝します。

前の記事 次の記事

トップのヒント