[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シート間のコピペのマクロ。列をひとつずらし、ペーストする場所は同じになるようなマクロを作りたいです。』(ぺもと)
マクロ VBAについて質問です。
毎月のデータを入力するためにマクロを作成したいと思っています。
シート2のデータからシート1に貼り付けていく作業です。
1つの月のデータをコピペするマクロは作成できました(以下記載。できればこれもすっきりさせたいです…。)
Sub Macro1()
'
' Macro1 Macro
'
'
Sheets("入力").Select
Range("C5:C23").Select
Selection.Copy
Sheets("住宅資金").Select
Range("D5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range("C28:C46").Select
Selection.Copy
Sheets("住宅資金").Select
Range("J5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range("O5:O23").Select
Selection.Copy
Sheets("住宅資金").Select
Range("F5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range("O28:O46").Select
Selection.Copy
Sheets("住宅資金").Select
Range("L5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("目標").Select
Range("B4:B22").Select
Selection.Copy
Sheets("住宅資金").Select
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("目標").Select
Range("B27:B45").Select
Selection.Copy
Sheets("住宅資金").Select
Range("I5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("前年同期").Select
Range("C5:C23").Select
Selection.Copy
Sheets("住宅資金").Select
Range("H5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("前年同期").Select
Range("C28:C46").Select
Selection.Copy
Sheets("住宅資金").Select
Range("N5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
毎月行いたいので、1月〜12月それぞれのマクロを作るしかないのかな…と行き詰っています。
以下私の理想です。
データは各月分あるので、翌月のデータは隣の列にあります。なので、ボタンを押すだけで、右隣の列のデータを貼り付けられるマクロの方法が知りたいです。
貼り付ける先は同じセルです。
どうか知恵をお貸しくださいませ。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
一つのコピーは
Sheets("入力").Range("C5:C23").Copy
Sheets("住宅資金").Range("D5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
のようにかけます。
ずらしたいのがコピー元か、コピー先かわかりませんが、コピー元を m 列ずらすのであればであれば
m = Month(Date) - 1
Sheets("入力").Range("C5:C23").Offset(0, m).Copy
Sheets("住宅資金").Range("D5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
のようにかけます。
mを入力で指定するか、月々変更するような修正でできないでしょうか。 (Mook) 2015/04/20(月) 10:23
ずらしたいのはコピー元です。
やはり、1つ1つの月ごとに別のマクロを作成するしかないですか?
1つのマクロ(ボタン使用)で12か月分できるような夢のようなものはないですか?
(1回押したら次の月のマクロに変わる…みたいな……。)
(ぺもと) 2015/04/20(月) 10:47
Sub Macro1()
Dim wkm As Integer
Sheets("住宅資金").Select
wkm = Range("B2")
Sheets("入力").Select
Range(Cells(5, wkm + 2), Cells(23, wkm + 2)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("D5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range(Cells(28, wkm + 2), Cells(46, wkm + 2)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("J5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range(Cells(5, wkm + 14), Cells(23, wkm + 14)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("F5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("入力").Select
Range(Cells(28, wkm + 14), Cells(46, wkm + 14)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("L5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("目標").Select
Range(Cells(4, wkm + 1), Cells(22, wkm + 1)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("C5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("目標").Select
Range(Cells(27, wkm + 1), Cells(45, wkm + 1)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("I5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("前年同期").Select
Range(Cells(5, wkm + 2), Cells(23, wkm + 2)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("H5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("前年同期").Select
Range(Cells(28, wkm + 2), Cells(46, wkm + 2)).Select
Selection.Copy
Sheets("住宅資金").Select
Range("N5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
(コヨーテひな) 2015/04/20(月) 10:52
コヨーテひなさんのコードを簡略化してみました(勝手にすいません)
Sub Macro1()
Dim wkm As Long
wkm = Sheets("住宅資金").Range("B2")
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, wkm + 14), .Cells(23, wkm + 14)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, wkm + 14), .Cells(46, wkm + 14)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub (se_9) 2015/04/20(月) 11:14
簡略化、ありがとうございます。
本当に勉強になります。
(コヨーテひな) 2015/04/20(月) 11:18
"例えば、住宅資金シートのB2セルに月を入力"というのは、
入力シートのC4セルに月を入力してもよいのでしょうか?
ちなみに、月別のデータは4月始まりの3月終わりという並びになってます。
お二人が教えてくださったマクロを実行しましたが、「型が一致しません」と出ます。
どこを直したらよいでしょうか…何度もすみません。
(ぺもと) 2015/04/20(月) 12:03
Sub Macro1()
Dim wkm As Long
Dim wkn As Long
Dim wkt(12) As Variant
wkn = Sheets("入力").Range("C4")
'この部分の設定の仕方がよくわかりません
wkt(1) = 10
wkt(2) = 11
wkt(3) = 12
wkt(4) = 1
wkt(5) = 2
wkt(6) = 3
wkt(7) = 4
wkt(8) = 5
wkt(9) = 6
wkt(10) = 7
wkt(11) = 8
wkt(12) = 9
wkm = wkt(wkn)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, wkm + 14), .Cells(23, wkm + 14)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, wkm + 14), .Cells(46, wkm + 14)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub (コヨーテひな) 2015/04/20(月) 15:05
Sub Macro1()
Dim wkm As Long
Dim wkn As Long
Dim wkt As Variant
wkn = Sheets("入力").Range("C4")
wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
wkm = wkt(wkn)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, wkm + 14), .Cells(23, wkm + 14)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, wkm + 14), .Cells(46, wkm + 14)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub
(コヨーテひな) 2015/04/20(月) 16:20
また質問なのですが…
このマクロで、どうやったら次の月のデータになるのでしょうか…?
ボタンを作って押すんでしょうか?
うーん…かなりの初心者ですみません。
(ぺもと) 2015/04/20(月) 17:34
常に4月を基準に、ボタンを押すたびに一月づつ進むように
するのであれば出来ます。
(コヨーテひな) 2015/04/21(火) 08:30
入力シートのC4セルに処理した月を保管しています。
Sub auto_open()
Dim wkm As Long
Dim wkn As Long
Dim wkt As Variant
Dim dt As Date
Dim mi As Integer
dt = Date
mi = Month(dt)
wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
wkm = wkt(mi)
Sheets("入力").Range("C4") = wkm
Call Macro1(wkm)
End Sub
Sub Next_Month()
wkm = Sheets("入力").Range("C4") + 1
If wkm = 13 Then
wkm = 1
End If
Sheets("入力").Range("C4") = wkm
Call Macro1(wkm)
End Sub
Sub Macro1(ByVal wkm As Long)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, wkm + 14), .Cells(23, wkm + 14)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, wkm + 14), .Cells(46, wkm + 14)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub (コヨーテひな) 2015/04/21(火) 09:59
それと…
入力シートのO5:O23から、住宅資金のF5へのコピペと、
入力シートのO28:O46から、住宅資金のL5へのコピペは、月が変わっても固定にしたいです。
可能でしょうか。何度も何度もすみません。ありがとうございます。
(ぺもと) 2015/04/21(火) 10:52
すみません、意味不明な質問でした><無視してください。
そして、追加で質問です。
処理した月を保管するセルが1から始まるのですが、4から始まることは可能ですか?
(ぺもと) 2015/04/21(火) 11:11
Sub auto_open()
Dim wkm As Long
Dim wkn As Long
Dim wkt As Variant
Dim wks As Variant
Dim dt As Date
Dim mi As Integer
dt = Date
mi = Month(dt)
wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
wks = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
wkm = wkt(mi)
Call Macro1(wkm)
Sheets("入力").Range("C4") = wks(mi)
End Sub
Sub Next_Month()
Dim wks As Variant
Dim dt As Date
Dim mi As Integer
wks = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
If Sheets("入力").Range("C4") = 12 Then
wkm = 10
Else
wkm = wks(Sheets("入力").Range("C4") + 1)
End If
Call Macro1(wkm)
wks = Array(0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3)
Sheets("入力").Range("C4") = wks(wkm)
End Sub
Sub Macro1(ByVal wkm As Long)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, 15), .Cells(23, 15)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, 15), .Cells(46, 15)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub (コヨーテひな) 2015/04/21(火) 11:43
大変お世話になりました。
(ぺもと) 2015/04/21(火) 11:57
Sub auto_open()
Dim wkm As Long
Dim wkn As Long
Dim wkt As Variant
Dim wks As Variant
Dim dt As Date
Dim mi As Integer
dt = Date
mi = Month(dt)
wkt = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
wks = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
wkm = wkt(mi)
Call Macro1(wkm)
Sheets("住宅資金").Range("D2") = wks(mi)
End Sub
Sub Next_Month()
Dim wks As Variant
Dim dt As Date
Dim mi As Integer
wks = Array(0, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9)
If Sheets("住宅資金").Range("D2") = 12 Then
wkm = 10
Else
wkm = wks(Sheets("住宅資金").Range("D2") + 1)
End If
Call Macro1(wkm)
wks = Array(0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3)
Sheets("住宅資金").Range("D2") = wks(wkm)
End Sub
Sub Macro1(ByVal wkm As Long)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, 15), .Cells(23, 15)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, 15), .Cells(46, 15)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
End With
End Sub
これに加えて、
・入力シートのT5:T23を、住宅資金シートのO5:O23に貼り付け
・入力シートのT28:T46を、住宅資金シートのP5:P23に貼り付け
・前年同期シートのT5:T23を、住宅資金シートのQ5:Q23に貼り付け
いずれも、前回教えていただいたものと同様に、ボタンを押すごとにコピー元が4月〜3月の順番で1つずつ移動し、貼付先は変わらない
というマクロを作成したいと考えています。
努力をしてみましたが手立てが見つからず、再びこちらでご助言をいただきたいと思いました次第でございます。
よろしくお願いいたします。
(ぺもと) 2015/04/23(木) 10:05
Sub Macro1(ByVal wkm As Long)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range(.Cells(5, 15), .Cells(23, 15)).Value
Sheets("住宅資金").Range("L5:L23").Value = .Range(.Cells(28, 15), .Cells(46, 15)).Value
Sheets("住宅資金").Range("O5:O23").Value = .Range(.Cells(5, wkm + 19), .Cells(23, wkm + 19)).Value
Sheets("住宅資金").Range("P5:P23").Value = .Range(.Cells(28, wkm + 19), .Cells(46, wkm + 19)).Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range(.Cells(4, wkm + 1), .Cells(22, wkm + 1)).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range(.Cells(27, wkm + 1), .Cells(45, wkm + 1)).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range(.Cells(5, wkm + 2), .Cells(23, wkm + 2)).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range(.Cells(28, wkm + 2), .Cells(46, wkm + 2)).Value
Sheets("住宅資金").Range("Q5:Q23").Value = .Range(.Cells(5, wkm + 19), .Cells(23, wkm + 19)).Value
End With
End Sub (コヨーテひな) 2015/04/23(木) 13:00
こんにちは 横から失礼します。
基本的には、Sub Macro1(ByVal wkm As Long) の該当のシートのところにコードを追加すればいいのですが 転記コードの右辺が、(ペもと)さんにとって、ちょっと難しいですかね? 今後の追加のためにも、(Mook) 2015/04/20(月) 10:23 で Mookさんがアドバイスされて記述にしておいたほうが なにかとわかりやすいと思います。
ちなみに、現在の Macro1 を、その形にすると以下のようになるはずです。 これを、じ〜〜っと見つめていると、今回追加する3つのブロックの転記コードは、どこにどう書けばいいか おわかりになると思いますよ。
Sub Macro1(ByVal wkm As Long)
With Sheets("入力")
Sheets("住宅資金").Range("D5:D23").Value = .Range("C5:C23").Offset(, wkm - 1).Value
Sheets("住宅資金").Range("J5:J23").Value = .Range("C28:C46").Offset(, wkm - 1).Value
Sheets("住宅資金").Range("F5:F23").Value = .Range("O5:O23").Value
Sheets("住宅資金").Range("L5:L23").Value = .Range("O28:O46").Value
End With
With Sheets("目標")
Sheets("住宅資金").Range("C5:C23").Value = .Range("B4:B22").Offset(, wkm - 1).Value
Sheets("住宅資金").Range("I5:I23").Value = .Range("B27:B45").Offset(, wkm - 1).Value
End With
With Sheets("前年同期")
Sheets("住宅資金").Range("H5:H23").Value = .Range("C5:C23").Offset(, wkm - 1).Value
Sheets("住宅資金").Range("N5:N23").Value = .Range("C28:C46").Offset(, wkm - 1).Value
End With
End Sub
(β) 2015/04/23(木) 14:29
(Mook) 2015/04/20(月) 10:23 で Mookさんがアドバイスされた内容がよく理解できませんでしたが、
βさんのコードを見て解りました。
どうもありがとうございました。
こちらのほうが今後も修正しやすいです。
(コヨーテひな) 2015/04/23(木) 14:56
本当にありがとうございます。
(ぺもと) 2015/04/23(木) 15:11
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.