- ベストアンサー
EXCELで同一フォーマットのシートを31日分簡単に作成する方法は?
お世話になります。 機械等の運転日誌を作成しております。 sheet1を1日、sheet2を2日とします。 2日のB1に入力した数値が、1日のA1にも入力され(飛び)、 3日以降も前日のA1に入力されるように、 sheet1のひながたで、31日分作成したいのです。 一枚ずつ1日(A1=sheet2!B1)、2日(A1=sheet3!B1)... という方法で31日分作成すると、かなり時間がかかってしまいます。 助けてください! よろしくお願いします!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 =INDIRECT("Sheet"&REPLACE(CELL("filename",A1),1,FIND("eet",CELL("filename",A1))+2,"")-1&"!A1") このようにして、Indirect 関数を使う方法もありますが、再計算関数ですので、後々、面倒なことになります。ですから、以下のようなマクロを作ってみました。 使い方: 最初に、該当するシートまたは、全部のシートを選択します。 次に、式を入力するセルにセルポインターを置きます。 Alt+F8 で、登録された、FormulaEnterという名前のマクロを探します。 式の中に入るセルの場所を聞いてきますので、それをマウスで選択します。 どのように入るか、例が出てきますので、良ければ、OK を押してください。 全部のシートを選択しても、最初のシートには、式は入力はされません。 マクロの登録 '<標準モジュールがベターですが、どこでもよいです。> Sub FormulaEnter() '前のシートを参照して、式を作るマクロ Dim myAdd As String, ActivecellAdd As String Dim mySheets As Sheets Dim ShIndex As Integer Dim ws As Worksheet Dim msg As String Dim myRng As Range Set mySheets = ActiveWindow.SelectedSheets ActivecellAdd = ActiveCell.Address(0, 0, 1) If mySheets.Count = 1 Then MsgBox "複数のシートを選択してください。": Exit Sub On Error GoTo ErrHandler Set myRng = Application.InputBox("現在のシートで、参照するセル位置を指定してください。", Type:=8) myAdd = myRng.Address(0, 0) If ActiveSheet.Index = 1 Then ShIndex = 2 Else ShIndex = 1 msg = "=" & mySheets(ShIndex).Previous.Name & "!" & myAdd If MsgBox("例:" & ActivecellAdd & "の位置に、以下のように入力されます。" & vbCrLf & vbCrLf & _ msg & vbCrLf & vbCrLf & "よろしいですか?(Sheet1に該当するシートには入力されません。)", vbOKCancel) = vbOK Then For Each ws In mySheets If ws.Index <> 1 Then ws.Range(ActivecellAdd).FormulaLocal = "=" & ws.Previous.Name & "!" & myAdd End If Next ws End If ErrHandler: mySheets(1).Select Set mySheets = Nothing End Sub
その他の回答 (2)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 以下のような方法があります。 まずは準備。 メニューの[挿入]→[名前]→[定義]で名前定義のダイアログを表示します。 そこで、 [名前]:適当な名前(仮に「次シート名」とします。) [参照範囲]:「=INDEX(GET.WORKBOOK(1),GET.DOCUMENT(87)+1)&LEFT(NOW(),0)」 と設定して[OK]します。 そうしたら「1日」のシートのA1に、 =INDIRECT("'"&次シート名&"'!B1") と入力します。 なお、この時2枚目のシートが何もないとエラーになりますが、構いません。 後は、このシートをコピーして増やせばいいです。 ちなみに、一番後ろ(シートタブが一番右)のシートには当然この数式は入れません。 もし既にシートを作ってある場合は、シートタブで先頭から一番後ろ(右)のシートを除いたシートまでをまとめて選択して、A1に上記の数式を入力します。 なお、シート位置で判断していますので、シート名を変更しても自動的に対応します。
お礼
ご回答有り難う御座いました。 maruru01さまの方法でもうまくできました。 感謝いたします。 また教えてくださいませ。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
Sheet1が1日,Sheet2が2日の日誌であるとします。 また、こういうモノにはたいていどこかに日付が書いてあるものな ので,そのセルををthis_dayと仮定します。中身は年月なしの日付 だけを表す1から始まる整数とします。 =indirect("Sheet"&this_day+1&"!B1") が、翌日のシートのB1の内容を持ってくる式になります。
お礼
できました! 早々にご回答有り難う御座いました。 本当に困っていたので助かりました。
お礼
ご回答有り難う御座いました。 早速実行してみましたところ、、、 私の望んでいたものは、これです! VBって、いや、Wendy02さますごいですねえ。 感激しました。 またご指導のほど、よろしくお願いします!