• ベストアンサー

縦2行のデータを横14行で表示させるには…

excel2003での質問です。 A列に4月1日(日)~3月31日(日)(曜日は仮)までの日付が、 B列にはそれぞれの日の行事が入力されています。 これを、別シートに 日付と行事をセットにして、 横に月曜日から日曜日まで並べ替えて表示するのはどうしたらよいのでしょうか。 こんな感じです   A列    B列 1 4/1(月) 行事1 2 4/2(火) 行事2 3 4/3(水) 行事3 4 4/4(木) 行事4 5 4/5(金) 行事5 6 4/6(土) 行事6 7 4/7(日) 行事7 8 4/8(月) 行事8 9 4/9(火) 行事9    ↓   A列   B列   C列   D列   … M列   N列 1 4/1(月) 行事1  4/2(火) 行事2  … 4/7(日) 行事7 2 4/8(月) 行事8  4/9(火) 行事9  … 縦1行だけなら以前madeline_kngさんが質問(質問番号:1955100)されたのでそれを参考にすればわかるのですが… よろしくお願いします。  

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

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

複雑な式を使いたくない場合は以下のようにします。 データシートを「Sheet1」とします。 (1)別シートのA1に「#Sheet1!A1」、B1に「#Sheet1!B1」とし、A1:B1を選択してN列までオートフィルします。 (2)別シートのA2に「#Sheet1!A8」、B2に「#Sheet1!B8」とし、A2:B2を選択してN列までオートフィルします。 (3)別シートのA1:N2を選択して必要な行までオートフィルします。 (4)置換機能を使って「#」を「=」に置換します。 以上です。

r-inarin
質問者

お礼

早々にご回答いただきありがとうございます。 「目から鱗が落ちる」そんな感じです! なるほどね! ありがとうございます。 こちらの方法だと、日付の表示形式が変わりませんでした。

その他の回答 (7)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.8

図添付の都合で別シートにしていませんが、適当に直してください。 D3:=INDIRECT("A"&(ROW($A$3)+(ROW()-ROW($A$3))*7+(COLUMN()-COLUMN($D$3))/2)-2) E3:=INDIRECT("B"&(ROW($B$3)+(ROW()-ROW($B$3))*7+(COLUMN()-COLUMN($E$3))/2)-2) として、D3:E3を選択して右に7ステップ分フィル、更に下に適当にフィルして下さい。式の最後の「-2」は「月」に合わせるためです。

r-inarin
質問者

お礼

図まで添付していただきありがとうございます。 できました。 いろいろな方法(式)があるのですね。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

回答No5です。 大変失礼をいたしました。大切な式の提示が抜けておりました。申し訳ありません。 式のみを以下にまとめます。 Sheet1のC1セルには次の式を入力します。 =IF(A1="","",WEEKDAY(A1,2)) D1セルには次の式を入力します。 =IF(A1="","",C1&"/"&IF(C$1=1,COUNTIF(C$1:C1,1),COUNTIF(C$1:C1,1)+1)) Sheet2のA1セルには次の式を入力しN1セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$D:$D,ROUNDUP(COLUMN(A1)/2,0)&"/"&ROW(A1))=0,"",INDEX(Sheet1!$A:$B,MATCH(ROUNDUP(COLUMN(A1)/2,0)&"/"&ROW(A1),Sheet1!$D:$D,0),IF(MOD(COLUMN(A1),2)=0,2,1)))

r-inarin
質問者

お礼

再度ご回答いただきありがとうごます。 できました!! 表示された結果はまったく望んだ通りというか…充分過ぎます。 ここまで出来るなんて思ってもいなかったので驚きです。 関数だけでもここまでできるんですね。 本当に驚きです。 唯一問題と言えば… 私の力ではまったく式の意味が理解できないことです。 私にはレベルが高過ぎて…。 でも、ありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

回答No5です。 Sheet1でのB1の入力の式は以下のように変更してください。 =IF(A1="","",C1&"/"&IF(C$1=1,COUNTIF(C$1:C1,1),COUNTIF(C$1:C1,1)+1))

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

