1288075098 参考の表で

左の入力欄に該当する名前を右の名前欄にコピー
各ホールごとに上から順に入れたい、
どの方法が一番わかり易いでしょうか?

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2010/10/28 05:12:01
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kuro-yo No.2

回答回数171ベストアンサー獲得回数29

ポイント100pt

左の入力欄に該当する名前を右の名前欄にコピー

各ホールごとに上から順に入れたい

つまり、参考の表は、左端の行番号は無視して、左の2列と右の2列に分かれていて、

左の表は「先着順でホールの利用希望者名と利用希望のホール名」が書かれていて、

右の表は左の表から、先着順で、各ホールごとに、実際に利用可能な利用希望者名をリストしたい、

(表の例で言えば、各ホール一度に4名までは利用可能なので、ホール名が4つずつある)

という事ですね?


VBAを使って関数を定義するのが一番分かりやすいと思いますが、

それはきっと別の方が回答してくれると思いますので(笑)、


私は、ワークシート上の標準関数のみでやってみました。

こういう感じになります:

f:id:kuro-yo:20101027191058p:image

(使用バージョン Microsoft Excel 2003)


セルD2には

=IF(ISNUMBER(E2),INDEX($A$2:$A$13,E2),"")

セルE2には

=MATCH(C2,OFFSET($B$2:$B$13,IF(C2=C1,E1,0),0,ROWS($B$2:$B$13)-IF(C2=C1,E1,0)),0)+IF(C2=C1,E1,0)

という式が入っています。

D列とE列の残りの行は、D2:E2をそのまま下方向コピーした内容です。

ホール名は参考表のように、必ずひとかたまりになっている事を前提としています。

E列は中間結果の保持のために必要ですが、邪魔でしたら、列幅を0にするなどで隠せば良いでしょう。


ご覧の通り、あまりスマートではありません。スマートさでは、やはりVBAで関数を作成するのが一番いいですね。

id:mitsueda

大変な回答を有難う御座いました、

お陰でなんとか旨く出来ました。

今後とも宜しくお願い致します。

2010/10/28 05:10:34

その他の回答1件)

id:Silvanus No.1

回答回数180ベストアンサー獲得回数71

ポイント28pt

ご質問の際には、基本的には「トラックバック・コメントを受け付ける」設定にされた

状態の方が宜しいかと思います。回答受付を開始した後でも

「回答受付一時停止→トラバ・コメ受付可→回答受付再開」で変更できます。

---

左から4列目のホール名のところで、何故ホール名が4つずつあるのか、

そこの理由が判らない上、Excelのバージョンも不明なので明確な回答はできませんが、

次の様な方法はいかがでしょうか。Excel 2007か2010を想定しています。

1~3列目が記入されていて、4列目と5列目は空白の状態であるとします。

1) 2列目の「名前」を5列目にコピー

 一番上の列見出し("B"と書かれた部分)を選択して[Ctrl]+[C]

2) 5列目にペイスト

 一番上の列見出し("E"と書かれた部分)を選択して[Ctrl]+[V]

3) 同様に3列目の「入力」を4列目にコピー&ペイスト

4) 4列目と5列目を選択

 一番上の列見出しを2列分選択する("D"と"E")

5) メニュー[データ]→[並び替え]で「先頭行をデータの見出しとして利用する」にチェック。

 「最優先するキー」を「入力」、「並び替えのキー」を「値」、「順序」を「昇順」に設定し

 [OK]をクリック。

id:kuro-yo No.2

回答回数171ベストアンサー獲得回数29ここでベストアンサー

ポイント100pt

左の入力欄に該当する名前を右の名前欄にコピー

各ホールごとに上から順に入れたい

つまり、参考の表は、左端の行番号は無視して、左の2列と右の2列に分かれていて、

左の表は「先着順でホールの利用希望者名と利用希望のホール名」が書かれていて、

右の表は左の表から、先着順で、各ホールごとに、実際に利用可能な利用希望者名をリストしたい、

(表の例で言えば、各ホール一度に4名までは利用可能なので、ホール名が4つずつある)

という事ですね?


VBAを使って関数を定義するのが一番分かりやすいと思いますが、

それはきっと別の方が回答してくれると思いますので(笑)、


私は、ワークシート上の標準関数のみでやってみました。

こういう感じになります:

f:id:kuro-yo:20101027191058p:image

(使用バージョン Microsoft Excel 2003)


セルD2には

=IF(ISNUMBER(E2),INDEX($A$2:$A$13,E2),"")

セルE2には

=MATCH(C2,OFFSET($B$2:$B$13,IF(C2=C1,E1,0),0,ROWS($B$2:$B$13)-IF(C2=C1,E1,0)),0)+IF(C2=C1,E1,0)

という式が入っています。

D列とE列の残りの行は、D2:E2をそのまま下方向コピーした内容です。

ホール名は参考表のように、必ずひとかたまりになっている事を前提としています。

E列は中間結果の保持のために必要ですが、邪魔でしたら、列幅を0にするなどで隠せば良いでしょう。


ご覧の通り、あまりスマートではありません。スマートさでは、やはりVBAで関数を作成するのが一番いいですね。

id:mitsueda

大変な回答を有難う御座いました、

お陰でなんとか旨く出来ました。

今後とも宜しくお願い致します。

2010/10/28 05:10:34
  • id:Silvanus
    「4つずつ」にする理由はゴルフだったんですね。
    ゴルフのことをよく知らないので判りませんでした…。
    ショボイ回答してしまい申し訳ないです…。
  • id:kuro-yo
    ホールって、ゴルフコースのホールでしたか。
    私はてっきり、公民館とかのホールかと(笑)
  • id:Silvanus
    あ、いや、何か突然そう思ったんですが、
    よくよく考えたら根拠無いですね…やっぱり、ゴルフじゃないかも(汗)。
    強いて挙げるなら「4つずつ」っていうところでしょうか!?
    確かゴルフって4人一組で回るんでしたよね?
    いずれにしても、4つずつ書いてあることに必然性は無いと勝手に思い込んでいたので
    ご質問者の意に適わない回答になってしまいました。
    まだまだ修行が足らんです…。
  • id:kuro-yo
    いえ、ゴルフコンペの組み合わせ表だと考えれば、むしろ合点がつきます。
    私はインタラクティブ性を重視しましたので、関数を使いましたが、
    もし、最初の1回しか処理を必要としないのであれば、手作業でもっと簡単にできます:
    つまり、左表の内容をそのまま右表に複製して、
    入力欄の値をキーにしてソート(=並べ替え)をすればいいだけですので。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません