[[20141212200103]] 『一行飛ばしのマクロ』(白川郷) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『一行飛ばしのマクロ』(白川郷)

 下記の表は、A列に納品日、B列に所要日数を。C列に一行飛ばしで着工日を求める式を
 C3 C5 C7 C9に入力しています。C2 C4 C6 C8は計算に直接関係の無い型番を表してい
 ます。この一行飛ばしのマクロをご指導お願いいたします。
 正解はC3=12/1  C5=12/5   C7=12/6    C9=12/6です。

      A        B         C    
 1  納品日   所要日数    着工日             
 2 12/24       23         aaa      
 3                        =A2-C2 
 4  12/26       21         bbb                    
 5                        =A4-C4
 6  12/27       21         ccc     
 7                        =A6-C6
 8  12/28       22         ddd         
 9                        =A8-C8

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 C3に「=A2-C2」と入力しコピー
 ↓
 C5〜必要なだけ下方向にセル選択
 ↓
 「検索と選択」で「ジャンプ」選択
 ↓
 セル選択
 ↓
 「空白セル」選択
 ↓
  Ctrl+V
 で空白セルに式がコピーされます。

(カリーニン) 2014/12/12(金) 21:29


 マクロなら↓のような感じです。
 数式はマクロの自動記録が参考になると思います。
 あとは変数を組み込みます。

 Sub test()
  Dim i As Integer
   For i = 3 To 9 Step 2
    ActiveSheet.Cells(i, 3).FormulaR1C1 = "=R[-1]C[-2]-R[-1]C[-1]"
   Next i
 End Sub

(カリーニン) 2014/12/12(金) 21:55


 >=A2-C2

 ↓ですよね??

 =A2-B2
(カリーニン) 2014/12/12(金) 22:58

 2014/12/12(金) 21:29の手作業をマクロ化するとこんな感じです。

Sub test()

  With Range("C3")
   .FormulaR1C1 = "=R[-1]C[-2]-R[-1]C[-1]"
   .Copy
   .Resize(10).SpecialCells(xlCellTypeBlanks).Select
    ActiveSheet.Paste
   .Select
  End With
  Application.CutCopyMode = False
End Sub
(カリーニン) 2014/12/12(金) 23:04

 カリーニンさん、ありがとうございました。
 =A2-C2ではなく、A2-B2が正解です。すみませんでした。

 今までR1C1形式をやったことがなかったので調べてみました。
 2014/12/12(金) 23:04にいただいた回答は、 2014/12/12(金) 21:55 よりも処理時間数倍早く、これで
 うまくいきました。ありがとうございました。

(白川郷) 2014/12/13(土) 00:15


 違いを感じるほどということは大量のデータですか?
 でしたらループで配列に格納し一括転記、という方法もあります。
 今回は一行置きですので元々入っているデータも配列に格納し転記
 し直しています。

 大量のデータでは試してませんが、2014/12/12(金) 21:55のコード
 よりは速くなっているとおもいます。

 Sub test()
  Dim i As Integer
  Dim Ary() As Variant
  Dim kairw As Integer
  Dim lastrw As Long
   kairw = 2 '開始行/提示のデータだと「2」
   lastrw = 8 '最終行/提示のデータだと9-1で「8」
   For i = kairw To lastrw Step 2
    ReDim Preserve Ary(i - 1)
    Ary(i - 1) = "=R[-1]C[-2]-R[-1]C[-1]"
    Ary(i - 2) = ActiveSheet.Cells(i, 3).Value
   Next i
   ActiveSheet.Cells(kairw, 3).Resize(lastrw - kairw + 1).Formula = WorksheetFunction.Transpose(Ary)
   Erase Ary
 End Sub
(カリーニン) 2014/12/13(土) 08:51

 こういうこと?

 Sub test()
    On Error Resume Next
    Range("c1", Range("c" & Rows.Count).End(xlUp)(2)).SpecialCells(4).Formula = _
    "=r[-1]c[-2]-r[-1]c[-1]"
    On Error GoTo 0
End Sub
(seiya) 2014/12/13(土) 09:42

 すばらすぃ
(カリーニン) 2014/12/13(土) 09:48

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.