Yoshidome-Mitsushio laboratory

  •  
  • お問い合わせ

Documents

化学生命プログラミング
テクニック集




補足資料他
ファイル名
数独解法プログラム
チェックボックス一括削除等テクニック集
高速フーリエ変換ノイズフィルタ

テクニック集
【Active Xコントロールを一括操作したい】

コントロールはOLEObjectsというコレクション(コントロールの集まり)でまとめて制御できる
連番になっているCheckBox1~4にまとめてチェックを入れるサンプルです

--------
Dim i As Integer
For i = 1 To 4
 OLEObjects("CheckBox" & i).Object.Value = True
Next
--------

上の OLEObjects("CheckBox" & i).Object.Value = True
OLEObjects("CommandButton" & i).Object.Enabled = False
と書き替えると、CommandButton1~4をまとめて使用不可に出来ます

Visibleプロパティを操作する場合は、「Object」を入れません
(Objectを入れるとエラーが出ます)
OLEObjects("CommandButton" & i).Visible = True または False
OLEObjects("CheckBox" & i).Visible = True または False
参考資料 Microsoft VBA リファレンス OLEObjectsコレクション

   
【貼り付けた写真を表示させたり消したりしたい】

Excel内で割り当てられている「名前」が分かれば、Shapes("名前").Visible = Trueで表示、
Shapes("名前").Visible = Falseで消す(非表示)ことができます

--------
Excelで割り当てられている「名前」を調べる

1.貼り付けた写真をダブルクリックし「図ツール」の「書式」タブから
「オブジェクトの選択と表示」をクリック


2.右に表れる「選択」ウィンドウの名前をクリックしてコピー
 (例では「図 1」、「図」の後ろは[半角スペース]+[半角数字1]』)


写真の表示・非表示の制御

3.表示・非表示の制御 表示
Shapes("名前").Visible = True
の「名前」の部分にペースト

非表示
Shapes("名前").Visible = False
の「名前」の部分にペースト

--------
この「名前」は、半角・全角・スペースを
厳密に合わせないと正しく制御出来ないので注意!
参考資料 Excel Fun-図形を非表示にする

   
【グラフをプログラムから削除したい】

グラフの削除などは、ChartObjectsオブジェクトで制御できる

「グラフ1」を削除するサンプル
--------
ActiveSheet.ChartObjects("グラフ 1").Delete
--------

ただし、これは「グラフ1」が存在しないとエラーが出る上、
グラフを作るたびに数字部分が変化していくため、
実質的にこのコマンドにグラフの削除を任せるのは不可能です

改良版 グラフをまとめて削除するサンプル
--------
If ChartObjects.Count > 0 Then ChartObjects.Delete
--------

Deleteメソッドで一括してシート上のグラフを削除できますが、
グラフが存在していないとエラーが出ます
そこで、Countプロパティでシート上のグラフの数をチェックし、
これが0より大きい時のみDeleteメソッドを実行することで
エラーを防ぎます

参考資料 Microsoft VBA リファレンス ChartObjectsオブジェクト

   
【罫線をプログラム上で制御したい】

罫線まで含めた表をプログラムだけでつくるこだわりのテクニック

A1~C5の範囲に罫線を引くには以下のような記述になります
--------
Range("A1:C5").Borders.LineStyle = xlContinuous
--------

また、同じ範囲を太枠で囲むには、この次に以下の行を加えます
--------
Range("A1:C5").BorderAround Weight:=xlMedium
--------

罫線を消したい場合は、以下のように記述します
--------
Range("A1:C5").Borders.LineStyle = False
--------
このFalseをTrueに書き替えると、上と同様な罫線を引くこともできます


ここからは少々こだわりが強いテクニックになります
プログラムから任意の範囲に罫線を引くにはどうすればいいでしょう?

以下で紹介するのは最適解ではなく、あくまでも僕好みの方法です
実は、RangeオブジェクトはCellsコレクションと組み合わせて、
以下のように記述する事ができます。
--------
Range("A1", Cells(5, 3))
--------
Cellsは範囲指定が苦手な代わりに繰り返し構文との相性が抜群です
そこで、Rangeの範囲指定にCellsを使うことで、
繰り返し構文との相性が良く、範囲の指定も簡単にできるわけです
上の記述だと、範囲の始点がみたままのA1
終点が5行3(C)列=C5となります。

始点が固定できるのであれば、例えば、
--------
Range("B2", Cells(6, a)).Borders.LineStyle = xlContinuous
Range("B2", Cells(6, a)).BorderAround Weight:=xlMedium
--------
として、変数aの値を変えてやれば、
横(列)方向に任意の大きさの罫線を引くことができるわけです。

もちろん、
--------
Range(Cells(1, 1), Cells(5, 3)).Borders.LineStyle = xlContinuous
Range(Cells(1, 1), Cells(5, 3)).BorderAround Weight:=xlMedium
--------
として、始点もCellsで記述する事もできます。(上は"A1:C5"と同じ)

このRangeとCellsの組み合わせはいろいろな応用が利くのですが、
行と列が混乱しがちになるのが唯一の欠点です

参考資料 Office TANAKA BroderオブジェクトとBordersコレクション
moug(モーグ) セル操作関連のテクニック