プロが教えるわが家の防犯対策術!

お世話になります。
前回、QNo.1647957にて質問した者です。

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

3件も回答していただおかげで、無事日誌を作成することができました。
助かりました。

そこで今回の質問なのですが、
前回教えていただいたマクロとは逆に、
1日のA1に入力した数値が、2日のB1にも入力され(飛び)、
2日以降も次の日のB1に入力されるように、
sheet1のひながたで、31日分作成したいのです。
マクロを教えてください。(関数でもかまいません)

どうかよろしくお願いします。

A 回答 (5件)

こんばんは。



詳しい状況が変われば、またコードも変わるかもしれません。例えば、このマクロが、それぞれのシートが同じような動作をする場合は、登録するモジュールの場所とコードが少し替わります。

単にA1だけではないような気がしますが、とりあえず、A1だけにします。

'<これは、Sheet1のモジュールで他に入れられません。>

Private Sub Worksheet_Change(ByVal Target As Range)
'その範囲がA1だけでしたら、Rangeの中は、A1だけにします。
If Not Intersect(Target, Range("A1")) Is Nothing Then
 For i = 2 To 30
  'それぞれのシートの入力したセルの右隣に入力する
  Worksheets(i).Range(Target.Offset(, 1).Address(0, 0)).Value = Target.Value
 Next i
End If
End Sub


Sheet1 から、Sheet31 まで、順に並んでいるとします。
もし、そうでない場合は、Worksheets("Sheet1"&i).Range... となります。

次に、入力先は、A1 の場合は、B1となる、つまり、右となりのセルを考えられています。
ですから、入力範囲が、Range("A1:A30") でしたら、A2は、B2 になり、A3 は、B3... というようになっていきます。

Sheet1 のA1 に何か入力してみて、他のシートがどうなっているか試してみてください。
    • good
    • 0
この回答へのお礼

こんばんわ。
前回に続き、ご回答ありがとうございます。


ところで、
今回せっかく作成していただいたマクロなんですが、
標準モジュールにこのままペーストして、実行可能ですよねぇ。。。?
先程から、試しているのですが、うまくいかないんです。

初心者につき、お許しを。

ご教授願います。

お礼日時:2005/09/17 22:58

こんばんは。

Wendy02です。

>標準モジュールにこのままペーストして、実行可能ですよねぇ。。。?

# <これは、Sheet1のモジュールで他に入れられません。>

と書いてあるとおりなんですね。
該当するシートタブを右クリックして、「コードの表示」とかあるはずです。それをクリックすると現れる場所です。

なお、テンプレートと今回のご質問とは、直接関係がないと思います。確かに、毎月使うものに対しては、テンプレートを使ったほうがよいとは思いますが、それは書かれていません。

式自体を入れるのでしたら、前回のものを直したら、マクロでも可能ですが、そうでないのなら、

シートタブのSheet2を選択して、シフトを押しながら、Sheet31を選択すれば、全部が作業グループになりますから、それで、Sheet2をアクティブにして、

 Sheet2のB1のところで、
 =Sheet1!A1

でEnterをすれば、全部、同じ式が入ります。

それで解決するかと思います。
    • good
    • 0
この回答へのお礼

失礼しました。あせっているせいか、見落としておりました。

今回の作業も、雛型が複雑な様式であることや、
膨大な量かつ、締め切り間近という理由で、
Wendy02さまに作成していただいたマクロが無いと、
先に進まないものでした。
アドレス等いじりながら何とかクリアできました。
(テンプレートはこれから先のお話です。すみません)


で、マクロ成功しました!お蔭様で、朝までに仕上げられそう?です。

何とお礼を申し上げていいのやら、今回も本当に助かりました。
ありがとうございました。

またご指導お願いしますね!

お礼日時:2005/09/18 00:24

#3の方と同意見です。



マクロで仕事をさせるのは爽快感がありますし、のちのちのVBAの勉強にもなるのでしょうが、仕事としては単純な部類に入ると思います。

テンプレートとして31日分あるブックを作成し、登録しておけば、次から気楽にその月分を作成できます。テンプレートが上書きされて消えることもありませんし、便利な機能だと思いますよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

おっしゃる通りですが、私事で繁忙期に入り、かつ膨大な量なので、どうしてもマクロで済ませたかったのです。

時間に余裕のあるときに、そのようにさせていただきます。
すみません。

また、アドバイスよろしくお願いします。

お礼日時:2005/09/17 23:20

前回のご質問も拝見していたのですが、、



予め31日分のシートを作ったテンプレートを
用意した方が良いのではないかと思います。

31日分リンクを張るのは大変かもしれません
が、とは言え30回程度の作業ですし、一度
テンプレートにしてしまえば、次からこの
作業はなくなります。

テンプレートを作るには、雛形を *.xlt
形式で保存します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほで、”苦あれば楽あり”ですね。
おっしゃる通りだと思います。

試してみます。

お礼日時:2005/09/17 23:07

"1日"というシートを作っておきます。


下記を実行します。
Sub test07()
n = "1日"
For i = 2 To 3
Sheets(n).Copy After:=Sheets(n)
ActiveSheet.Name = StrConv(i, vbWide) & "日"
n = "=" & n & "!A1"
ActiveSheet.Range("b1").Formula = n
n = ActiveSheet.Name
Next i
End Sub
(3日でとめてます。実際は31までか、月末日まで繰り返してください。)
シート1日のA1にaaaを入れる。2日のB1にaaaが入る。
シート2日のA1にbbbを入れる。2日のB1にbbbが入る。
こんなのでよいでしょうか。
    • good
    • 0
この回答へのお礼

早々のご回答ありがとうございました。

早速実行してみましたが、残念ながら

実行時エラー9が表示されてしまいます。
「インデックスが有効範囲内にありません」
ということのいみがわからないのですが、
できれば教えていただけないでしょうか?

色々といじってみます。

お礼日時:2005/09/17 22:29

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