プログラミング メモ memo.txt

一度考えたコードを忘れるのはもったいないので、メモとして残していきます。現在、JavaとC++とVBAを勉強しているので、そこらへん書きます。

ExcelでVBAを使うまで。-Excelでマクロを使えるようにする-


f:id:rkprog:20151027150606p:plain

VBAを使うまで

簡単な環境設定みたいなものです。

まず、Excelを開いてください。

f:id:rkprog:20151027145123p:plain

「ファイル」から「オプション」を選んで

f:id:rkprog:20151027145257p:plain

「リボンのユーザー設定」から「開発]にチェックを

f:id:rkprog:20151027145421p:plain


f:id:rkprog:20151027145438p:plain

これで、Excelに開発タブが増え、表示にマクロができます。

f:id:rkprog:20151027145557p:plain


このマクロで、記録する機能を使うだけでも十分違いますので、今回その説明も加えて。

例えばシート内の全ての文字を消したい場合


f:id:rkprog:20151027145718p:plain

これで、マクロの記録をします。全消しの場合は全て選んでDeleteを押せばいいだけなので、それをMacro1として保存します。

f:id:rkprog:20151027145843p:plain

終わったら記録終了を押しましょう。

これで、Macro1は全て消す操作になります。

この実行方法ですが

f:id:rkprog:20151027150006p:plain

この「開発」タブの挿入からボタンのようなものを選ぶことで、図の中のボタンのようなものが作れます。この時、マクロを選ぶ画面がでますので、そこで選べばいいだけです。

実行するときはクリックするだけ。


Excel VBAの記述方法

これからは実際に書いていきましょう。

「マクロの表示」から新規で作成してください。

f:id:rkprog:20151027150222p:plain

名前は自分で決めれます。今回はtrainingにします。


f:id:rkprog:20151027150308p:plain

これがエディタになります。さっきのMacro1が上に表示されているのがわかるかとおもいます。

f:id:rkprog:20151027150340p:plain

ここに実際に書いていくのですが、自分はコード自体はsublime textで書いていこうと思います。(いろいろ理由はあるのですが)

背景の色なども変えられますが、まずはここまで。

VBA InputBoxで入力を受け付ける。InputBoxを繰り返す。

f:id:rkprog:20151027150606p:plain

マクロの記録でできることをやっていても面白くないので(記録したコードから勉強することはいいことなのですが)

今回はInputBoxを使います。

InputBoxの使い方

Sub Training()

'InputBoxの使い方

Dim st As String
st = InputBox("入力してください")
MsgBox st + "が入力されました"


End Sub

これをボタン1に登録し、実行します

f:id:rkprog:20151027151431p:plain

f:id:rkprog:20151027151455p:plain

f:id:rkprog:20151027151518p:plain

いい感じですね。複数回呼び出すやり方としてfor や whileがあります。

他のプログラミングでもこの繰り返しはおなじみなので説明は省略します。

excelvba.pc-users.net

'説明:セルのA1~A10に1~10を入力する
Sub test()
    For i = 1 To 10
        Worksheets("Sheet1").Cells(i, 1).Value = i
    Next
End Sub

こんな感じです。今回は入力回数を任意の数で辞める方法を考えます。

While True を使い、Exit Subを用いる

While True

Wend

とすることで無限に繰り返しが起こります。
ここで、あるタイミングで条件分岐をしExit Subをすることで操作が終わります。

その例として、

Sub InputTraining()

While True
Dim result As Integer
result = MsgBox("入力を行いますか",vbYesNo)
If result = 7 Then
MsgBox("終了します")
Exit Sub[f:id:rkprog:20151027152555p:plain]
End if


Dim st As String
st = InputBox("入力してください")
MsgBox st+"が入力されました"

Wend

End Sub

こうすることで、任意のタイミングでループを抜けることが出来ます。
MsgBox,InputBoxの返り値に関しては以下のサイトを見てください。

MsgBoxにvbYesNoのオプションを付けると、Noが押されたときresultが7になります。Yesが押されると6になるのですが今回はどうでもいいです。

実際に実行してみると上手くいくのが分かるかと思います。

f:id:rkprog:20151027152555p:plain

f:id:rkprog:20151027152619p:plain

f:id:rkprog:20151027152656p:plain


Office TANAKA - Excel VBA関数[MsgBox関数]

最後に読み込んだ値を書き込む

まず、入力された値をセルA1に入れます。

Sub InputTraining()

While True
Dim result As Integer
result = MsgBox("入力を行いますか", vbYesNo)
If result = 7 Then
MsgBox ("終了します")
Exit Sub
End If

Dim st As String
st = InputBox("入力してください")
Cells(1, 1) = st
' Range("A1") = st

Wend

End Sub


これで、毎回A1にデータが残ります。今回、Cellsを使ったのですがRangeの方がなじみのある人はそちらを使ってください。


ただこれではA1に上書きされていくので、下に連ねていくためにCellsの行を指定します。

Dim L As Integer
L = Cells(Rows.Count, 1).End(xlUp).Row + 1

を使うことで今まで書かれている最終行の次の行を取得できます。

これを入れて

Sub InputTraining()

While True
Dim result As Integer
result = MsgBox("入力を行いますか",vbYesNo)
If result = 7 Then
MsgBox("終了します")
Exit Sub
End if
Dim L As Integer
L = Cells(Rows.count,1).End(xlup).Row+1

Dim st As String
st = InputBox("入力してください")
Cells(L,1) = st

Wend

f:id:rkprog:20151027153341p:plain

これでうまくいっているのが分かるかと思います。

これを応用して列番号を切り替えていくことで名前と点数を連続で入力していけます。