• ベストアンサー

Excel マクロ : シート名の変数化

すいません、「マクロの記録」を使用しての質問です。 以下のマクロを使用し「2007年9月」のシートから「2007年10月」のシートに、あるデータを移しています。 このあるデータというのが「2007年9月」の売掛残であり、「2007年10月」の前月繰越となるのですが、このままでは「2007年10月」にしか使用できません。 実はシートは2010年頃まで作成する予定であり「20○○年○月」というところを毎回入力しなおすのは大変ですので何かいい方法があればと思い質問しました。 ---------- Sub Macro8() Sheets("2007年9月").Select Range("G16").Select Selection.Copy Sheets("2007年10月").Select Range("D19").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D20").Select End Sub ---------- 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.5

そもそもの主旨が違うみたいでしたねw 以下ではどうでしょう? 表示中のシートのD19に対して、1つ前のシートのG16セルの値を入力するものです。 例の場合だと、「2007年10月」を表示した状態で実行すれば、「2007年9月」のG16の値を「2007年10月」のD19に入力します。 Sub Macro1() s1 = ActiveSheet.Index s2 = s1 - 1 Sheets(s1).Cells(19, 4).Value = Sheets(s2).Cells(16, 7) End Sub

fcb7arg9
質問者

お礼

ありがとうございます。分かりやすく明確にあらわせるものなんですね。助かりました。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

アクティブなシートから次のシートにデータを送る時に、 それぞれのシートをセットするサンプル。 Sub test() Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = ActiveSheet On Error Resume Next Set ws2 = Worksheets(ws1.Index + 1) On Error GoTo 0 If ws2 Is Nothing Then MsgBox "次のシートはありません" Exit Sub End If MsgBox ws2.Name End Sub 9月がアクティブなら、ws1が9月、ws2が10月となり、 Sheets("2007年9月").Select ⇒ ws1.Select と直せる。 もう一つ言うなら、 Sheets("2007年9月").Select Range("G16").Select Selection.Copy ⇒ ws1.Range("G16").Copy Sheets("2007年10月").Select Range("D19").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ⇒ ws2.Range("D19").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False でどうでしょう?

fcb7arg9
質問者

お礼

ありがとうございます。無駄なところを省いていけるように勉強しないといけないですね。。

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.3

以下VBのシート名を間違えてましたw Sub Macro1() s1 = "2007年9月" s2 = "2007年10月" Sheets(s2).Cells(19, 4).Value = Sheets(s1).Cells(16, 7) End Sub これで問題なく動くと思います。

  • qualheart
  • ベストアンサー率41% (1451/3486)
回答No.2

以下で良くありませんか? Sub Macro1() s1 = "Sheet1" s2 = "Sheet2" Sheets(s2).Cells(19, 4).Value = Sheets(s1).Cells(16, 7) End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

こんな感じでいかがでしょうか? Sub Macro8a() Dim dt1 As String Dim dt2 As String Dim DAY As Variant Do DAY = Application.InputBox("日付入力", "INPUT", Format(Date, "yyyy/mm/dd"), Type:=2) If DAY = False Then Exit Sub Loop While Not IsDate(DAY) dt1 = Format(DAY, "yyyy年m月") dt2 = Format(DateAdd("m", 1, DAY), "yyyy年m月") Sheets(dt1).Select Range("G16").Copy Sheets(dt2).Select Range("D19").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D20").Select End Sub

fcb7arg9
質問者

お礼

早速のご解答感謝しております。 参考になりました。ありがとうございます。 僕もマクロの勉強をしないといけないですね・・・。

関連するQ&A