久々にプログラミングな更新
今日はちょこっとだけExcelVBAの勉強をしてみた。
といっても本当に入門程度のものだ。
私はこれまで色々プログラム言語を弄っているけど、実はExcelVBAは弄ったことがなかった。
一つのプラットフォームに縛られすぎるのがあまりにも嫌だったからだ。
でもまあ、会社でプログラムを教えてくれという受容があったので、
折角だから勉強がてら弄って見ることにした。
以下、適当にやったことをメモしてみます。
※環境はMicrosoftExcel2007です。たぶん他の環境でも一緒だと思いますが知らないので断言しません。
1.セル"B1"にデータ"10"を突っ込む。
Public Sub Test() Cells(1,2) = "10" End Sub
配列が1からのアクセスなのに戸惑った。
2.ワークシート"ABC"にデータ"GGG"を突っ込む。
Public Sub Test() Worksheets("ABC").Cells(1,1) = "GGG" End Sub
データへのアクセスがWorkSheetsやCellsなど複数形なのに気づく。
なんかオブジェクト名が冗長な感じでキモチワルイ。
3.繰り返し操作で複数のセルにアクセスする。
Public Sub Test() For i = 1 To 10 Cells(i,i) = i*i Next End Sub
これで斜めに10個のi^2が入る。ここまではプログラムを知ってればすぐに使えるようになるね。
4.ポップアップ"ほげほげ"を出す。
Public Sub Test() MsgBox("ほげほげ") End Sub
出すだけなら簡単だね。
5.XMLを読む。
VBEのメニューの[ツール]から[参照設定]を選択。
[Microsoft XMLL, version 2.0]をチェックして"OK"を押す。
Public Sub Test() Dim xDoc As MSXML.DOMDocument Set xDOc = New MSXML.DOMDOcument If xDoc.Load("xxx.xml") Then ' 読めてる時の処理 Else ' 読めてない時の処理 End If End Sub
会社の妙なツールのコードが何故かXMLっぽいもので管理されていて、
そこからデータを取り出す方法を覚えておきたいからやった。
まあ、ExcelはXMLを直接読んでテーブル形式で表示する機能はあるから、
普通はそれほど気にする必要はないと思う。
尤も、保存するとタグ名は適当になってしまうようだけどね。
6.XMLのタグ内部のテキストにアクセスする。
使用するXML。
<a> <b> <c CCC="ABC">データ1</c> <c CCC="DEF">データ2</c> </b> <a>
Pubic Sub Test() Dim xDoc As MSXML.DOMDocument Set xDOc = New MSXML.DOMDOcument If xDoc.Load("xxx.xml") Then Dim selNodes As IXMLDOMNodeList Set selNodes = xDoc.SelectNodes("a/b/c") MsgBox(selNodes(0).Text) MsgBox(selNodes(1).Text) End If End Sub
NodeListだと0からアクセスする必要がある不思議。
7.XMLの属性を読む。
Pubic Sub Test() Dim xDoc As MSXML.DOMDocument Set xDOc = New MSXML.DOMDOcument If xDoc.Load("xxx.xml") Then Dim selNodes As IXMLDOMNodeList Set selNodes = xDoc.SelectNodes("a/b/c/@CCC") MsgBox(selNodes(0).Text) MsgBox(selNodes(1).Text) End If End Sub
"ABC"と"DEF"でポップアップが出るのかな?
7.ループで全部に対してアクセス。
Pubic Sub Test() Dim xDoc As MSXML.DOMDocument Set xDOc = New MSXML.DOMDOcument If xDoc.Load("xxx.xml") Then Dim selNodes As IXMLDOMNodeList Set selNodes = xDoc.SelectNodes("a/b/c/@CCC") length = selNodes.length For i = 1 To length Cells(i,1) = selNodes(i-1).Text Next End If End Sub
CellとNodeでアクセス方法が違うのがすごく気持ち悪い。
ここを参考にして勉強してました。
このブログを書くのも含めて、大体2時間くらいかかったかな?(23:30〜01:30くらい)
結構じかんが掛かってるね。
http://www2d.biglobe.ne.jp/~t_yoshi/xml.html
今日のテーマソング : オリオンをなぞる
覚えてるフレーズは"つながりたい。はなされたい。つまり半信半疑あっちこっち"でした。