Excel VBA

【お手軽】エクセルVBAのRangeを使って符号反転をする方法

エクセルを使った作業をしていると数字の符号を反転することがあります。

エクセル作業に慣れている方だと、短時間でできてしまう簡単な作業です。

ですが、業務で使うソフトから出力するデータの符号反転をしている方にとっては「何度も行う符号反転処理をラクにしたい」と考えるかもしれません。

そこで今回は「エクセルVBAで符号反転する方法」を紹介します。

こんな方におすすめ

  • エクセル作業をラクにしたい方
  • エクセルVBAで出来ることを知りたい方
  • 符号反転をラクにしたい方

数字の符号反転はいつ使うの?

業務によっては無縁かもしれない「数字の符号反転」

いつ使うの?

という方のために、符号反転をするシーンを紹介します。

会計ソフトから出力したデータの整形

会計ソフトから出力したデータには、借方・貸方がありますが、ほとんどがプラス表記です。
通常の使用だと不便に感じることはないのですが、特定の勘定科目のみを調べる場合は「符号がプラス(+)だけの表記」は不便に感じてしまうことがあります。

エクセルで符号反転は手作業でもかんたん

エクセルで符号反転(プラスとマイナスの切り替え)は簡単にできます。

一度も符号反転をやったことがない方もこれから紹介する方法をやればできるようになります。

A列に並んでいる数字の符号を反転させる流れを紹介します。

【手順1】となりの列に関数を作成する。

最初は、B列に計算式を入力します

符号を反転させる計算式は「符号反転をしたい数字にマイナス1を掛けるだけ」です。

A列の数字の符号反転をしたいので、となりの列(今回はB列)に計算式を入力します。
(計算式は下の図の通り「=A2*-1」です。)

A1セルの数字(1)にマイナス1を掛けた数字をB1セルに表示させる計算式です。

計算式を入力して[Enterキー」を押すと結果が表示されます。
(B2セルにマイナス1が入力されます)

【手順2】他のセルに計算式を反映させる。

B列に計算式の入力ができたら、同じ計算式を下のセル(3行目以降)にも反映させていきます。

同じ計算式を下のセルに反映させるには「セルの右下(赤丸部分)」をダブルクリックします。
※オートフィルというワザです。

ダブルクリックした後は、下の図のようになります。
符号反転後の数字ができましたので、A列の符号反転あと少しで完成です。

【手順3】値貼り付けをする。

手順2のままだと、A列の数字の符号反転はできていません。

手順3では、符号反転をしたB列の数字をA列に貼り付けます。

符号反転した数字(今回はB1セル)のデータをコピーします。
※B1セルの上で右クリックすると下の図のようなメニューが出てきます

符号反転ができたデータ(この場合はB列)のコピーができたら、符号反転をしたい部分(A列)に貼り付けます。
貼り付ける時は「値で貼り付け」を選択します。

ここに注意

(値貼り付けせずに)そのまま貼り付けてしまうとB列にある計算式がコピーされてしまうので、結果うまくいきません。
Ctrl + V で貼り付けしないように注意が必要です。

都度エクセル操作をするのは大変・・

エクセルで符号反転する方法を紹介しました。

時々行うならそこまで負担ではありませんが、何度もやる場合は大変です。
(例えば、会計ソフトからデータを出力するたびに符号反転処理をやっていては時間のロスになってしまいます)

具体的には・・・

  • 会計ソフトからデータを出力
  • エクセルのデータ整形プログラムで自動化
  • 完成ファイルを使って作業

完全に自動化しなくても「退屈で何度も繰り返す、一部の作業」を自動化することで効率化ができます。

ポイント

毎回同じデータの形式で、処理後の形式が決まっているのでしたら、この処理だけでも自動化してしまうと効率化ができます。

ちょっとした作業を自動化するメリット

「符号反転をする」というちょっとした作業(自動化する必要あるの?と感じてしまいそうなくらい簡単なもの)ですが、意外とメリットが多いです。

メリット

  • プログラムをコントロールしやすい
  • 退屈な作業を省略すると疲労が軽減される
  • プログラムの勉強になる

プログラムをコントロールしやすい

まずは「プログラムをコントロールしやすい」について紹介します。

エクセルVBA(自動化プログラム)を作成するのは、初心者の方にとってはハードルが高いです。

ハードルには「学習が難しい(分からない時につまづきやすい)」「勉強しても使い道が分からない」などがあります。

なので、最初に作成するプログラムは「符号反転するだけ」など簡単なプログラムにすることで管理がしやすくなります。

「管理って何?」について詳しく紹介すると・・・

「管理しやすい」はこういうこと

  • プログラムを作成していて分からなくなりにくい
  • エラーが出ても、原因が分かる
  • 処理が少ないので、プログラムの作成から結果確認までが簡単
  • 簡単に作れるので、時間が無くてもできる

かんたんに作れるプログラムなので、最初に挑戦するにはお得だと思います。
(かんたんなプログラムでも完成して動かした瞬間は感動します)

【VBA】符号反転プログラムを作ってみる

プログラムを作成するメリットを紹介したところで、実際に「符号反転」プログラムの作り方を紹介したいと思います。

エクセルVBAを使ったことがない方も分かるように、プログラムのコードの他に「エクセルの処理」をあわせて紹介していきます。

プログラムで使うこと

  • シートの選択
  • セルの選択
  • 符号反転

【簡単】コードはこちら

まずはコードを紹介します。

Sub 符号反転()
  Sheets("Sheet1").Range("A2") = Sheets("Sheet1").Range("A2") * -1
  Sheets("Sheet1").Range("A3") = Sheets("Sheet1").Range("A3") * -1
  Sheets("Sheet1").Range("A4") = Sheets("Sheet1").Range("A4") * -1
  Sheets("Sheet1").Range("A5") = Sheets("Sheet1").Range("A5") * -1
  Sheets("Sheet1").Range("A6") = Sheets("Sheet1").Range("A6") * -1
  Sheets("Sheet1").Range("A7") = Sheets("Sheet1").Range("A7") * -1
  Sheets("Sheet1").Range("A8") = Sheets("Sheet1").Range("A8") * -1
  Sheets("Sheet1").Range("A9") = Sheets("Sheet1").Range("A9") * -1
  Sheets("Sheet1").Range("A10") = Sheets("Sheet1").Range("A10") * -1
  Sheets("Sheet1").Range("A11") = Sheets("Sheet1").Range("A11") * -1
End Sub

ちなみにコードの前提はこちらです。

前提

  • シート名は、Sheet1という名前
  • A1セルからA11セルの符号を反転する。

コードを詳しく紹介

エクセルVBAをやったことがない方にとっては「???」となってしまいそうなコードです。
詳しく紹介したいと思います。

シートとセルの指定

まずは、シートとセルの指定について紹介します。

紹介したコードでは、SubとEnd Subの間にある部分で書いてあります。
まずはイコール(=)の左側についてです。

Sheets("Sheet1").Range("A2") 

このコードは「Sheet1という名前のシートの中のA2セル」という意味です。

なのでこの場合は、数字の1を意味します。

シート指定について

Sheets("Sheet1")というのは、Sheet1という名前のシートのことを指します。

今回のエクセルファイルのシート名は、初期設定のままですのでSheet1となっています。

Sheets("シート名")にすることで普段使っているエクセルファイルでも「シートの指定」ができます。

セルの指定

Range("A2")は「A2セル」のことです。

Range("セルの座標")にすることでセル指定ができます。
(シートの指定と組み合わせることで、「〇〇シートの××セル」と指定できるようになります。

※セル座標指定の際は、セル番号(A2など)をダブルクオーテーション(”)で囲まないといけません。

注意ポイント

エクセルVBAでプログラムを作る時に「セルの指定をしたい場合」は、シート名の指定も行います。

なぜなら、例えば、A1セルを指定する場合にシート名の指定が無ければ「どのシートか分からない」からです。
シート名から指定することで、処理をする場所の間違えを無くすことができます。

ちなみに、Sheets("Sheet1").Range("A2")のように「シート」と「セル(Range)」の間にはピリオド(.)を付けなければいけません。

計算式の入力

次に 、イコール(=)の右側についてです。

Sheets("Sheet1").Range("A2") * -1

先ほど紹介したSheets("Sheet1").Range("A2")のあとにある「*-1」について紹介します。

これは「マイナス1を掛ける」という意味です。(算数と同じです)

つまり、Sheets("sheet1").Range("A2")の値が1なので、「1 × -1」となり、符号反転(1から-1に変換)ができる処理です。

ポイント

今回紹介したコードは、「*-1(掛け算)」でしたが、「+(足し算)、-(引き算)、/(割り算)」なども使えます。

VBAでのイコール【=】の意味

先ほどと同じコードですが、コードの間辺りにイコール(=)があります。

Sheets("Sheet1").Range("A2") = Sheets("Sheet1").Range("A2") * -1

最後は、イコール(=)についてです。

エクセルVBAでのイコールは「右辺のものを左辺にする」という意味があります。
(算数のように右辺と左辺が同じという意味ではないので注意)

これまでの内容をまとめると

  • 左辺はA2セルの値なので・・1
  • 右辺はA2セルの値にマイナス1を掛けるので・・-1
  • 右辺のもの(-1)を左辺(A2セルの値)にする

結果、A2セルの値が-1(符号反転したもの)になります。

【実用的】コードはこちら

【簡単】コードを見た時に「使い物にならないのでは・・」と感じた方もいらっしゃるかもしれません。
符号反転するセルの数が10個くらいでしたら問題ないのですが、1000個になってしまった場合はコードを書くのは現実的ではありません。

なので実用的なコードも紹介したいと思います。

Sub 実用的な符号反転()
Dim i As Long: i = 1
  For i = 2 To 11
    Sheets("Sheet1").Range("A" & i) = Sheets("Sheet1").Range("A" & i) * -1
  Next
End Sub

For文(繰り返し文)を書くことで、セルをずらしながら同じ処理(今回でいうと符号反転)を行うことができます。
※ちなみにこちらの【実用的】コードは【簡単】コードと同じ結果になります。

For文に加えて、最終行の取得をすると柔軟処理ができるようになります。
(最終行取得についてはこちらの記事で紹介しています)

補足

For文については今後紹介する予定です。

作ると分かること

とてもかんたんなプログラムですが、こんなことが分かります。

ポイント

  • シート・セルの選択方法
  • 値の入力
  • 計算式の入力

エクセルVBAについて「名前は聞いたことがあるけど、よく分からない・・」「昔に挑戦してみたけど、挫折してしまった」という方にとってはオススメのプログラムです。

実際にプログラムが動く実感を得られるので、自信にもつながります。

もし、符号反転作業を毎回やっているのでしたら、ラクになるのでチョットした喜びを感じられそうです

今後も役立つ知識になる

符号を反転させるだけのプログラムなので

できても意味が無いのでは・・・

と感じてしまう方もいらっしゃるかもしれません。

実は、このプログラムができると、今後も役立つ知識になります。

今後役立つもの

  • プログラムの中に符号反転処理を追加する場合
  • 符号反転部分の計算式を変更
  • (発展させると)セル操作の幅が広がる

「意外とかんたんにプログラムができるならやってみよう」と思った方はチャンスかもしれません。
最近は、本だけでなくオンラインレッスンも出てきました。
自分に合った講座が見つかればスキルアップにもつながります。

あとがき

今回は、エクセルVBAで符号反転をする方法を紹介しました。

忙しくない時は「符号反転くらいラクだからわざわざ自動化する必要がない」と感じてしまいまそうです。

ですが、業務が増えすぎてしまって手がまわらない時は、符号反転ですらしんどく感じてしまうこともあります。

早めに業務効率化プログラムを作って、少しずつ慣れていくと「業務負担を減らしながら、効率的に働く」ことができるようになります。

エクセルVBAをやってみたけど挫折してしまった方、VBA初心者の方は試してみてはいかがでしょうか?

-Excel VBA
-, , , ,