雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい人。コメント貰えると私が喜びます。

久々にプログラミングな更新

今日はちょこっとだけ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



今日のテーマソング : オリオンをなぞる
覚えてるフレーズは"つながりたい。はなされたい。つまり半信半疑あっちこっち"でした。