VBAに挑戦!
こんにちは、ジムです。
今日の授業でこんな課題が出されました。
Excel VBAでCSV形式のファイルを読み込み、グラフを表示するプログラムを作れ!!
ですって。
ふむ。そもそもVBAって何よってところから始まるのです。
VBAとは、Visual Basic for Applicationsの略らしい。
これはMicrosoftのofficeシリーズに標準搭載のプログラミング言語とのこと。
要はVBAでプログラムが書けるとofficeシリーズをカスタマイズできるのですな。自分のやりたい作業を自動化できる、と。
便利ですな。
VBAは分かった。次に出てくるCSV形式ってなんぞや。
CSVファイルとは、値をカンマで区切って書いたテキストファイルのこと
・・・へー。
Excelで簡単に書き出せるらしいのでやってみよう。
今回はoffice2016でやっていきます。
とりあえずExcelでこんな表を作ってみた。
X | Y |
1 | 2 |
3 | 4 |
5 | 6 |
いつものExcelですな。
これをCSV形式で書き出したものを見てみると・・・?
あ、この時にExcelではなくテキストエディタで開きます。
X,Y
1,2
3,4
5,6
本当にカンマで区切られてーら。
・・・この形式を読み取ってグラフ作るん?
出来るかなー。
Microsoft officeということでgoogleで調べればいろいろな情報が転がっていますが、古いバージョンだったり、全然違うことになったりと、必要な情報を得るのに苦労します・・・
気を取り直して、VBAを弄ってみます。とりあえず新しい事するときはHello Worldからって誰かが言ってた!
そんな訳でHello Worldしてみよう。
まずVBAのエディタを開く。これは今回はExcelの開発タブ(オプションから表示する)からVisual Basicをクリックして開始。
とりあえず左側のSheet1をクリックしてコーディング(プログラムを書く事。一度言ってみたかっただけ)開始なり。
やる事は簡単。Hello Worldを出力することです。
VBAのメッセージ出力関数はMsgBoxというやつらしい。
そんでコードの始まりはSub 関数名()
終わりは End sub
という決まりのようです。
とりあえずこれだけの情報でHello Worldしてみる
コード
Sub hello()
MsgBox “Hello World!”
End Sub
実行するには左上らへんにある再生マーク。 ポチッと。
出来た! これで勝つる。
さてさて次ははCSVファイルを読み込んで、セルに書き出して
そのデータをもとにグラフを作ってもらいます。
さっき作った表を基に作ります。
グーグル先生と授業の資料を元にコーディング!
以下ソースコード
Sub graph()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long
’ここまで関数の宣言
varFileName = Application.GetOpenFilename(“CSVファイル,*.csv”)
’CSVファイルを選択して開くダイアログボックスを開く
If varFileName = False Then
Exit Sub
End If
‘なんも選択しなかったときに終わる用
intFree = FreeFile
‘空番号を取得
Open varFileName For Input As #intFree
‘CSVファィルを使う準備
i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec ‘1行読み込み
i = i + 1
strSplit = Split(strRec, “,”)
For j = 0 To UBound(strSplit)
Cells(i, j + 1) = strSplit(j)
Next
‘なんかいろいろやってセルにデータを入れてく。
Loop
Close #intFree
‘開いてたファイルを閉じる。
Sheet1.ChartObjects.Add(200, 20, 300, 300).Select
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
ActiveChart.SetSourceData Range(Cells(1, 1), Cells(i, j))
’セル1,1からセルi,jのデータを使ってグラフを作る。
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = “X-Yグラフ”
‘グラフのタイトルをX-Yグラフにする。
With ActiveSheet.ChartObjects(1).Chart.Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Text = “X”
End With
‘X軸の軸名をXに。
With ActiveSheet.ChartObjects(1).Chart.Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Text = “Y”
End With
’Y軸の軸名をYに。
End Sub
‘終わり
実行結果
書いてみるとあっけないものです。
実際半日くらい格闘して書き上げました。
google先生に助けられながらなんとかかんとか。
今回はすごーい簡単なグラフでしたが、これを応用することでCSVファイルであればいろいろ応用が利くとか利かないとか。
使いこなせれば同じ大学生でも一歩リードできるか・・・?
また自分が思い出せるようにメモとして置いておきます。