各データの末尾セルの値を所定のセルに移動するには?

Question 75.3 Previous Next
集計ファイルについて質問します。
例えば 5件の場合、([1行目]は項目のタイトルが入ります。)
[A:H]までデータが入り、[I:J]の 2列は空白、[K]以降にデータが入ります。 (下図は回答者が質問文から具現化)

このとき、データ 1件につき[A:H]はデータが必ず入り、[I:J]の 2列は必ず空白で、[K]以降のデータ数はバラバラで、使う列数が定まっていません。
   1件目データ 使用列[K2,L2,M2,N2,O2]、   4件目データ 使用列[K5,L5,M5,N5,O5,P5]、
   2件目データ 使用列[K3,L3,M3,N3]、     5件目データ 使用列[K6,L6,M6,N6,O6]
   3件目データ 使用列[K4.L4,M4]
今回は 5件で例をあげましたが、毎回毎回データ件数は変わってきます。

やりたいことは、それぞれのデータの
最後セル最後から 2番目セルの内容を、空白である[I:J]の 2列に移動したいです。例えば 2行目ですと、N2:O2セルの値を I2:J2セルへ、3行目なら M3:N3 → I3:J3となります。
なぜ、このようにしたいかと言いますと、各行の末尾に税抜価格と消費税込価格があるからです。
どのようにしたら良いのでしょうか? よろしくお願いいたします。
Answer   Copyright (C) 2005.9.14 永井善王
セルの内容を移動させるコードは、切り取って貼り付けるだけですから、自動記録したりして分かってみえると思います。 よって、あなたが知りたいことは、
  1. データごとに変化する右端セルの列番号を取得する方法
  2. データの件数、つまり、表の下端の行番号を取得する方法
ですね。 まずは、下記にサンプルマクロを作成しておきましたので、これを試してみてください。
Sub 各データの末尾セルの値を所定のセルに移動する()
    Worksheets("Sheet1").Activate
    下端行 = Range("A" & Rows.Count).End(xlUp).Row      'データの下端行を取得
    For 行 = 2 To 下端行                              '2行目から下端行まで1行ずつ反復
        右端列 = Cells(行, Columns.Count).End(xlToLeft).Column 'その行の右端列を取得
        Range(Cells(行, 右端列 - 1), Cells(行, 右端列)).Cut '切り取る
        Range("I" & 行).Select                          '貼り付け用セルを選択
        ActiveSheet.Paste                               '貼り付ける
    Next
End Sub
そして、上手くいきましたら、Macroの[範囲選択・基本型] 2) 範囲を検出して選択 などのページを見ていただいて研究されるとよいかと思います。
なぜかというと、上記 1.と 2.のテクニックはデータ処理の基本の 1つであり、この機会に、しっかりと身につけておくと、今後たくさんの場面で役立ちます。

たとえば、I、J列に移した値の合計は、下端行が分かっていれば WorksheetFunctionプロパティで SUM関数を利用して簡単に取得できます。 詳しいことはズバリの解説ページではありませんが、
VBAでSUM関数をセルにセットするため引数の作り方を知りたい? を参考にして考えてみてください。
ぜひ頑張って完成され、結果をご連絡ください。 お待ちしています。

 

Excel VBA Macro