Web Analytics Made Easy - StatCounter

Economics Of TEC

RPA,経済学,IT技術などに関する情報を発信しています。

【Excel VBA】行方向に計算を繰り返す方法

f:id:WillSpecter:20200810141628j:plain

 やりたいこと

Excelで下記のようなデータがあるとします。

f:id:WillSpecter:20200810171233p:plain


Excel VBAを使用して金額を表示させてみましょう。

方法は色々あると思いますが、今回は「Do ~ Loop」「Offset」を使用してやってみたいと思います!

 

コード

f:id:WillSpecter:20200810171418p:plain


これで実行すると空白の金額欄を全て埋めることができます。

 

どのようなロジックになっているか順に説明します。

選択するセルを設定

range("E2").select

Selectは「選択する」という意味のメソッドです。

まずはセルE2を選択させます。

Do~Loopステートメントを入力

Do Until〇〇は「〇〇の状態になるまで以下の操作を繰り返す」という意味があります。

今回は〇〇の部分にActiveCell.Offset(0,-1).Value = ""を設定しています。

ActiveCellは現在選択されているセルを表すプロパティです。

range("E2").selectE2を選択させているので、ここではE2が対象となります。

 

Offset特定のセルを基準とした位置関係を表すプロパティのことです。

Offset(0,-1)とすることで、対象のセルから0行下に移動して、-1横に移動する

言い換えるとE2の1つ左隣のセルを選択するという意味になります。

 

Do Until ActiveCell.Offset(0, -1).Value = ""

は対象のセルの左隣の値が空白になるまで以下を繰り返すということになります。

Withステートメントを入力

ワークシートやセルなどを操作する場合はActiveCellなどのプロパティを何回も記述することがあります。

コードがわかりづらく、間違いの原因にもなるので「Withステートメント」を使用して重複を省略します。

With」と「End With」の間に省略する箇所を記入します。

With ActiveCell
  .Value = .Offset(0, -2).Value * .Offset(0, -1).Value
  .Offset(1, 0).Select
End With

省略したプロパティを記述するときは「.」から入力することに注意が必要です。

繰り返す処理を入力

上記のWithステートメントには繰り返す処理を2つ設定しています。

1つ目の.Value = .Offset(0, -2).Value * .Offset(0, -1).Valueについて説明します。

 

これは言い換えると

対象セルの値 = 対象セルから左に2つ移動した値 × 対象セルから左に1つ移動した値

です。つまり「金額 = 単価 × 数量」を表しています。

 

2つ目の条件についてですが、

今のままだと常に同じセルだけを処理し続けることになってしまいます。

 

繰り返しの処理で、1回のループごとに参照するセルを移動させることが必要です。

.Offset(1, 0).Select

これを繰り返しの処理の最後に入れておくことで、対象のセルの真下を選択させることができます。 

 

以上で完成です!

エラーが出てしまった場合はスペルミスやステートメントを終了させる「End With」「Loop」などが抜けていないかチェックしてみてください。

f:id:WillSpecter:20200810171418p:plain

ひとこと

UiPathの開発でVBAを使った案件が多くなってきたので、基本的なことから学習することにしました。

 

今までわからないことはググって乗り切っていたのですが、意外と基礎的なことが理解できていませんでした。

 

書籍で学習してみると、まばらだった知識が一気に繋がって理解が深まるのでオススメです(^-^)

 

今回はできるシリーズで学習しているのですが、フルカラーでかなり細かいところまで画像を使って解説してあるので、これからVBAについて学習したい方にも読みやすいと思います!