• ベストアンサー

シート間での連動反映

誰か!!助けて下さい。。 現在、経理用の表を作成しています。 ひとつのブックを【月単位】として、1日~31日までをシートで・・・というようなものです。。シート名は半角で『7.30』という形式で入れています。 各シート、表の一番下のセルに『本日の現金残高』が計算表示されるようにしました。 そのセルの値をそのまま、自動的に次シートにある『前日現金残高』セルに(例:6/1〈1シート目〉→6/2〈2シート目〉→6/3・・・・)というように連動して反映〈表示〉させたいのです。。。。 ちなみに全シート、形式は全く同じです。なので両セルとも、当たり前ですがシート上で同じ位置にあります。 それからセルですが・・・ 3のI~Qまでを結合して一つのセルとして、ここが『前日現金残高』、つまりここに前日分を反映させたいです。 前日分は53のI~Qまでの結合セルで、ここが『本日の現金残高』になりま やり方がわからなくて、その部分だけ毎日コピぺしていたのですが、これだと、途中入力ミスや追加があった場合にまた一からやりなおしになってしまって困っています。 ちなみに雛形から毎月日数分コピーして使っていますが、もし上記が解決された場合、毎月1シート目(○月1日分)の『前日現金残高』セルは 前月bookの最終シートの『本日現金残高』と同じにしなくてはなりません・・・。ここは最悪、手入力でも構いませんが、こういう事を考慮に入れると、毎月のBOOK内のシート作りはどの様にしたらよいでしょうか??ただ、シートのコピペだけでは上手くいかない気がするのですが・・・・・・。 分かりにくい説明と思いますが、どうかよろしくお願いします。

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

  • ベストアンサー
  • Yosha
  • ベストアンサー率59% (172/287)
回答No.3

