Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3414 / 13645 ツリー ←次へ | 前へ→

【62366】シートコピーとシート名の変更・前月テータ反映 かりん 09/7/14(火) 17:19 質問[未読]
【62367】Re:シートコピーとシート名の変更・前月テ... イブX 09/7/14(火) 17:34 発言[未読]
【62383】Re:シートコピーとシート名の変更・前月テ... つるりん 09/7/15(水) 18:28 回答[未読]
【62395】Re:シートコピーとシート名の変更・前月テ... かりん 09/7/16(木) 14:17 質問[未読]
【62396】Re:シートコピーとシート名の変更・前月テ... つるりん 09/7/16(木) 14:52 回答[未読]
【62400】Re:シートコピーとシート名の変更・前月テ... かりん 09/7/16(木) 17:11 お礼[未読]

【62366】シートコピーとシート名の変更・前月テー...
質問  かりん  - 09/7/14(火) 17:19 -

引用なし
パスワード
   WINDOWS XP エクセル2003 を使用しています。

「4月度」の名前を付けたシートをシートコピーして、「5月度」と名前を変更し、
4月度のセルE19の見積累計値を「5月度」のシートのセルE18に反映させるマクロを作成中です。
当月のシート(アクティブ)でマクロを実行することにより、
順次6月〜3月までシートが作成され、同時に前月累計も反映されるようにしたいのですが、
「 当月シリアル = DateValue(当月名)」 のところで「型が違います」というデバッグとなりうまく実行できません。
前月の見積り累計を求めるコードは検証できていますが、
シートコピーのコードと組み合わせての検証ができません。
どのようなコードにすればよいのか、ご教示いただければありがたいです。
よろしくお願い致します。
============================================================
Sub Macro1()
  
  Dim 見積累計, 当月名, 当月シリアル, 翌月名, 翌月シリアル
  当月名 = ActiveSheet.Name
  当月シリアル = DateValue(当月名)
  翌月シリアル = DateSerial(Year(当月シリアル), _
        Month(当月シリアル) + 1, Day(当月シリアル))
  翌月名 = Format(翌月シリアル, "m月度")

   
  見積累計 = Range("E19")
  Sheets("4月度").Copy After:=Sheets(1)
  ActiveSheet.Name = 翌月名
  Range("E18").FormulaR1C1 = 見積累計
 
  
End Sub
============================================================

【62367】Re:シートコピーとシート名の変更・前月...
発言  イブX  - 09/7/14(火) 17:34 -

引用なし
パスワード
   ヘルプから抜き出しただけですけど。

        ↓こんな感じになってますか?
=DATEVALUE("2008/8/22")
=DATEVALUE("22-AUG-2008")
=DATEVALUE("2008/02/23")
=DATEVALUE("5-JUL")

【62383】Re:シートコピーとシート名の変更・前月...
回答  つるりん  - 09/7/15(水) 18:28 -

引用なし
パスワード
   以下のようなのでどうでしょう?

Option Explicit

Sub try()
Dim shtNm As String
Dim newShtNm As String
Dim mySht As Worksheet

shtNm = ActiveSheet.Name
newShtNm = Val(shtNm) + 1
ActiveSheet.Copy after:=ActiveSheet
Set mySht = ActiveSheet
mySht.Name = newShtNm & "月度"
Worksheets("4月度").Range("e19").Copy mySht.Range("e18")
End Sub

【62395】Re:シートコピーとシート名の変更・前月...
質問  かりん  - 09/7/16(木) 14:17 -

引用なし
パスワード
   ▼イブxさん:
ご教示ありがとうございます。
シート名は文字列ですので、そのような表示になんとかしたいのですが・・。
順次4月から翌年3月まで変更するには、
DATEVALUEに置き換える必要があるのでは・・と思っています。


▼つるりん さん:

ご教示、ありがとうございます。

「12月」の次は「1月」と表示したいのです。
そこで、DateSerialを使う必要があるかと思い、

  Dim 見積累計, 当月名, 当月シリアル, 翌月名, 翌月シリアル
  当月名 = ActiveSheet.Name
  当月シリアル = DateValue(当月名)
  翌月シリアル = DateSerial(Year(当月シリアル), _
        Month(当月シリアル) + 1, Day(当月シリアル))
  翌月名 = Format(翌月シリアル, "m月度")

と考えてみたのですが・・・うまく行きませんでした・・・。

つるりんさんに教えていただいたコードですと、
「12月」の次からは「13月」、「14月」と表示されてしまいます。
また、「Worksheets("4月度").Range("e19").Copy mySht.Range("e18")」は、
翌々月以降からは、4月度のデータを基に最新のワークシートにコピーされてしまい、
例えば、7月度のシートの累計も、4月度の累計が反映されてしまいます。
前月の累計E19を、最新ワークシートのE18に反映させ、
当月の数値との合計を求めて、当月ワークシート累計E19とさせたいのですが・・。

せっかく、教えていただいたのに、申し訳ありません。

【62396】Re:シートコピーとシート名の変更・前月...
回答  つるりん  - 09/7/16(木) 14:52 -

引用なし
パスワード
   Sub try()
Dim shtNm As String
Dim newShtNm As String
Dim mySht As Worksheet
Dim i As Long

For i = 1 To 11
shtNm = ActiveSheet.Name
  If Val(shtNm) + 1 > 12 Then
    newShtNm = "1"
  Else
    newShtNm = Val(shtNm) + 1
  End If
  ActiveSheet.Copy after:=ActiveSheet
  Set mySht = ActiveSheet
  mySht.Name = newShtNm & "月度"
Next
End Sub

条件分岐で対応すればいいのでは?
ブックに4月度のシートのみがあるとして
上記を実行されれば3月度までのシートが追加されます。
データコピーの部分は入っていません。

【62400】Re:シートコピーとシート名の変更・前月...
お礼  かりん  - 09/7/16(木) 17:11 -

引用なし
パスワード
   ▼つるりん さん:

早速にありがとうございました。
一ヶ月ずつ、データを入力してから、
次月分を作りたかったので、
>For i = 1 To 11を削除させていただきましたところ、
うまくできました。
本当に助かりました。ありがとうございました。

色々な方法があるものだと・・
まだまだ勉強です。
これからもよろしくお願いいたします。

3414 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free