VBAが使えたらもう少し仕事が楽になるんじゃないかと思って勉強したことまとめ１

#はじめに
普段はpythonでopenpyxlを使ったりしてますが、もうちょっとVBAを使えたら便利だなと思ったので、勉強したことをまとめます。

#VBAとは?マクロとは?

エクセルの操作を自動化するものです。
マクロの中身はプログラミングになっており、その言語がVBAというものになっています。

拡張機能として用意されたものですが、ビジネス現場では自動処理などで利用されることの方が多いでしょうか。

マクロの記録機能がありますが、無駄が多い非効率なプログラムになっていまうため、VBAでコーディングしていくことが重要になります。

マクロで記録したものをコーディングしなおすという方もいますが、あくまで、コーディングの仕方がわからない時に、記録をして確かめてみるという使い方のほうがよさそうです。

#VBEの起動

VBAのエディターとしてVBEが用意されています。
エクセルの画面でAlt+F11で起動できます。
ツールから開いても問題ありません。

左側にプロジェクトウインドウが出てきているはずです。

#設定

メニュー＞挿入＞標準モジュール
もしくは
プロジェクト内で右クリック＞挿入＞標準モジュール

で起動をし、標準モジュールが左側に追加されているかと思います。
このModule1が、マクロを各作業スペースになります。

名前を変更する場合、「表示」＞「プロパティウインドウ」をクリックし、変更することができます。

削除をする場合は、右クリックで「解放」(エクスポートは「いいえ」でOK)をすることで削除できます。

※最初の設定として、「ツール」＞「オプション」から自動構文チェックを外しておいたほうがいいです。
また、変数の宣言を強制するにはチェックをいれておきます。

モジュールを確認すると「Open　Explicit」が追加されていることがわかります。
「変数は必ず宣言してから使います」という宣言です。

#書いてみる

```vb
sub test1
```

これでenterをおすと

```vb
Sub test1()

End Sub
```
と表示されます。このSubからEnd Subの間に処理を書いていきます。

Subの中のコーディングは、インデントしてから書き始めます。

以下のように入力します。
この処理はA列1行にhello　worldを入力する処理です。

```vb
Sub test1()
    Range("A1") = "hello World"
End Sub
```

小文字で入力していき、大文字に自動変換されれば、問題ありません
。スペースも自動で入力されます。便利。

#動かしてみる

マクロを実行する方法は以下の２つです。

-VBEの画面で実行
　F5を押すか、実行タブを押すか
-エクセルのワークシートで実行
　ツールタブから、マクロを押す

#セル

###　Range

文字の入力

```vb
Range("セルの位置") = "hogehoge"
```
ただしくは以下ですが、上では省略して書いてます。

```vb
Range("セルの位置").value = "hogehoge"
```
フォントサイズを設定するには

```vb
Range("セルの位置").Font.size = 18
```

複数セルを扱うときは

```vb
'範囲で選択
Range("始点セル:終点セル")
Range("始点セル","終点セル")
Range("A:E 1:5")

'任意のセルを選択
Range("セル１,セル２")

'1列全体を選択
Range("A:A")

'複数列全体を選択
Range("A:C")　or　Range("A:A","C:C")

'1行全体を選択
Range("1:1")

'複数行全体を選択
Range("1:5")　または　Range("1:1","5:5")
```

###　Cells

一つのセルを指定する場合は、Rangeではなくこちらを利用した方がいいです。

```vb
Cells(行, 列)

'つまり
Cells(1, 1) 
Cells(1, "A")
```
rangeは("B1")のように列行の順番で
cellsは(1, "B")のように行列の順番です。

###　Rows

Rows(行)
で行の選択ができます。

```vb
Rows(5)
'これで5行目全体になります。

Rows("1:5")
'これで1~5行目を選択できます。
```

###　Columns

Columns(列)
で列の選択ができます。

```vb
Columns(3)
'これで3列(C列)全体になります。
Columns("C")
'こちらも同意です。

'複数列はこれで選択ができます
Columns("A:C")
```

###　RangeとCells

複数のセル範囲を指定する場合は

```vb
Range(Cells(行, 列), Cells(行, 列))
```
このように記入をしたほうがいいです。
例えば、A1セル~E5セルの範囲を指定する場合は

```vb
Range(Cells(1, 1), Cells(5, 5))
```

また複数行/複数列全体を指定する場合は

```vb
Range(Rows(1), Rows(5))
Range(Columns(1), Columns(5))
```

色々とこんがらがりそうですが
変数を使う時は、Cells、Rows、Columnsを使用すると言うことを覚えておけば大丈夫です。

#Dim　変数

変数を扱うにはDimを利用します。以下のように書きます。
※As以降の部分は省略可能です。また複数連続して各ことができます。

```vb
Dim 変数名 As データ型, Dim 変数名 As データ型,Dim...
```

以下はよく使われる変数名

```vb
Dim i, j
Dim intNo As Integer
Dim lngRow As Long
```


#Const　定数

定数を扱うメリットは、同じ文字や数値を、複数個所に記述しなくて済むところにあります。
定数を扱うにはConstを利用します。以下のように書きます。

```vb
Const 定数名 As データ型 = "値"
```

日付の定数には注意が必要です。
「#」で囲まないと除算が行われて、それが日付として認識されてしまいます。

```vb
Const 日付定数 As Date = 2018 / 10 / 16
Const 日付定数 As Date = #10/16/2018#
```

#型宣言文字

データ型は、Asと記載しなくても以下で記載することができます。

|    型宣言文字    |    型    |
|:------------------:|:------------------:|
|        %        |    Integer(整数型)  |
|        &        |    Long(長整数型)    |
|       $       |    String(文字列型)   |
|        !        |   Single(単精度浮動小数点型)    |
|         #         |    Double(倍精度浮動小数点型)    |
|       @       |    Currency(通貨型)    |

例えば

```vb
Dim i%
Const j& = 464946494649
```
のような感じです


#長くなってきたので
記事を分けて投稿していきます。
続きは[こちら](https://qiita.com/hiroyuki_mrp/items/9831846d2df0d27dd7f9)