yoshaです。 >別ブックからの『='[2007_01.xls]1:31'!$I$9:$K$9』の書き込みが上手くいきませんでした 誠に申し訳ない。「$I$9:$K$9」はミスです。長々と書きましたが、リンクを張る手法でした。もうそれが解っていらっしゃるので、私の回答は不要となります。 ただ、『=if('7:01'!I53="","-",'7:01'!I53』は、『本日の現金残高』の欄が空欄でも“0”でも『前日現金残高』は“0”表示となりますので、それを区別するための手法です。空欄の場合は、“-”or“---”、“0”の場合は“0”と表示されます。 毎月のブックの作成は手作業では大変です。マクロを使えば即座に出来ます。 参考までに、質問の中の項目を満たすマクロを作ってみました。 新しいブックをマクロを有効として開き、Alt + F11 を押すと、Visual Basic Editorが開きます。「挿入(I)」→「標準モジュール(M)」をクリックすると、一番上に「Option Explicit」の記述がある場所が現れます。ここに、以下のSub ~End Subまでの文(コードといいます)をコピペしてください。 Visual Basic Editor 中の右向き▲か、Worksheetの上部の右向き▲のいずれかをクリックします。 出てきたマクロのダイアログボックスの「CreateNewSheet」を選択状態にして(既になっている)「実行」ボタンをクリックします。 出てきたダイアログボックスに作成したい月の数字を入力して、「OK」をクリックすれば、その月の日数に応じたシートが作成されます。ただ、リンクするブック名が判りませんので1日目のシートの“I3”には式が入っていません。そちらでリンクを張ってください。 Sub CreateNewSheet() Dim nMonth As Integer Dim nDay As Integer Dim nD As Integer Dim n As Integer Dim s As String Dim sSheetName As String Dim sMonth As String Dim sw As String Const nDays = "0103050708101203060911" sw = Chr(34) sMonth = InputBox("作成する月を入力してください") sMonth = Right("0" & sMonth, 2) If sMonth = 0 Then Exit Sub n = InStr(nDays, sMonth) Select Case n Case 0 nD = 29 Case Is < 15 nD = 31 Case Else nD = 30 End Select Sheets.Add Count:=nD - Worksheets.Count For nDay = 1 To nD sSheetName = sMonth & "." & Right("0" & nDay, 2) Sheets(nDay).Select Sheets(nDay).Name = sSheetName Range("I3:Q3").Merge Range("I3").HorizontalAlignment = xlCenter Range("I53:Q53").Merge Range("I53").HorizontalAlignment = xlCenter If nDay < nD Then s = "=if('" & sSheetName & "'!I53=" s = s & sw & sw & "," & sw & "---" s = s & sw & ",'" & sSheetName & "'!I53)" Worksheets(nDay + 1).Range("I3").Formula = s End If Next End Sub

aya5454
質問者

お礼

yoshaさん、ここまでして頂いて本当にありがとうございました。 大変勉強になりました、そして助かりました。

その他の回答 (2)

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.2

>全シート、形式は全く同じです ということは、『本日の現金残高』『前日現金残高』セルの位置は決まっているのでしょう? でしたら、そのセルの位置をはっきりと示して質問する方が、より正しく回答できます。 >3のI~Qまでを結合して一つのセルとして >前日分は53のI~Qまでの結合セル この表現、解り難いですね。“I53”~“Q53”までを結合するのですか? 何となく全体は見えてきますので、推測しながら回答します。 また、マクロなどは使えないと判断して、なるだけ簡単な方法を考えてみます。 毎月定型のシートを使うようなので、『雛型ブック』を作り、その中で、決まった位置関係でのデータのやり取りは、受け取る方のセルに『式』を入力するようにしればコピペをしないで済みます。『雛型ブック』を呼び出し、新しい名前を付けて保存すれば、毎月のシートのコピペは不要となります。もしよければ、31日用、30日用、29日用、28日用あるいは1月~12月用の各雛型ブックを作れば作業はまだ楽になります。 当然、各雛型の各シートには、タイトル、罫線なども予め書き込んでおきます。セルのマージ(結合)も行っておきます。 例えば、“2007_01”“2007_02”というブックがあり、各ブックには、“1:01”“1:02”~というシートがあり、各シートの“I3”~“Q3”、“I53”~“Q53”のセルがそれぞれマージしているとします。 そして“I3~Q3”のセルには『前日現金残高』、“I53~Q53”のセルには『本日の現金残高』が入るものとします。 “1:02”~“1:31”シートの“I3(~Q3)”セルに『='1:01'!I53』~『='1:30'!I53』という『式』を書き込みます。これで、各シートの“I53(~Q53)”『本日の現金残高』に数字が入ると“I3(~Q3)”『前日現金残高』に自動的にその値が書き込まれます。この式では、『前日現金残高』に数字が入っていないときには『本日の現金残高』に“0”が書き込まれます。“0”の代わりに“-”が良いのであれば、『=if('7:01'!I53="","-",'7:01'!I53』を書き込みます。 “2007_02”ブック“2:01”シートの“I3~Q3”の『前月現金残高』セルには、『='[2007_01.xls]1:31'!$I$9:$K$9』または、『=if('[2007_01.xls]1:31'!$I$9:$K$9="","-",'[2007_01.xls]1:31'!$I$9:$K$9』を書き込みます。 『式』中のセル、シート、ブック名などに変更があれば、適宜それに合うように値を変えてください。

aya5454
質問者

お礼

Yoshaさん、ご回答ありがとうございます。大変助かりました~!! なんとか、31日分(1ヵ月分)の雛形ブックできました。 解りずらい書き方だった部分、で申し訳ありませんでした。 全体はご推測どおりでした。 ただ、『='1:01'!I53』~『='1:30'!I53』の各シートへの書き込みは出来たのですが、別ブックからの『='[2007_01.xls]1:31'!$I$9:$K$9』の書き込みが上手くいきませんでした。。。結局リンク貼り付けをしたのですが、この式の9の表すものはなんですか??ここはI53セルを意味している場所だと思うのですが・・・・すみません初歩的な質問かもしれませんが、よろしかったら教えていただけると嬉しいです。

aya5454
質問者

補足

すみません。。。ちょっと気になって・・・ >『雛型ブック』を作り、その中で、決まった位置関係でのデータのや>り取りは、受け取る方のセルに『式』を入力するようにしればコピペ>をしないで済みます。『雛型ブック』を呼び出し、新しい名前を付け>て保存すれば、毎月のシートのコピペは不要となります。 この場合、雛形の式に『='1:01'!I53』~『='1:30'!I53』と書き込むとすると、コピペは不要になりますが、とすると(各月用の雛形を作っていない場合)新しいブックを作る時にする作業は、別名保存とシート名の変更作業だけでしょうか?ちなみにシート名を書き換えれば、自動的に式中のシート名も変わりますよね・・・・

  • Bickyon
  • ベストアンサー率41% (42/101)
回答No.1

前日分のシートのI53のセルをコピーして、本日分のシートのI3のセルのところで、 右クリックし、形式を選択して貼り付けを選んで、リンク貼り付けを行ってみてください。 すると、「='9.02'!$I$53」というようになったと思います。 意味は9月2日のシートのI53セルの値を取得するです。 別ブックから取得する場合は、「=[ExcelBookName.xls]SheetName!$列$行」という形式になります。 この方法だとシートをコピーして行ったときに、手作業でシート名を修正しなければいけませんので、可能ならばシート名に月は入れないようにしたほうが良いです。

aya5454
質問者

お礼

Bickyonさん!!ありがとうございました! リンク貼り、目からウロコでした。。。。 ブック内も、別ブックでも使えるんですね♪ 月を入れないほうがいいというのも大変参考になりました。。 シート名「1~31」の雛形ブックを作り、それを別名保存していって、 とりあえず、毎月1シートの別ブックから取得するところだけは、毎回雛形にリンクの貼り付け作業をする事にしました。 この方法でよいのですよね? 本当にどうもありがとうございました。。。

関連するQ&A

  • エクセル内の数式を反映させながらシートをコピーする方法

    エクセルのシートのコピーについて教えて下さい。 1日1シートで表計算できる表を作るよう指示されました。 シート内には、累計を出すように(前日までの合計)+(本日の数字) の数式が入っています。 具体的に書きますと、セルA1に本日の数字を入力。 セルB1に(前日までの合計)+(本日の数字)と数式を入れました。 数式でいうと、例えばシート3のセルB1には(シート2:B1)+A1 シート4のセルB1には(シート3:B1)+A1 という具合にセルB1には前日までの合計を反映させるように、常に 前シートの累計をリンクさせています。 シートをコピーしては、セルB1の数式「前シート」部分を修正して こつこつシート7まで作ったのですが、30日分作って欲しいと 言われて困っています。 時間がたくさんあればこつこつ続けて完成させるのですが、就業上の 問題があってこれにずっと時間を割くことができません。 説明が長くなりましたが、ここで教えて頂きたいのです! 数式を反映させながら、シートをどんどんコピーする方法は ありませんでしょうか? 今、シート7まで作ったので、まんまコピーして7枚ずつ増やす 事は簡単ですが、累計部分の(前シート:B1)シートのリンクが 勝手には直ってくれません。 コピーすると同時に、前シートのリンクも直ってくれる方法が あればぜひ教えて下さい。 よろしくお願いします。

  • 【エクセル】シート間で反映させたいのですが、結合されたセルがあるため困っています。

    お世話になります。 あまりエクセルに詳しくないのですが、データをエクセルで表にまとめなくてはならなくなりました。 データは複数シートでまとめています。 Sheet1にすべてのもととなる名簿をまとめ、このシートを更新すると他のシートにも自動的に反映するようにしたいと考えています。 その方法として、「=Sheet1!A1」などと入力して反映させようとしていたのですが、複数あるシートのうち何枚かは反映させたい部分がセルの結合されており、上記のようにするとひとつ飛ばしに反映されてしまいます。 例: 【sheet1】 1 Aさん 2 Bさん 3 Cさん 4 Dさん 5 Eさん 6 Fさん 【sheet2】 1   Aさん 2 3   Cさん 4 5   Eさん 6 わかりにくいですが、このような感じです。 sheet1を無理やりセルの結合させることも考えたのですが、私以外の者も表を扱うこととなるためなるべくシンプルにしたいと思い断念しました…。 セルの結合はそのままで、Sheet1に入力した内容を他のシートに反映させる方法はありますでしょうか? 似たような質問も検索してみたのですが、関数?など複雑なものが多く、よく理解できませんでした。(平均値や標準偏差など簡単な計算はしたことがあるのですが、複雑なものは未経験です。) わがままを言って申し訳ございません。 勉強不足でありご迷惑おかけしますが、何卒よろしくお願いいたします。

  • Excel シートを追加したら別ブックへ自動的に反映したい

    具体的には、追加したシート名を別ブックの一覧表の特定セルへ自動反映させたのです。シートが追加される度に、一覧表へ反映されていく・・・というのが希望です。 関数で可能でしょうか?マクロはよく分からないのですが・・・。お知恵をお貸し下さい!よろしくお願い致します。

  • セルの反映

    Sheet1のA1からE5を結合し、文章を入力しました。 結合したセルに入力してある文章をを例えばSheet2のセルに反映するにはどうしたらいいでしょうか? よろしくお願いいたします。

  • Excel2003で最初のシートからいくつかのシートへ順番で反映させるには?

    Excel初心者なのですが、どなたか分かりやすく説明をお願い致します。 シート1のA1セルに名前、B1セルに生年月日、C1セルに性別、D1セルに身長、E1セルに体重などと横に個人データを入力していき、A2、A3と名前の順で100名分のデータを主で管理するとして、シート2にはその個人表として違う書式のものにA1からE1までのデータが反映するものを作り、シート3にはA2からE2、シート4にはA3からE3と同じ名前の順で100名分反映させたいのですがどなたか良い方法を教えて下さい。m(_ _)m

  • EXCEL2003で自動計算に関して

    1ヶ月の日報を作成しており、下記の件に関して教えていただけないでしょうか。 8月21日から9月20日までの一ヶ月分のWorksheetをコピー作成し、日報を作成している中で、前日の最終残金セルの金額が、当日の前日残高のところに反映したいのですが、関数はどのようにすればよいのでしょうか。  前日経費残高(A33)| B33    のセルに   一つ前のsheet内にある         本日残高(k33) | L33  の値を自動で転記したいのです。 そして、当時の売上、経費を計上して、B33にプラスして、本日残高を計算したい。     また、1つのbookに複数のsheetをコピーして、各shieetを日付順に並べ替えることはできるのでしょうか。または、1ヶ月31日分のを作っておいて、コピーすればよいのですが、 sheet名に月数を入れた場合、一括置換で返られるのでしょうか。

  • Excel シートを追加したら別ブックへ自動的に反映したい

    具体的には、追加するシート名が、別ブックの一覧表の特定のセルに自動反映されるというのが希望です。 マクロとか、ほどんど分かりません。関数で可能でしょうか?よろしくお願い致します。

  • エクセル縦行のコピーを他の複数シートにコピペしたい

    毎月、勤怠表をエクセルで作成していています。シートをコピーして別の月の勤怠表を作りたいのですが、 縦行のA1セルに”日にち”、B1 セルに”曜日”が入っていています。 これらをコピーして、20枚くらいの別のシートを指定して、CTRL+c.vでコピペするのですが、反映されるのは次のシート1枚のみです。  他の位置にある、セルのコピーは全て反映されるのですが、この2行だけできません。 教えてください!

  • シートの中の結果を自動的に違うシートに反映させたいんですが・・・

    エクセルを使いこなせていない者です。教えてください・・・ 同じBook内で、シート1で表計算をしていて出た結果をシート2に出したいのですが・・・出た結果だけなら、コピーして貼り付けたらいいんですが、それだけでなく・・・途中計算しなおして、結果がかわったものもそのまますぐに反映できるようにしたいんですが、可能ですか?よろしくお願いします。

  • エクセルで同じブック内のシートの変更を一気に全てのシートに反映させる方法。

     タイトル通りです。 エクセルの同じブック内で、ひとつのシートの変更を もうひとつのシートの同じセルに反映する方法は分かりましたが 他の全てのシートに、一気に反映させる方法がありましたら教えて下さい。

専門家に質問してみよう