2017年2月4日土曜日

前回のエクセルのマクロ式

自分の覚えとしてマクロ式の説明を以下のようにします。

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
    34にペースト(貼付け)
  
   これで入力してある最終行の一つ下に式が貼付けられた

   Range("B2").Select
   作業が終わったのでセルをB2に行くようにした
  
   
  Application.ScreenUpdating = True
    Application.CutCopyMode = False
 コピーペーストでセルがモヤモヤ(情報が入った状態)なのでそれを開放する式

ここまでで日付以外のマクロが終了
  

以下は作成中にいろいろやった覚え
文とか式の前に「」を入れて無効化している
   '日付最後のセルを選択
  '  Dim Range5, 5 As Range
   'Set 5 = Range1.Offset(0, 0)

  
    'Dim Range6, 6 As Range
   'Set 6 = Range1.Offset(0, 0)
   ' Range(5, 6).Select
  
   '新しい日付を書く
   ' Dim Range7, 7 As Range
   'Set 7 = Range1.Offset(1, 0)
  
   'Dim Range8, 8 As Range
   'Set 8 = Range1.Offset(2, 0)
  
    'Selection.AutoFill Destination:=Range7, Type:=xlFillDefault

  
  
   'Selection.AutoFill Destination:=Range(6), Type:=xlFillDefault
    'Range(5, 7).Select
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 件のコメント:

コメントを投稿

海外(タイ)から楽天市場で購入が面倒くさい状態です。

楽天の期間限定ポイントが11月20日に切れるのがあったので 楽天市場で買い物をすることにした。 日本にいれば街のお店で使えるのだが 日本不在ではそれができないので楽天市場で買い物をすることにした。 日本に行くまでの期間にポイントが切れるのが760ポイントあるので それを処理するこ...