2010年5月24日月曜日

VBA配列の覚書

 配列の方向をなかなか覚えられないので覚書。

 まずは良い例。

Sub GoodExample()
    
    Dim x(2, 0)
    
    x(0, 0) = "a"
    x(1, 0) = "b"
    x(2, 0) = "c"
    
    Range("A1:A3") = x
    
End Sub
 実行するとA1:A3に'a','b','c'が出力される。

 次に悪い例。

Sub BadExample()
    
    Dim x(2, 0)
    
    x(0, 0) = "a"
    x(1, 0) = "b"
    x(2, 0) = "c"
    
    Range("A1:C1") = x    '←間違い!
    
End Sub

 実行するとA1:C1全てに'a'が出力されてしまう。

2010年5月23日日曜日

コードの表示

 ブログ上でコードを思ったように表示させるのは意外と難しく、なかなか言う事を聞いてくれない。

 この方法がベストなのかどうかは分からないけど、とりあえず、<pre><code>~ソース~</code></pre>のやり方で行くことにした。


 スタイルシートに以下を追加。

pre {
  background-color: #222222;
  color: #33ff99;
  margin-left: 2%;
  margin-right: 5%;
}
code {
  font-family: monospace, serif;
  font-size: 1em;
  line-height: 1.2;
}

昔のマイコン風に黒地に緑文字。

NetFront

 今更だけどアドエスにNetFrontを入れてみた。
 すごく快適。もっと早くに入れれば良かった。

W-zero3から投稿

 W-zero3から投稿をしたことが一度もなかったのでちょっとテスト。

2010年5月19日水曜日

全シートでセルの選択範囲を同期②(Excel VBA)

 標準モジュールへ以下のコードを書く。


Public GlobalCellRange As String
Public GlobalTopRow As Long
Public GlobalTopColumn As Long

Public Sub GetScrollPos()
With ActiveWindow
GlobalTopRow = .ScrollRow
GlobalTopColumn = .ScrollColumn
End With
End Sub

Public Sub SetScrollPos()
With ActiveWindow
.ScrollRow = GlobalTopRow
.ScrollColumn = GlobalTopColumn
End With
End Sub


 WorkBookへ以下のコードを書く。


Private Sub Workbook_Open()
Call GetScrollPos
GlobalCellRange = Selection.Address
End Sub


 WorkSheetへ以下のコードを書く。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call GetScrollPos
GlobalCellRange = Target.Address
End Sub

Private Sub Worksheet_Activate()
Call SetScrollPos
Range(GlobalCellRange).Select
End Sub


 前回の課題であった「表示されている範囲の同期」は達成。

 今後の課題:ズームも同期出来るようにする。