月初めが月曜とは限りませんね。 データがSheet1にあるとしてA1セルから下方には4/1(月)のようになっているとします。 念のため今年の4月1日は水曜日ですが。 これらのデータが正しく表示されるようにするためには、今年の場合でしたら4/1のようにセルに入力します。すると数式バー上では2009/4/1のように表示されます。そこで4/1(水)のように表示させるためにはA列を選択して右クリックし、「セルの書式設定」の「表示形式」から「ユーザー定義」を選択し、m/d(aaa)と入力すればよいですね。 B列には行事が入っています。 ところで、望みの表を得るためには作業列を作って対応します。 B1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",WEEKDAY(A1,2)) また、C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",C1&"/"&IF(AND(COUNTIF(C$1:C1,1)=1,ROW(A1)=1),1,COUNTIF(C$1:C1,1)+1)) お求めの表ですがSheet2に作ることにしてSheet2 のA1セルには次の式を入力してN1セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 A列、C列、E列・・・と日につが表示される列についてはそれらの列をCtrlキーを押しながら選択した後で「セルの書式設定」から、最初に述べたと同様にして「ユーザー定義」ではm/d(aaa)と設定することで最終的な表が出来上がります。

r-inarin
質問者

補足

ご回答ありがとうございます。 日付の表示の仕方までていねいにご説明いただきありがとうございます。 作業列のことで質問させてください。 B列には行事が入力されています。そのB列に式を入力すると行事が消えてしまうのですが?別シートでしょうか? また、「Sheet2 のA1セルには次の式を入力して…」と書かれているのでが、その式とは?

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

エクセル関数の数式は、値を受けるセルに入れるのはわかりますね。 Sheet2側です。その情報としては自分の(=式を入れる)行番号、列番号しか利用する材料は在りません。ですからこの行と列x、yから、Sheet1の見に行く行と列を探さねばなりません(z=f(x、y)でfがどんな式になるか、のイメージです。) 日付列は A1はx、yは(1,1)ですがSheet1の1行目(1,1) C1はx、yは(1,3)ですがSheet1の2行目(2,1) D1はx、yは(1,5)ですがSheet1の3行目(3,1) ・・ 視察により行の割り出しは 3=INT(D1/2)+1のようです。 次のSheet2の行のことも考えて、試行錯誤して、最終に行き着く結果は =INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+1+COLUMN()/2),1) ーーー 行事の列は Sheet2の A1は =INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+1+COLUMN()/2),2) C1、E1,G1,I1,K1,K1をCTRLを押しながらクリックする。 そしてCTRL+Vで貼り付け。 普通のように右にフィルハンドルを引っ張る方法は通用しない。 ーー 行事列は B1は =INDEX(Sheet1!$A$1:$B$100,INT((COLUMN()-1)/2)+1,(ROW()+1)) これをコピーし、日付の場合と同じく、B1,D1、F1、H1、J1、L1、M1を 、CTRLキーを押しつつクリックして、B1の式を貼り付ける。 結果 4/1(月) 行事1 4/2(火) 行事2 4/3(水) 行事3 4/4(木) 行事4 4/5(金) 行事5 4/6(土) 行事6 4/7(日) 行事7 横方向はこれでうまく行く。 ==== 問題は Sheet1の第2行以下の場合だが Sheet2のA2は(2,1)で取ってくるのはSheet1の(8,1) その8は 理屈から((2-1)*7+1)である。 上記の第1行目の式で行の部分を変えるのはそう変える。 列は日付だからずっと1である。 したがって。=INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+1+COLUMN()/2),1) 飛び飛び列へ貼り付けで 4/8(月) 4/9(火) 4/10(水) 4/11(木) 4/12(金) 4/13(土) 4/14(日) ーー 行事は =INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+COLUMN()/2),2) 飛び飛び列へ貼り付けで 4/1(月) 行事1 4/2(火) 行事2 4/3(水) 行事3 4/4(木) 行事4 4/5(金) 行事5 4/6(土) 行事6 4/7(日) 行事7 4/8(月) 行事8 4/9(火) 行事9 4/10(水) 行事10 4/11(木) 行事11 4/12(金) 行事12 4/13(土) 行事13 4/14(日) 行事14 以下略。月中の日付を完成するには A1セルの式を完成し、 C1-M1 C2-M2 C3-M3 C4-M4 C5-M5  間での飛び飛びセルまたは列をCTRLを押しながら指定して CTRL+V 行事も同じ要領。 ーーーー 以上は思考過程に沿って説明したのでごたごたした。結論は 例データ 4/1(月) 行事1 4/2(火) 行事2 4/3(水) 行事3 4/4(木) 行事4 4/5(金) 行事5 4/6(土) 行事6 4/7(日) 行事7 4/8(月) 行事8 4/9(火) 行事9 ・・・ 4/26(月) 行事26 4/27(月) 行事27 4/28(月) 行事28 4/29(月) 行事29 4/30(月) 行事30 A1に式 =INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+1+COLUMN()/2),1) これを日付のセルをCTRLを押しながら範囲指定(注)してCTRL+V B1の式 =INDEX(Sheet1!$A$1:$B$100,INT((ROW()-1)*7+COLUMN()/2),2) これを行事のセルをCTRLを押しながら範囲指定してCTRL+V 結果 4/1(月) 行事1 4/2(火) 行事2 4/3(水) 行事3 4/4(木) 行事4 4/5(金) 行事5 4/6(土) 行事6 4/7(日) 行事7 4/8(月) 行事8 4/9(火) 行事9 4/10(水) 行事10 4/11(木) 行事11 4/12(金) 行事12 4/13(土) 行事13 4/14(日) 行事14 4/15(月) 行事15 4/16(月) 行事16 4/17(月) 行事17 4/18(月) 行事18 4/19(月) 行事19 4/20(月) 行事20 4/21(月) 行事21 4/22(月) 行事22 4/23(月) 行事23 4/24(月) 行事24 4/25(月) 行事25 4/26(月) 行事26 4/27(月) 行事27 4/28(月) 行事28 4/29(月) 行事29 4/30(月) 行事30 0 0 0 0 0 0 0 0 0 0 上記0の処理とか 月末日超えの処理は複雑になるので略。 ーー 最後に本課題は、VBA向きの課題だと言って置きます。 (注)1つ1つのセルでなく、A2:A5、C1:C5、E1:E5、G1:G5、I1:I5、K1:K5、M1:M5 はマウスでドラッグできるので、やや作業が軽減される。 もちろんCTRLを押したままやる。 行事も同じ。

