新規会員登録における電話番号登録必須化のお知らせ

お世話になります。

機械等の運転日誌を作成しております。

sheet1を1日、sheet2を2日とします。

2日のB1に入力した数値が、1日のA1にも入力され(飛び)、
3日以降も前日のA1に入力されるように、
sheet1のひながたで、31日分作成したいのです。

一枚ずつ1日(A1=sheet2!B1)、2日(A1=sheet3!B1)...
という方法で31日分作成すると、かなり時間がかかってしまいます。

助けてください!

よろしくお願いします!

教えて!goo グレード

A 回答 (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
    • good
    • 1
この回答へのお礼

ご回答有り難う御座いました。

早速実行してみましたところ、、、

私の望んでいたものは、これです!

VBって、いや、Wendy02さますごいですねえ。

感激しました。

またご指導のほど、よろしくお願いします!

お礼日時:2005/09/14 23:49

こんにちは。

maruru01です。

以下のような方法があります。
まずは準備。
メニューの[挿入]→[名前]→[定義]で名前定義のダイアログを表示します。
そこで、
[名前]:適当な名前(仮に「次シート名」とします。)
[参照範囲]:「=INDEX(GET.WORKBOOK(1),GET.DOCUMENT(87)+1)&LEFT(NOW(),0)」
と設定して[OK]します。
そうしたら「1日」のシートのA1に、

=INDIRECT("'"&次シート名&"'!B1")

と入力します。
なお、この時2枚目のシートが何もないとエラーになりますが、構いません。
後は、このシートをコピーして増やせばいいです。
ちなみに、一番後ろ(シートタブが一番右)のシートには当然この数式は入れません。
もし既にシートを作ってある場合は、シートタブで先頭から一番後ろ(右)のシートを除いたシートまでをまとめて選択して、A1に上記の数式を入力します。

なお、シート位置で判断していますので、シート名を変更しても自動的に対応します。
    • good
    • 0
この回答へのお礼

ご回答有り難う御座いました。

maruru01さまの方法でもうまくできました。

感謝いたします。

また教えてくださいませ。

お礼日時:2005/09/14 23:43

Sheet1が1日,Sheet2が2日の日誌であるとします。


また、こういうモノにはたいていどこかに日付が書いてあるものな
ので,そのセルををthis_dayと仮定します。中身は年月なしの日付
だけを表す1から始まる整数とします。

=indirect("Sheet"&this_day+1&"!B1")
が、翌日のシートのB1の内容を持ってくる式になります。
    • good
    • 0
この回答へのお礼

できました!

早々にご回答有り難う御座いました。
本当に困っていたので助かりました。

お礼日時:2005/09/14 23:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング