0

この質問についてより正確に説明するタイトルがあればいいのですが、ExcelスプレッドシートやVBAについてはあまり詳しくありません(私は主にJava開発者であり、Microsoftの世界ではあまりプレイしていません)。

Excelスプレッドシートを使用して何かを達成しようとしています。ピボットテーブル、ピボットグラフ、またはその他の組み込み機能を使用してそこに到達できるかどうか、またはカスタムVBAコードを作成する必要があるかどうか(または別のプラットフォームを使用する必要があるかどうか)を判断する必要があります。

スプレッドシートの目的は、組織(トーストマスターズクラブ)のスケジュールを作成するのに役立つことです。この組織にはメンバーの名簿があり、毎週ミーティングが行われ、特定のミーティングでさまざまなメンバーがさまざまな役割に割り当てられます。

私のスプレッドシートは次のようになります。

最初のタブ

1列...会員名簿を表す名前のリスト。

2番目のタブ

各行は過去の会議の日付を表します。各役割には列があり、セルにはその日にその役割を果たした人が入力されます。データ検証を使用して、最初のタブの名簿を各セル内でプルダウンとして使用できるようにします。

3番目のタブ(多分複数のタブ?)

これが全体の要点です。可能な会議の役割のそれぞれについて、どのメンバーがその役割に割り当てられるのに最も「遅れている」かを確認したいと思います。基本的に、私はすべてのクラブ会員のリストを、彼らが最後にその役割を果たしてからの経過時間の順に並べ替えて欲しいと思います。その役割を果たしたことがない人は、リストの一番上に並べ替えられます。

その3番目のタブデータは、ピボットテーブルなどで実行できるものですか?それとも、これらのツールの目的と制限を誤解していますか?

4

2 に答える 2

1

ピボットテーブルを使用してこれを行う方法を見つけました-役割ごとに1つ。すべきかどうかは少し疑わしいですが、実際にいくつの役割を持っているかによって異なります。2をサンプルとして使用して動作させました。要点は次のとおりです。

  • 名前を含む(Excel)テーブルがあります
  • 会議の日付、RoleA、RoleB ...を含む(Excel)テーブルがあります(私は名目上の例として議長と秘書を使用しました)。これらのセルには、その役割を担う人の名前が含まれています。

次に、役割ごとにピボットテーブルを作成します([挿入]-> [ピボットテーブル])。使用するフィールドは次のとおりです。行ラベル-分析している役割。値-会議の日付

次に、[フィールド設定]に移動して結果の種類を変更し、[最小]に変更します。その役割を果たした人だけがここに表示されることに注意してください。

役割ごとにこれを繰り返します。

名前の表に戻り、各役割の列を追加して、最後にその役割を果たしたのはいつかを示します。このための公式はかなり扱いにくいです:

=IFERROR(GETPIVOTDATA("Meeting Date",Chair!$A$3,"Chair",People[[#This Row],[Name]]),0)

GETPIVOTDATAは、その役割を持っていない場合はエラーになるため、エラーを0(任意の低い数値)に置き換えます。

次に、以下を使用して、役割に対して最も延滞している人を特定できます。

=OFFSET(People[[#Headers],[Name]],MATCH(MIN(People[LastChair]),People[LastChair],0),0)

同点の場合は、名前のリストの最初に表示される人がここに表示されます。

それが理にかなっていることを願って、質問があれば質問してください

于 2011-01-25T21:00:31.670 に答える
0

私の最初の本能は、心ゆくまでSQLクエリを実行できるAccessに移動することですが、これは、カスタムコーディングなしでAccessで実行できると確信しています。

  1. ピボットテーブルは機能する可能性がありますが、いくつかの理由(カジュアルユーザーに説明するのが難しい、自動的に更新されない、フォーマットするのが難しいなど)で回避しているため、Excelの組み込みセル関数のみを使用したものを次に示します。
  2. http://www.techonthenet.com/excel/formulas/index.phpでvlookup( )countif()を確認してください。(組み込みのヘルプファイルも機能します。私はこのサイトがもっと好きです)
  3. 下の画像では、Tab2Tab3をシミュレートしています。 Tab2は純粋にデータであり、方程式はありません。 Vlookup() では、このテーブルを日付の降順で並べ替え、右端に日付列を配置する必要があります。
  4. Tab3は、各人がその役割を果たした回数と、最後にその役職に就いたときの両方をカウントします。
  5. セルC13の数式はです=COUNTIF($B3:$B8,$B13)。つまり、Tab2のChairperson列に「Abe」が表示された回数をカウントします。
  6. セルD13の数式はです=IF(C13>0,VLOOKUP($B13,$B$2:$D$8,3,FALSE),"-")。つまり、その人がその役割を果たしたことがある場合は、最新の日付が見つかります。
  7. セキュリティの公式はほとんど同じです。「LastServed」列がになり=IF(E13>0,VLOOKUP($B13,$C$2:$D$8,2,FALSE),"-")ました。Vlookup関数のニーズを満たすために、ここで範囲の名前を変更する必要があります(SQLクエリはここでは非常に便利ですが、Excelでは許可されていません)
  8. 誰かが「延滞」であるかどうかを定義するのは難しいです。なぜなら、「最後に提供された」は「#時間提供された」よりも重要であると主張する人もいれば、正反対のことを主張する人もいるからです。両方の列を見て、話し合うことをお勧めします。 サンプル画像
于 2011-01-25T21:25:47.053 に答える