• ベストアンサー

エクセル 表の表示について

どなたかお知恵をお貸しいただけたら幸いです。 現在エクセルの表で、日付と買ったものが並んでいるのですが、その表示を一括で変更できたらと思っています。 A列 4/1  りんご B   4/1  みかん C   4/1  いちご D   4/2  みかん E   4/2  メロン F   4/3  いちご 上記の表があり、これを下記のような表に簡単に直すやり方が見つけられずに悩んでおります。 A列  4/1     4/2      4/3 B  りんご    みかん   いちご  C  みかん   メロン D  いちご どなたかよろしくお願いいたします。

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

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

こんばんは! ご質問の配置(列番号)はこちらで勝手に行としてやってみました。 一例です。 ↓の画像のようにSheet1のデータをSheet2に表示するようにしています。 日付は両Sheetともシリアル値が入っていて、Sheet2の日付はあらかじめ入力してあるものとします。 Sheet2のA2セルに =IF(COUNTIF(Sheet1!$A:$A,A$1)<ROW(A1),"",INDEX(Sheet1!$B$1:$B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=A$1,ROW($A$1:$A$1000)),ROW(A1)))) これは配列数式になってしまいますので、この画面からA2セルにコピー&ペーストする場合は A2セルに貼り付け後、 数式バー内で一度クリック → 編集可能になりますので Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると画像のような感じになります。 尚、ご質問通りに1行目・列方向に日付が並んでいるのであれば当然数式も変わってきます。m(__)m

tasuke23
質問者

お礼

迅速なご回答ありがとうございました。 配列を使用する方法も含め、まったく考え付きませんでした。 じっくり理解したいと思います。 本当にありがとうございました。

その他の回答 (2)

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

質問は初めてするのかな・ A列 4/1  りんご B   4/1  みかん C   4/1  いちご D   4/2  みかん E   4/2  メロン F   4/3  いちご とはシートの見た目に従って A列・・・B列・・・C列・・・・ 4/1   4/1  4/1 りんご  みかん いちご と書いて質問するべきです。 またエクセルのシートの使い方として、データは、縦方向に流すやり方の入力が標準です。 今は(2007以後)列数も大幅に増えたとはいえ、行数より、列数のほうが少なく、制約が多い。 エクセルの特有のリストとかテーブルの考えも縦方向にデータを入力する前提です。 ーー さて本件表の組み換えでしょう。 例データ 4月1日 4月1日 4月1日 りんご みかん いちご 30 20 10 a b d コピー G1とかを指定して 形式を選択して貼り付け 行と列を入れ替える OK で 4月1日 りんご 30 a 4月1日 みかん 20 b 4月1日 いちご 10 d のようになる。(参考) ーーーーー 例データ 4月1日 りんご 4月1日 みかん 4月1日 いちご 4月2日 みかん 4月2日 メロン 4月3日 いちご とあるものを同じ日の分は同行に順次同行別列に並べたい (こういう風に質問文に主旨を文章でも書くこと) 関数は並べ替えは苦手です(抜き出しと同じことなので)(式が拭くざるになる) VBAなら素直に蚊mmが得るとおり出来て、複雑でもない) 条件付抜き出しと同じく、色んなやり方があるが、作業列を使うimogasi方式でやってみる。 例データ C列は  作業列です(その左側5桁は日付シリアル値というもの。それに同一日付内の連番数字を加えている) A列・・・・・・B列・・・・・・C列  4月1日 りんご 406341 4月1日 みかん 406342 4月1日 いちご 406343 4月2日 メロン 406351 4月2日 みかん 406352 4月2日 メロン 406353 4月3日 いちご 406361 4月3日 りんご 406362 ーー D1:D3 (何処でも良いが式が少し変わる) 4月1日 4月2日 4月3日 と入れて E1に =IF(COUNTIF($A$1:$A$100,$D1)<COLUMN()-4,"",INDEX($B$1:$B$100,MATCH($D1&(COLUMN()-4),$C$1:$C$100,0),1)) と入れて右方向に式を複写 E1:H1の式を下方向に式複写 結果 4月1日 りんご みかん いちご 4月2日 メロン みかん メロン 4月3日 いちご りんご #N/Aを出さないために、IF(COUNTIF($A$1:$A$100,$D1)<COLUMN()-4,"",の部分をかぶせている。 ーー これでも式が複雑と感じるかもしれないが、INDEXとMATCH関数の2つの組み合わせが基本である。 他の回答ではもっと複雑な式が出ているが、こういうものは初心者には理屈が判るのも難しかろう。 エクセル関数でやろうとすることに無理があるのだ。

tasuke23
質問者

お礼

回答ありがとうございます。   A列・・・B列・・・C列・・・・ 1  4/1   りんご 2  4/1   みかん 3  4/1   イチゴ の質問間違えでしたが、参考にさせて頂きます。 ありがとうございます。

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

列と行が違っているようにも見られますので元のデータは次のようになっているとします。 シート1のA1セルには日付などの項目名が有り、A2セルから下方には4/1,4/1,4/1,4/2・・・のように日付が入力されているとします。B2セルから下方にはりんご、みかん、いちご…と入力されているとします。 そこで作業列としてC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,ROUNDDOWN(MAX(C$1:C1),-8)+100000000,ROUNDDOWN(MAX(C$1:C1),-8))+A2*1000+COUNTIF(A$2:A2,A2)) この式は日付も含んだ情報を含むために多少複雑な式になっています。 そこでお望みの表をシート2に作るとしたら例えばシート2のA2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)=1,IF(COLUMN(A1)>MAX(Sheet1!$C:$C)/100000000,"",INDEX(Sheet1!$A:$A,MATCH((COLUMN(A1)+1)*100000000,Sheet1!$C:$C,1))),IF(OR(A$2="",COUNTIF(Sheet1!$C:$C,COLUMN(A1)*100000000+A$2*1000+ROW(A1)-1)=0),"",INDEX(Sheet1!$B:$B,MATCH(COLUMN(A1)*100000000+A$2*1000+ROW(A1)-1,Sheet1!$C:$C,0)))) なお2行目には日付のシリアル値が表示されますので書式の表示形式で日付にします。 これで日付を含めた書き換えが完成します。

tasuke23
質問者

お礼

回答ありがとうございます。 かなり難しい式になるのですね。 かなり参考になりました。

関連するQ&A