[[20171204155221]] 『VBA 計算の繰り返し』(なー) ページの最後に飛ぶ

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

 

『VBA 計算の繰り返し』(なー)

VBAで計算の繰り返し処理を行いたいです。

<シート1>

  │A │ B │ C │ D
1│10 │ 12 │ 13 │ 6
2│6  │ 4  │ 10 │ 7
3│18 │ 27 │ 10 │ 8
・│・ │ ・ │ ・ │ ・
・│・ │ ・ │ ・ │ ・
・│・ │ ・ │ ・ │ ・

といったように値が入っています。
A2〜Aaまでで、aはそのときによって変わるので、変数とします

次にシート2にて計算を行います。
シート2での計算は、
B2−A2
B3−A3
  ・
  ・
C2−B2
C3−B3
  ・
  ・
D2−C2
D3−C3
  ・
  ・
といったように値が入っているセル分の差分を出し、表示します。

この場合、すべての計算を終え、表示するまでの繰り返し処理はどのように記述したらよいのでしょうか?
空白セルが出たところで計算を終えるようにしたいです。

空白セルまでの繰り返しは、
n = Cells(Rows.Count, "A").End(xlUp).Row
で行えると聞いたのですが・・・

挑戦してはいますが何分VBA初心者なのでセルをRange("A2")みたいに特定しないような繰り返し処理に躓いています・・・

分かりにくくて申し訳ないですが教えてください。
 

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


シートが違うんでしたら
別にVBAじゃなくても
数式適当な所まで埋め込んどけば
いいと思いますが

基準セルがあると思います
>B2−A2

シート2のA2にはいるのですか?
(++) 2017/12/04(月) 16:22


 こんなの?
 Sub TST()
    Dim OUT_RANGE   As Range
    Dim ROW_CNT     As Integer
    Dim COLUMN_CNT  As Integer

    Set OUT_RANGE = Worksheets("Sheet2").Range("A1")

    With Worksheets("Sheet1")
        For COLUMN_CNT = 2 To 4
            For ROW_CNT = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
                OUT_RANGE.Value = .Cells(ROW_CNT, COLUMN_CNT) - .Cells(ROW_CNT, COLUMN_CNT - 1)
                Set OUT_RANGE = OUT_RANGE.Offset(1)
            Next
        Next
    End With
 End Sub

(ねむねむ) 2017/12/04(月) 16:33


 数式でやってみた。
 =IFERROR(INDEX(Sheet1!A:D,MOD(ROW(A1)-1,COUNTA(Sheet1!A:A))+1,INT((ROW(A1)-1)/COUNTA(Sheet1!A:A))+2)-INDEX(Sheet1!$A:$D,MOD(ROW(A1)-1,COUNTA(Sheet1!A:A))+1,INT((ROW(A1)-1)/COUNTA(Sheet1!A:A))+1),"")
 なお、VBAも式もSheet1のA1セルから値があるものとしてSheet2のA1セルから表示している。
(ねむねむ) 2017/12/04(月) 16:43

 おっとデータが数値なので
 =IFERROR(INDEX(Sheet1!A:D,MOD(ROW(A1)-1,COUNT(Sheet1!A:A))+1,INT((ROW(A1)-1)/COUNT(Sheet1!A:A))+2)-INDEX(Sheet1!$A:$D,MOD(ROW(A1)-1,COUNT(Sheet1!A:A))+1,INT((ROW(A1)-1)/COUNT(Sheet1!A:A))+1),"")
 でいいのか。
(ねむねむ) 2017/12/04(月) 16:53

コメント返信:

[ 一覧(最新更新順) ]


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