Sub CからSまで数式をコピー()
'
' 数式をコピー
'
'
' 再表示 Macro
'(前準備)
'
Application.ScreenUpdating = False
マクロ動作中画面が動かないようにする
この式が無いと画面があっちに行ったりこっちに行ったりします
Columns("B:AH").Select
B列からAH列まで選択する
Selection.EntireColumn.Hidden = False
列で非表示になっている部分も表示させる
日本にいるときはタイ関係のお金は関係ないので
非表示にしてたりしているのでとりあえず全表示にする
Range("B1").Activate
B1を選択する
Selection.End(xlDown).Select
上で選択したB1の下で入力されている最終位置に移動
'日付書いてある最終セルを選択
ここからはちょっと難しい
Dimというのは「宣言」らしい。
Offset(0, 0)は選んだ位置のこと
Offset(1, 0)なら選んだ位置から下に1下がり、横には動かない
-1なら上に1上がる。
Offset(0, 1)は縦の位置はそのままで横に(右にひとつ)動く
-1なら左に1動く
Dim Range1, 行1 As Range
Set 行1 = Range("C1")
Set Range1 = Range("C1").End(xlDown)
Set 行1 = Range1.Offset(0, 0)
ここはC1のセルで入力してある最終列を行1と宣言している
Dim Range2, 行2 As Range
Set Range2 = Range("C1").End(xlDown)
Set 行2 = Range2.Offset(0, 17)
ここはC1入力最終行のセルから右に17を行2と宣言している
Range(行1, 行2).Select
上で宣言した行1と行2を選択する
この行1、行2間は式が入っている場所
'数式をコピー
Selection.Copy
行1から2まで選択されているのでそこをコピーする
'数式を貼付るセルを選択
Dim Range3, 行3 As Range
Set 行3 = Range1.Offset(1, 0)
Range1というのはSet
Range1 = Range("C1").End(xlDown) で書いてあるが
C1の入力最終行のことなのでそれのOffset(1,
0)とは下に1行で行は動かない
そのセルを行3と宣言している
Dim Range4, 行4 As Range
Set 行4 = Range1.Offset(1, 0)
同じく行4(行3と同じセル位置)を宣言している
もしかしたらSet 行4 =
Range1.Offset(0, 17)でもいいかもしれない
次の作業はペーストなので一つのセルだけでいいのでSet 行4 = Range1.Offset(1, 0)とした
Range(行3, 行4).Select
C1の入力最終行の一つ下のセルを選択する
ActiveSheet.Paste
行3行4にペースト(貼付け)
これで入力してある最終行の一つ下に式が貼付けられた
Range("B2").Select
作業が終わったのでセルをB2に行くようにした
Application.ScreenUpdating = True
Application.CutCopyMode = False
コピーペーストでセルがモヤモヤ(情報が入った状態)なのでそれを開放する式
ここまでで日付以外のマクロが終了
以下は作成中にいろいろやった覚え
文とか式の前に「’」を入れて無効化している
End Sub
整理したマクロ式
Sub CからSまで数式をコピー()
'
' 数式をコピー
' 再表示 Macro
'(前準備)
Application.ScreenUpdating
= False
Columns("B:AH").Select
Selection.EntireColumn.Hidden = False
Range("B1").Activate
Selection.End(xlDown).Select
'日付書いてある最終セルを選択
Dim Range1, 行1 As Range
Set 行1 = Range("C1")
Set Range1 = Range("C1").End(xlDown)
Set 行1 = Range1.Offset(0, 0)
Dim Range2, 行2 As Range
Set Range2 = Range("C1").End(xlDown)
Set 行2 = Range2.Offset(0, 17)
'数式をコピー
Selection.Copy
'数式を貼付るセルを選択
Dim Range3, 行3 As Range
Set 行3 =
Range1.Offset(1, 0)
Dim Range4, 行4 As Range
Set 行4 = Range1.Offset(1, 0)
Range(行3, 行4).Select
ActiveSheet.Paste
Range("B2").Select
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
わずか23行程の式ですがかかった時間は相当のものでした。
次回は財布の表を動かす式の予定です。
0 件のコメント:
コメントを投稿