- ベストアンサー
EXCEL(できればマクロ)で同一フォーマットのシートを31日分簡単に作成する方法は?
お世話になります。 前回、QNo.1647957にて質問した者です。 その内容は、 「sheet1を1日、sheet2を2日とします。 2日のB1に入力した数値が、1日のA1にも入力され(飛び)、 3日以降も前日のA1に入力されるように、 sheet1のひながたで、31日分作成したいのです。」 と、いうものでした。 3件も回答していただおかげで、無事日誌を作成することができました。 助かりました。 そこで今回の質問なのですが、 前回教えていただいたマクロとは逆に、 1日のA1に入力した数値が、2日のB1にも入力され(飛び)、 2日以降も次の日のB1に入力されるように、 sheet1のひながたで、31日分作成したいのです。 マクロを教えてください。(関数でもかまいません) どうかよろしくお願いします。
- みんなの回答 (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 に何か入力してみて、他のシートがどうなっているか試してみてください。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 >標準モジュールにこのままペーストして、実行可能ですよねぇ。。。? # <これは、Sheet1のモジュールで他に入れられません。> と書いてあるとおりなんですね。 該当するシートタブを右クリックして、「コードの表示」とかあるはずです。それをクリックすると現れる場所です。 なお、テンプレートと今回のご質問とは、直接関係がないと思います。確かに、毎月使うものに対しては、テンプレートを使ったほうがよいとは思いますが、それは書かれていません。 式自体を入れるのでしたら、前回のものを直したら、マクロでも可能ですが、そうでないのなら、 シートタブのSheet2を選択して、シフトを押しながら、Sheet31を選択すれば、全部が作業グループになりますから、それで、Sheet2をアクティブにして、 Sheet2のB1のところで、 =Sheet1!A1 でEnterをすれば、全部、同じ式が入ります。 それで解決するかと思います。
お礼
失礼しました。あせっているせいか、見落としておりました。 今回の作業も、雛型が複雑な様式であることや、 膨大な量かつ、締め切り間近という理由で、 Wendy02さまに作成していただいたマクロが無いと、 先に進まないものでした。 アドレス等いじりながら何とかクリアできました。 (テンプレートはこれから先のお話です。すみません) で、マクロ成功しました!お蔭様で、朝までに仕上げられそう?です。 何とお礼を申し上げていいのやら、今回も本当に助かりました。 ありがとうございました。 またご指導お願いしますね!
- prairie-gentian
- ベストアンサー率30% (39/128)
#3の方と同意見です。 マクロで仕事をさせるのは爽快感がありますし、のちのちのVBAの勉強にもなるのでしょうが、仕事としては単純な部類に入ると思います。 テンプレートとして31日分あるブックを作成し、登録しておけば、次から気楽にその月分を作成できます。テンプレートが上書きされて消えることもありませんし、便利な機能だと思いますよ。
お礼
ご回答ありがとうございます。 おっしゃる通りですが、私事で繁忙期に入り、かつ膨大な量なので、どうしてもマクロで済ませたかったのです。 時間に余裕のあるときに、そのようにさせていただきます。 すみません。 また、アドバイスよろしくお願いします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
前回のご質問も拝見していたのですが、、 予め31日分のシートを作ったテンプレートを 用意した方が良いのではないかと思います。 31日分リンクを張るのは大変かもしれません が、とは言え30回程度の作業ですし、一度 テンプレートにしてしまえば、次からこの 作業はなくなります。 テンプレートを作るには、雛形を *.xlt 形式で保存します。
お礼
ご回答ありがとうございます。 なるほで、”苦あれば楽あり”ですね。 おっしゃる通りだと思います。 試してみます。
- imogasi
- ベストアンサー率27% (4737/17069)
"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が入る。 こんなのでよいでしょうか。
お礼
早々のご回答ありがとうございました。 早速実行してみましたが、残念ながら 実行時エラー9が表示されてしまいます。 「インデックスが有効範囲内にありません」 ということのいみがわからないのですが、 できれば教えていただけないでしょうか? 色々といじってみます。
お礼
こんばんわ。 前回に続き、ご回答ありがとうございます。 ところで、 今回せっかく作成していただいたマクロなんですが、 標準モジュールにこのままペーストして、実行可能ですよねぇ。。。? 先程から、試しているのですが、うまくいかないんです。 初心者につき、お許しを。 ご教授願います。