2016年5月31日火曜日

【VBAリファレンス】セルの値を指定する方法は主に2種類あるのです。

Excelに値を書き込んだり、読み込んだりする時
そのセルを指定した上で行います。

セルの一番左上のセルがA1という番地?になってます。

そのセルに文字を入力するときは
マウスで十字マークをぬゅ~んって持って行ってカチってやったら
指定できますよね。

VBAではぬゅ~んって持って行ってカチってのを文字で記載する必要があります。



下の図で黄色い部分はA1でオレンジの部分はB3となります。

























VBAで指定するとき、
メジャーな方法では主に2通りの方法があります。

CellsプロパティRangeプロパティです。

ざっくり説明すると
Cellsプロパティは縦と横の番地をそれぞれ指定するやり方で
Rangeプロパティは直接セルの番地を指定するやり方です。

多分7割くらいの方がはっ?ってなっているかもしれません。

ちょっとコード書いてみますね。

--------------------------------------------
Sub test()

’Cellsプロパティ
Cells(1, 1).Select ’A1を選択
Cells(3, 2).Select ’B3を選択

’Rangeプロパティ
Range("A1").Select ’A1を選択
Range("B3").Select ’B3を選択

End Sub
--------------------------------------------
なんとなく違いが分かりますでしょうか。

Cellsプロパティで選択をする場合、列と行の並びが逆になります。
→Cells(3, 2).Selectは上から3番目左から2番目の場所って書き方になります。
最初は混乱しますが、記述し続けると慣れてきます。
Cellsプロパティのメリットですが
カッコ内、数字を記載してますが、この数字の代わりに
変数を埋め込むことが出来ます。
そのメリットも変数を使い慣れてきた時、
また、For文やIf文使うようになった時に実感できるようになるともいます。
最初は縦横逆だし、ただ煩わしいだけなんですよね。

Rangeプロパティはそのままセルの値を記述します。
その時はダブルクォーテーションで囲ってください。
Rangeプロパティのメリットはコロンを間に挟むことで
広い範囲を簡単に選択することが出来ます。
こんな感じです→Range("A1:C10").Select
Cellsプロパティでも出来ないことはないんですが、いささか面倒なんです。


さて、ここまでは選択するという記述Selectですが
その部分から先を変えると値を入れることが出来ます。
--------------------------------------------
Sub test()

Cells(1, 1).Value = "こんにちわ" 'A1にこんにちはと入力
Cells(3, 2).Font.Color = vbRed  'B3の文字の色が赤くなる

Range("A2").Value = 1 + 2  'A2に1+2の結果つまり3が入る
Range("B4").ClearContents  'B4に文字が入っていたら消去される

End Sub
--------------------------------------------

その他の指定方法でR1C1ってやり方もあるんですが
これがかなりややこしいので、今回の説明は見送ります。

まずは、いろいろ入力して遊んでみて
是非セルの値の操作に慣れてみてください。

【VBAリファレンス】変数は宣言してください。お願いします。

記念すべき最初の記事は

変数 です。


プログラミングの世界では
この変数というのを必ず使用します。


VBAのプログラムの冒頭にこういうのを見たことないですか。
(青い字の部分)
変数の宣言を宣言するといいます。
---------------------------------
Sub test()

Dim a as Long
a = 10

MsgBox a
End Sub
---------------------------------

青い部分をざっくり説明すると











入れ物(箱みたいな)を作るということを
常にイメージしてみてください。
ここではaという箱の名前です。
これが変数名といいます。


そして、宣言するだけだと
ただの箱を作っただけで、中身は空っぽなので
その中に"値"を入れます。

それを代入いいます。
例えば、りんご箱、中身がなければただのダンボール箱です。
そこに
1【赤いりんご】を入れる
2りんごを【6】個入れる
3【2016年5月31日】に収穫したりんごを入れる。

など、入れ方はさまざまあります。
それが変数を宣言するときに合わせて使う
変数の型というものです。

1は【赤いりんご】というテキストなのでString
2はりんごの個数、整数なのでLong
3は【2016年5月31日】で日付なのでDate

など、タイプに合わせてその型がたくさんあります。

さて、型は覚えないでください。
後で勝手に覚えるようになります。

じゃあ、変数名の後、どうやって記述したらいいのん?となりますが

Dim a だけ書く

それだけの記述でいいです。
省略出来るのです。

その場合、変数の型はVariant型(どんなものでも入れられる万能入れ物)という扱いになります。
慣れるまでは、Variant型のままでいいです。

逆になれてきたら、それぞれの型で変数を宣言するようにしてください。


なんか、Excelの初期設定で
変数を宣言しなくても使用できる仕様になっているのでここでは
それも直しておきましょう。




意味が分からなくてもいいです。
やってない方は最初のうちにやっておいて下さい。

この設定は変数を使うときは絶対に変数を宣言しないといけないって設定です。
これやらないと後悔します。
OfficeTANAKAの田中さんも口酸っぱく言ってます。

やっとかないと後々後悔します。
詳しい理由は田中さんのWebサイト見てみてください。


第一歩は変数に慣れてみてください。


ブログを開設します。

はじめまして。

匡純(まさずみ)といいます。

この度ブログを開設しました。

私は仕事柄、大量のデータを扱いことが多く
そのほとんどがExcel(あとCSVとか)なのです。

約1年前くらいまでは某大手通信業界で業務委託の仕事をしており
その時はExcelの関数を得意としてました。

特技はExcelですって言えるくらい、
大体どんなことでもできてました。
やっていたつもりでいたのです。

なので、VBAの勉強もしたかったのですが
業務上のWebの閲覧を許されないことや、
元々怠け者体質も手伝って、関数ができることまでで満足してました。

井の中の蛙です。
世界は広かったのです。
そして、誰もいなくなりました。

やがて仕事が変わって、扱う内容も大きく変わり、
関数やマクロの記録だけでは対応できなくなってきた時、
自分の愚かさを呪いつつ、本気でVBAを勉強し始めたのです。

VBAってプログラムなんです。

JAVAとかC言語とかRubyとかPythonとか
あれのあれなんです。

でも、エンジニアの方からしたら
VBAなんてプログラムに入らないっていう方もいるのです。
おそらく、フリーザ様からみた地球に送られるカカロットなのでしょう。


だからどうした。


最初から役に立たないと投げ出すより
Excelと電気代だけ払えれば、身に付けられるスキルです。
少なくとも、変数やFor文の概念はこのVBAでしっかりと身に付けることが出来ました。


ここでは、自分で身に付けたことを書いたり
驚いたことの備忘録や、
シェンロンにお願いするよりも処理が早くなる方法を
ブログで公開したいと思います。

いかんせん、独学でやっているので
おかしな記述方法や、わけわかめな解釈をブチ込んでくる恐れもあります。
自信があります。
でも、どうか優しく見守ってください。

そして、時々どうしようもない奴だと笑いながら、
交流をしていただければとてもうれしく思います。


どうぞ、よろしくお願いします。