• ベストアンサー

昨日も質問しましたが・・・

いろんな方にアドバイスいただきましたが、当方理解力、知識が乏しく、再度質問させて頂きます。 表➀のような表に個人の出席の状況(データーベース)を作成しその結果 表(2)のような表を別のSHEETにつくり曜日別出席者を貼り付けたいと思っています。(自動的に) これを可能にするのはマクロをつかわないと出来ないと思うのですが、自分でマクロのプログラムを組んだ経験もありません。 どなたか手ほどきして頂ける方、出来るだけ詳しく教えて頂ければ幸いです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.8

#3,7です。 一部修正、削除に対応できないので A11セル =IF(COUNTA($A$3:$A$8)>COUNT($A$10:A10),COUNT($A$10:A10,0),"") で 挿入は空白行の8行目をコピーして、コピーしたセル(行)の挿入

syou_yuu20
質問者

お礼

いつも助けていただいてありがとうございます。

その他の回答 (7)

回答No.7

#3です >元データーの行を挿入したり、削除をすると 2行目と3行目の間に挿入しないとして 一工夫 J3セル =IF(B3="○",SUM(INDEX(J:J,ROW()-1),1),SUM(INDEX(J:J,ROW()-1))) 右へ下へオートフィル A11セル =IF(COUNTA($A$3:A3)=SUM(A10,1),SUM(A10,1),"") 下へオートフィル B11セル =IF(J$8<$A11,"",INDEX($A$3:$A$8,MATCH($A11,J$3:J$8,0))) 右へ下へオートフィル 8行目(A8:H8)は いつも空白にしておくとよい ただし、表2は連動していないので足りなくなる可能性がある。 よって、足りないときはオートフィルでコピーする。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

この手の「表の組み換え」はマクロでないと、関数式では難しい。 しかしVBAの経験の無いものに、このコードを作るのは短期間には不可能だ。 結局「作って呉れ」になってしまう。 ーー VBAは習い始めると (1)VBの基礎的な文法のこと (2)エクセルを扱うためのステートメント、メソッド、プロパティ、VBの関数 (3)この問題に適した適当な処理ロジックを思いつく能力 が必要で、特に(3)は経験で磨くほか無い。下記はその一例。 仕事でエクセルを使うならVBAが必要だと思うが、勉強しなければ仕方が無い。 下記など参考にならないレベルなら、 多少の手数がかかるのはそれまで我慢しなければ仕方が無い。 ーー この問題はわかってみれば、10行程度の簡単なコードのこと。 まず左列B列から1列のデータをチェック そのセルが○なら(X後記)をして、でなければ何もしない。 最下行までチェックしたら次の列のデータで上記をくり返す(2重のForNextループ)。 Googleで照会すればわかる。 ーー (x)はその行のA列の名前を取ってシートのセルに書き込む。 下の名前の部分に書き込んだら、次に書き込む行ポインタを1行下げておく。 次の列に移るときは書き出すエリアの最初であるところの、第12行をポイントしておく。 また上記のくり返しをやめる行や列を知るために、VBAで 一番下の行を知る(質問例では第7行目) 一番右の列を知る(質問例ではH列) 必要がある。 これらは常套的なコードが在る。Googleででも照会すれば出てくる。 例えば「一番下の行を知る VBA]で照会 http://www.happy2-island.com/excelsmile/smile03/capter00702.shtml

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

添付画像のレイアウトの通りなら、B12セルに以下の式を入力して右方向および下方向にオートフィルコピーしてください。 =INDEX($A:$A,SMALL(INDEX((B$3:B$8<>"○")*100+ROW(B$3:B$8),),ROW(A1)))&""

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.2です! 補足に「0」が表示されるということなので・・・ 前回の数式はSheet番号が間違っていました。 もう一度数式を訂正します。 Sheet2のB2セルを =IF(COUNTIF(Sheet1!B$1:B$100,"○")<ROW(A1),"",INDEX(Sheet1!$A$1:$A$100,SMALL(IF(Sheet1!B$1:B$100="○",ROW($A$1:$A$100)),ROW(A1)))) に訂正し、配列数式にしてみてください。 何度もごめんなさいね。m(__)m

回答No.3

タイトルは質問にあったものをお願いします オートフィルターから抽出、貼り付けを自動化したい http://okwave.jp/qa/q6417592.html ではマクロを使って作りたいような質問でした。 表2から表1は簡単にできるのですが、逆は少々面倒ですね。 数式で作ってみました。作業用の行を設けています。(9~14行) A10セルは下へ連番 B10セル =IF(B3="○",SUM(B9,1),SUM(B9)) B17セル =IF(B$14<$A10,"",INDEX($A$3:$A$7,MATCH($A10,B$10:B$14,0)))

syou_yuu20
質問者

お礼

有難うございました。 頂いた関数の組み合わせで確実に反映されました。 式のもつ意味を考えてみたいと思います。 大変ありがとうございました。

syou_yuu20
質問者

補足

再度お尋ねします。 マクロの知識がない自分にとって非常に扱いやすく重宝しております。 使用目的のデーターを使ってやってみたところ、元データーの行を挿入したり、削除をすると 正確に反映されない状態にあります。 自分がコピーした数式に誤りがあると思うのですが、挿入、削除をする場合、一工夫が必要なのか教えて頂けますか。 何から何まで申し訳ありません。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 一例です。 ↓の画像でSheet2のB2セルに =IF(COUNTIF(Sheet2!B$1:B$100,"○")<ROW(A1),"",INDEX(Sheet2!$A$1:$A$100,SMALL(IF(Sheet2!B$1:B$100="○",ROW($A$1:$A$100)),ROW(A1)))) これは配列数式になってしまいますので、この画面からSheet2のB2セルにコピー&ペーストした後に 数式バー内で一度クリックします。編集可能になりますので、 Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、数式はSheet1の100行目まで対応できるようにしてみました。 以上参考になれば良いのですが 他に良い方法があればごめんなさいね。m(__)m

syou_yuu20
質問者

補足

参考にさせてもらい、実際にやってみたところ計算結果は"0"とでます。 私自身どこで間違えたのでしょうか。 お忙しい中、申し訳ありません。 改善できる方法を教えて頂けますか。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

関数による方法ですが如何でしょうか。 Sheet2のB2に以下の数式を入力し、enterキー押下時にshift+ctrl+enterキーを同時押下後、縦横コピーして下さい。 因みデータ範囲は100行(見出し行含む)としていますので以下の数式のセル範囲箇所を調整して下さい。 =IF(COUNTIF(Sheet1!B:B,"○")>=ROW(A1),INDEX(Sheet1!$A:$A,SMALL(IF(Sheet1!B$1:B$100="○",ROW(Sheet1!$A$1:$A$100),999),ROW(A1))),"")

syou_yuu20
質問者

お礼

早速有難うございます。 チャレンジしてみます

関連するQ&A