1

これはそれほど難しいことではないと確信していますが、インターネット検索に簡単に役立つタイプの質問ではありません。

複雑なスプレッドシートを含む作業用のプロジェクトが割り当てられました。私は通常の=SUMおよびその他の基本的なExcelの数式を実行しました。十分なコーディングのバックグラウンドを持っているので、少なくともVBAを通り抜けることができますが、タスク。

単純なバージョン:シート1に人のリスト(各行に1つ、列Aに人の名前)があり、シート2にグループのリスト(各行に1つ、列Aにグループ名)があります。シート1の各名前には独自の行があり、各人が属するグループを選択する[データ検証]ドロップダウンメニューがあります。

そのドロップダウンは、各グループに行があるシート2から供給されます。したがって、基本的に、シート1の「グループ」列のデータ検証ソースは「= Sheet2!$ a1:a100」などです。

問題は次のとおりです。シート2の各グループ行に、シート1でそのグループに割り当てられているすべてのユーザーのリストを生成する数式を含める必要があります。つまり、「select *fromPeopleTab」と同等です。ここで、GROUP =ThisGroup"です。結果のセルは、「Bob Smith、Joe Jones、SallySanderson」のように名前を貼り付けるだけです。

私は何時間もグーグルを続けていますが、検索クエリを表現して希望の結果を得る方法を考えることができません。

望ましい結果の例を次に示します(ダッシュで区切られています。見栄えを良くする方法が見つかりません。ここではテーブルタグが機能していないようです)。

(シート1)
ボブスミス-グループ1(ドロップダウンから選択)
ジョージョーンズ-グループ2(ドロップダウンから選択)
サリーサンダーソン-グループ1(ドロップダウンから選択)

(シート2)
グループ1-ボブ・スミス、サリー・サンダーソン(式の結果)
グループ2-ジョー・ジョーンズ(式の結果)

そのグループのメンバーからフラットリストを作成するために、シート2の2番目の列でどの式(またはどの関数)を使用しますか?

4

2 に答える 2

1

FILTER同様の効果を達成するために式を使用しました。基本的な形式は次のとおりです。

=FILTER(source, condition, [more conditions...])

これは、「ソース範囲を取得し、これらの各条件に一致するセルを返す」ことを示しています。

列全体 (最初のシート、列 A の名前) を参照し、別の列 (シート 1 の列 B で選択されたグループ) の内容でそれらの値をフィルター処理することができ'Sheet1'!A:AますEQ('Sheet1'!B:B, $Ax)。ここ$Axで、 はシート 2 の列 A のグループ名への参照です (x を行番号に置き換えます)。

たとえば、sheet2次のようなものがあります。

-------------------------------------------------------------------
|   A    |   B
-------------------------------------------------------------------
| Group1 | =TRANSPOSE(FILTER('Sheet1'!A:A, EQ('Sheet1'!B:B, $A1)))
-------------------------------------------------------------------
| Group2 | =TRANSPOSE(FILTER('Sheet1'!A:A, EQ('Sheet1'!B:B, $A2)))
-------------------------------------------------------------------

TRANSPOSEソース範囲が列であるため、 が必要です。そのため、 から列が返されFILTERます。転置は、その列を行に転置するだけです:)

補足として、フィルターを使用して、フィルター処理された範囲 ( =SUM(FILTER(...))) の合計を見つけるなど、他の優れた処理を行うことができます。これを予算スプレッドシートで使用して、月とカテゴリごとにグループ化して合計した収入/支出を計算します。

免責事項: MS Excel を持っていないため、Google ドキュメントのスプレッドシートでテストしました。

于 2012-11-30T03:00:27.380 に答える
0

シート 1: VBA

Private Sub worksheet_Change(ByVal Target as Range)
  if target.row =1 and target.value<>"" then target.offset(,1)=sheets("sheet2").cells(application.match(target.value,sheets("sheets").columns(1),0),2).value
End sub
于 2012-12-05T12:47:48.360 に答える