r-inarin
質問者

お礼

細かな説明までつけていただきありがとうございました。

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

こんにちは! 一例ですが・・・ Sheet1のA1からデータがあり、Sheet2に表示させるとします。 Sheet2のA1セルに =IF(COLUMN()>14,"",IF(MOD(COLUMN(),2)=1,INDEX(Sheet1!$A$1:$A$100,(COLUMN()+1)/2+(ROW()-1)*7),INDEX(Sheet1!$B$1:$B$100,COLUMN()/2+(ROW()-1)*7))) という数式をいれて、列方向と行方向にオートフィルでコピーしてみてください。 希望に近い形になると思います。 尚、数式はSheet1の100行目までデータがある場合としていますので データ量によって範囲指定はアレンジしてみてください。 そして、エラー処理はしていません。 ただし、今回の質問は、たまたま4/1が月曜日だったので Sheet2のA1セルから並び替えをすれば良かったですが、 必ず月曜日をSheet2のA1セルに表示させたい場合は 数式にもう一工夫必要になると思います。 以上、参考になれば幸いですが、 他に良い方法があれば軽く読み流してくださいね。m(__)m

r-inarin
質問者

お礼

回答ありがとうございました。 O列以降は表示されないのがいいですね。 ありがとうございました。 A1に月曜日がこないときは、4月1日からではなくて、月曜日になる日からはじめたいと思います。(ダミーです) 私にはそれで十分です。 式の意味はよくわかりせんがありがとうございました。

  • popuplt
  • ベストアンサー率38% (31/81)
回答No.1

入力がSheet1にあるとして 別シートで [A1]=INDEX(Sheet1!$A$1:$B$365,INT((ROW()-1)*7+(COLUMN()+1)/2),2-MOD(COLUMN(),2)) 右と下へコピペ。

r-inarin
質問者

お礼

質問して30分で回答いただきありがとうございます。 できました!! 式の意味はすっきりとはわかりせんが、 これからじっくり考えます。 日付の表示形式が変わってしまいましたが、特に問題ないです。 セルの書式設定で、すぐに元に戻すことができましたので。 ありがとうございました。

関連するQ&A

専門家に質問してみよう