- ベストアンサー
エクセルのシートについて
エクセルのシート1に一覧表を作り、1行・2行・・・と、各行に対して、1行目の内容をシート2へ、2行目の内容をシート3へ、各行が変わるにつれ同様に違うシートへ行の内容を入力していきたいのですが、わかりません。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
なぜ模擬的な実例を書かないのですか。 質問では シート1 第1行目 大山 一郎 38歳 ・・ 第2行目 木下 健二 25歳 ・・ ーー シート2 第1行目 大山 一郎 38歳 ・・ シート3 第1行目 木下 健二 25歳 ・・ らしい(こう書けば判りやすいだろうと思う) ただこういうのでなくA列はシートの標題ですか(回答者の内容から) 模擬実例を挙げないから良くわからないのではないですか。 -- 補足では シート1のA1・B1・C1・・・の各セルの項目を、シート2をシート1一覧表の1行の印刷用のペーパーとして、シート1の各セルの内容をシート2の各項目 と列のことのような表現になっていて良くわからない。 ーー それはそれとして結論として シートをまたいで式を複写してSheetの名前の部分を規則正しく変化させることはできないと思う。 VBAでやるしかないかと思う。 ーー 実際のシート名の末尾が連続数字になっているのかについても何も記述が無い。それを前提にした回答が出ているようだが。 ーーー Sheet1 A2 a A3 b A4 c A5 d Sheet2のA1に2 A2に=INDIRECT("sheet1!A"&A1) Sheet3のA1に3 A2に=INDIRECT("sheet1!A"&A1) Sheet4のA1に4 A2に=INDIRECT("sheet1!A"&A1) とすると式の型は一定で A2の値は Sheet2 a Sheet3 b Sheet4 c ・・・ となる。 シー名の後尾数字により、番号が取れるなら(例Sheet2,Sheet3、・・のように) ユーザー関数を定義して Function sn() sn = Val(Mid(ActiveSheet.Name, 6, Len(ActiveSheet.Name) - 5)) End Function そして各シートのA1なりに =INDIRECT("sheet1!A"&sn()) を各々入れると各シートには私の例ではa,b,c,d が入る。 しかしこういう凝ったことになるのでシート数が10-20なら直接入れるほうが良いのではと思う。
その他の回答 (4)
#2です。書き忘れたことがありました。 式1の結果は、最初は(Bookを初めて作成したとき)は見えません。 これは、BOOKを一旦保存しない限りBOOKのファイル名が決まらないからです。 CELL("filename")関数は、ファイル名のフルパスとシート名を返す関数なので、ファイル名が確定しないと表示でません。 なので、最初のとき、「あれ、表示されない」と悩まないでくださいね。 あと、シート名を取得する数式1を1行目の各列の数式に埋め込んでしまう手もありますが、それぞれの数式が長く複雑化するのを覚悟することになります。
お礼
ありがとうございました。
#2です。なさりたいことが解ってきました。 Sheet2以降の各シートの列表題に当たるものを、Sheet1の各行に入れておきたい。 具体的には、 Sheet1の1行目はSheet2の1行目に表示させ、Sheet2の列表題にする。 Sheet1の2行目はSheet3の1行目に表示させ、Sheet3の列表題にする。 これを自動化したい。ということなのでしょう。 かつ、シートを追加しても、どれかのシート(Sheet1以外)をコピーすれば自動的にいけるようにしておきたいというのでしょうね。 Sheet1の1行目から、Sheet2以降の列表題が入っているとして、 シート名の最後の文字列が必ず1づつ増加する数字であるなら、 =MID(CELL("filename",$A$1),FIND("]",CELL("filename",$A$1))+6,20) ....式1 で、シート名の最後の数字が文字列として取り出せます。(2桁でも3桁でも) これを各シートのA1に置いたとして、 各シートの2行目の各列に、 =OFFFSET(Sheet1!$A$1,$A$1+1,column()-1,1,1) .....式2 とします。 ただ、これだと1行目が空いてしまい、見栄えが悪いので、 1.1行目の高さを0にしてしまう。 2.下の方の目立たない行に式1を移して、式2を1行目に置く。 この場合式2の第二引き数の「$A$1+1」の「$A$1」の部分を 移した先のセル番地に「$」マーク付きで変更する。 のどれかを適用します。
お礼
自身の見識を深めて、もっと勉強したいと思います。 ありがとうございました。
> 違うシートへ行の内容を入力していきたいのですが 違うシートであろうが同じシートであろうが、数式では他のセルを更新させる機能はありません。 #1さんの言われるように、予め元となるセルを参照する数式を入力しておく必要があります。 つまり、常に受け身でしか働かないということです。 ご質問の内容の通りに、他のセルに対してアクションを行おうとするなら、マクロ(VBA)を使わなければなりいません。 余計なお世話とお思いでしょうが、ご質問のような書き方をされていると、数式での解法を欲しくても、 VBAのコードを回答されてしまうこともあり得ます。 老婆心ながら...
お礼
つたない質問方法で失礼致しました。ありがとうございました。
補足
つたない質問方法で失礼致しました。 質問させて頂いた内容についてですが、改めて記述させて下さい。 シート1を一覧表として、シート1のA1・B1・C1・・・の各セルの項目を、シート2をシート1一覧表の1行の印刷用のペーパーとして、シート1の各セルの内容をシート2の各項目へ。 シート1の2行目の内容を、同様にシート3の各項目へ。という感じなんですが。 単にシート1の各行の項目を、1行めはシート2へ、2行目はシート3へ「=」していくしかないのでしょうか? また、シートを増やす都度、増やしたシートが、コピー元のシート1の行を参照するのではなく、シート1次の行を自動的に参照する方法はないのでしょうか?
>1行目の内容をシート2へ シート2に =Sheet1!A1 >2行目の内容をシート3へ シート3に =Sheet1!A2
お礼
ありがとうございました。
補足
つたない質問方法で失礼致しました。 質問させて頂いた内容についてですが、改めて記述させて下さい。 シート1を一覧表として、シート1のA1・B1・C1・・・の各セルの項目を、シート2をシート1一覧表の1行の印刷用のペーパーとして、シート1の各セルの内容をシート2の各項目へ。 シート1の2行目の内容を、同様にシート3の各項目へ。という感じなんですが。 単にシート1の各行の項目を、1行めはシート2へ、2行目はシート3へ「=」していくしかないのでしょうか? また、シートを増やす都度、増やしたシートが、コピー元のシート1の行を参照するのではなく、シート1次の行を自動的に参照する方法はないのでしょうか?
補足
ご指摘ありがとうございます。 言われるとおりだったかと思います。 sheet1 一行目 A1山田太郎 B125歳 C1東京都 D1企画部・・・ 二行目 A2花田一郎 B230歳 C2埼玉県 D2管理部・・・ 三行目 〃 〃 sheet2 A1山田太郎 A225歳 A3東京都 A4企画部 sheet3 A1花田一郎 A230歳 A3埼玉県 A4管理部 と、このようにsheet1の一行目に入力したものをsheet2・二行目をsheet3・三行目をsheet4へと、転記していきたいのです。 計算式などはsheet1以外には必要ありません。シート末尾への番号も必要ないです。 sheet1の行が100件であれば、sheet2からsheet101まで、100行分のsheetを用意して、 sheet2のA1へはsheet1!A1 sheet2のA2へはsheet1!B1と sheet3のAIへはsheet1!A2 sheet3のA2へはsheet1!B2と 1つずつ入力していくしかないのでしょうか? sheet1の各行を増やしていく都度50行目であれば、sheet51のA1へは、sheet1の50行目のA1を、sheet51のA2へはB1をと、sheet1の各行を自動的に、sheet2以降へと振り分けていきたいのです。 ところで、それに伴い、各行に対してのsheetを自動的にコピーしていくことまでは不可能ですよね? 補足の質問が遅くなりましたが、よろしくお願いします。