2

まず、可能であればVBを使用せずにこれを実行したいので、マクロを有効にする方法を受信者に教える煩わしさを経験する必要はありません。

今、私がやりたいことは単純だと思いますが、答えは公式的には複雑かもしれません。他の2つの列の値が一致する行の指定された列の値を新しい列にリストしようとしています。トリッキーに聞こえるかもしれませんが、例は非常に役立つはずです...

次のデータがあるとします。

 ------------------
| sts | pos  | bye |
 ------------------
| 0   | QB   | 8   |
| 2   | WR   | 3   |
| 2   | QB   | 10  |
| 0   | QB   | 4   |
| 2   | QB   | 7   |
| 0   | WR   | 11  |
| 2   | WR   | 9   |
| 2   | QB   | 5   |
 ------------------

それが私の情報源です。それぞれのに対して、byeを持つすべての行から値をリストしたいと思います。つまり、上記のソースデータから、次の結果セットを確認したいと思います。sts = 2pos

 --------------------------
| pos | byes               |
 --------------------------
| QB  | 10  | 7  | 5  |    |
| WR  | 3   | 9  |    |    |
 --------------------------

...これらは、結果テーブルの対応するbye行の値であるsts = 2ためです。pospos

繰り返しになりますが、可能であればマクロを避けbye、結果テーブルのセルで数式を使用するだけです。

うまくいけば、それはあなたがそれを突き刺すのに十分な意味があります。ありがとう!

ファローアップ:

@ Richard-Morgan私はあなたの数式を使おうとしましたが、うまくいきません。これが私の実際のスプレッドシートのスクリーンショットで、実際のセル参照を使用できます。

スプレッドシートのスナップショット

、、、、stsです。B2:B303_ pos_ D2:D303_ bye_ E2:E303それでは、列にさようならをリストアップしたいと思いUますY。あなたの答えは、私がそれを実装するのに十分賢いなら、私が必要なものを私に与えるように見えます、それであなたが私をフィニッシュラインに導くためにあなたが提供できるどんな援助も大いに感謝されます!

4

3 に答える 3

1

次のようなものを使用できます。

{=INDEX(tbl, SMALL(IF(COUNTIF(G$3, $A$2:$A$9)
 *COUNTIF(G$4, $B$2:$B$9), ROW(tbl)-MIN(ROW(tbl))+1), ROW($C1)), COLUMN($C1))}

ここで、A列はsts、B列はpos、C列はbyeです。変数tblは、データの範囲です(ヘッダーではありません)。G $ 3はstsフィルターで、G$4はposフィルターです。

配列数式をDOWNにコピーして、一致するすべてのバイを見つけます。#NUM!一致するものが見つからなくなった後に表示されます。これがユーザーに迷惑をかける場合は、ISERRORまたはトリッキーな条件付きフォーマットを追加して、テキストを白地に白にすることができます。

次に、数式を次の列にコピーして、新しいフィルター値を入力できます。

            G   H
sts Search  2   2
pos Search  QB  WR

            10  3
            7   9
            5   #NUM!
            #NUM!#NUM!

ユーザーがピボットテーブルに慣れている場合は、ピボットテーブルを使用する方がはるかに簡単だと思います。

編集 式を「転置」するのは少しトリッキーで、それを修正する方法については何のブレークスルーもありません。ただし、列の数式を手動で編集する場合は、次のようにします。

(私はSがstsフィルターであると仮定しました。たぶんあなたはそこでカウントをしているだけですが、stsのフィルターをどこに入力するかわかりませんでした。Sがstsフィルターでない場合は、数式を更新してポイントします。 stsが2か何かになります。)

U2:

{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$303)*COUNTIF($R2, $D$2:$D$303), 
 ROW(tbl)-MIN(ROW(tbl))+1), ROW($D$1)), COLUMN($D$1))}

V2:

{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$303)*COUNTIF($R2, $D$2:$D$303), 
ROW(tbl)-MIN(ROW(tbl))+1), ROW($D$2)), COLUMN($D$2))}

これにより、セルをコピーすることができます。

行/列を間接化する方法があると確信していますが、現時点ではこれを確認する時間が不足しています。

編集2 どこかに単純な数値の増分を置く場合、たとえばU1が1、V1が2、W1が3などの場合、次を使用できます。

{=INDEX(tbl, SMALL(IF(COUNTIF($S2, $B$2:$B$9)*COUNTIF($R2, $D$2:$D$9), 
ROW(tbl)-MIN(ROW(tbl))+1), U$1), COLUMN($D$1))}

これはコピーダウンして渡ります。

于 2012-08-23T19:31:31.973 に答える
0

これはピボットテーブルの仕事のように聞こえ、特別に行きます。ただし、ID#列を追加する必要があります。これがあなたがそれをすることができる1つの方法です:

PivotTableSolution1

PivotTableSolution2

次に、go to specialを使用して空白を選択したら、それらを削除してセルを左にシフトするだけです。 PivotTableSolution3

幸運を。

于 2012-08-23T19:40:56.317 に答える
0

OK私は自分の望む結果を得る方法を考え出しました。これは最もクリーンで最良の方法ではありませんが、結果を水平方向に一覧表示するという私の目標を達成し、マクロやピボットテーブルを回避します。

非表示のワークシートを使用して、すべての値possts値を1つの値として連結して一覧表示します。それで...

sts   | pos   | bye
----------------------
2     | QB    | 8
2     | RB    | 5
2     | QB    | 11
0     | WR    | 7
. . .

...になる...

     D   | E
    -----------
5  | 2QB | 8
6  | 2RB | 5
7  | 2QB | 11
8  | 0WR | 7
     . . .

次に、フロントページのワークシートの結果領域を模倣した「シャドウ」結果領域があります。それはそのように見えます:

     G   | H   | I   | J   | K
    -----------------------------
5  | QB  |     |     |     |     |
6  | RB  |     |     |     |     |
7  | WR  |     |     |     |     | . . .

H5:H7には、次の式があります。

=IFERROR((ADDRESS(MATCH("2"&$G5,$D$5:$D$305,0)+4,COLUMN($E5),4)),"")

これにより、 2で始まり、列Gの値で終わる連結列で最初に見つかったセル参照が返されます(たとえば、行5の数式は「2QB」を探しています)。

次に、I5:n 7で、次の変更された式があります。

=IFERROR(ADDRESS(MATCH("2"&$G5,INDIRECT(ADDRESS(ROW(INDIRECT(H5))+1,4)&":$d$"&MAX(305,ROW(INDIRECT(H5))+1)),0)+ROW(INDIRECT(H5)),COLUMN($E5),4),"")

後続の列を変更する理由は、数式がその値を検索する範囲を変更して、前に見つかった値の次の行から開始するためです。たとえば、上記のデータでは、H5の数式はD5:D * n *で「2QB」を検索し、見つかった最初の行を返し、それを列E(E5 )に添付します。

次に、 I5の式は、H5の結果で参照されている行のの行であるD5ではなくD * 6 *で始まる「2QB」を検索します。

うまくいけば、それは理にかなっています。

したがって、非表示のワークシートに表示されるのは次のとおりです。

     G   | H   | I   | J   | K
    -----------------------------
5  | QB  | E5  | E7  |     |     |
6  | RB  | E6  |     |     |     |
7  | WR  |     |     |     |     | . . .

次に、フロントページのワークシートで、次をbye使用してH5:* n * 7のセルによって参照される値()を取得します。

=IFERROR(INDIRECT(lookups!H5),"")

...これで最終結果が得られます:

     G   | H   | I   | J   | K
    -----------------------------
5  | QB  | 8   | 11  |     |     |
6  | RB  | 5   |     |     |     |
7  | WR  |     |     |     |     | . . .

私が言ったように、それは完全に複雑ですが、それは機能します、そして私が方法を理解すれば私はいつでもそれを後で洗練することができます。:)私にとってこの一見複雑な問題にスイングをしてくれたあなたに感謝します!あなたの答えもうまくいくと思います。

于 2012-08-25T04:40:00.647 に答える