いたちめです。
エクセルを表計算じゃなくて、様式として使ってる方。
オートシェイプを使って、○印をつけていませんか?
面倒ですよね、それ。
想像して下さい。
会社の様式にオートシェイプを付けるのはいいけど
形がいびつだったり、位置がずれてたりして
イライラする。
それが
VBAのコードにコピペして、ちょこっと加工すれば
「おいおい、今までの苦労はなんだったんだ?」
「ちょっと待って、今までの苦労を返して欲しいんだけど」
となるわけです。
面倒じゃない方も、ちょっと参考までにみて下さい。
目次
Excle(エクセル)を様式のフォーマットとして使うのは、実は正しい。
様式だからって、Word(ワード)で表を作る人もいます。
別に否定はしません。
手書きする様式だってありますから。
ただ。
僕自身がワードを使い慣れていないこともあり、
よく頑張るなぁ。と思うくらい。
枠線を引いて、その枠線の中で文章が収まる様に。
なんてワードでやるのは、面倒臭い。
では、なぜ会社は所定の様式を定めているの?
→個別のオリジナル様式だと統一できないから。
なぜ統一させるの?
→一覧性が欲しい、整合性が欲しい。
じゃあ、なぜデータベース化しないの?
→○印をつけるものだってあるじゃん?
そう。それならVBAだ。
オートシェイプを使うと同時に、データベース用に加工してしまえばいいわけです。
VBAで簡単にオートシェイプを利用して業務効率をアップさせよう
VBAでオートシェイプを利用するときの順番
1・オートシェイプを付けたときに、データベース用に加工するセルを決める
2・データベースから復元したときに、オートシェイプを指示するセルを決める
3・シートに残った、いらないオートシェイプを削除する
4・新しくオートシェイプをつける
やるなら全部VBAでやらないと!な頭でっかちさんは
特に1と2は、脳に刻み込んでね☆
前提として
使うシートは「Sheet1」
A1に「OK」、B1に「NG」
データベース用に加工するセルをC1で「空白の状態」
データベースから復元して、オートシェイプを指示するセルをD1で「空白の状態」
1・オートシェイプを付けたときに、データベース用に加工するセルを決める。
A1「OK」のセルにオートシェイプをしたときに、C1にはOKを入力させる。
B1「NG」のセルにオートシェイプをしたときに、C1にはNGを入力させる。
2・データベースから復元したときに、オートシェイプを指示するセルを決める
D1セルにOKが入力されると、A1セルにオートシェイプを復元させる。
D1セルにNGが入力されると、B1セルにオートシェイプを復元させる。
3・シートに残った、いらないオートシェイプを削除する
コピペしてもらってセルの範囲などを変更すると利用できます。
Sub 残ったオートシェイプの削除()
Dim sh1 as worksheet
Set sh1 = thisworkbook.sheet(“sheet1”)
Sh1.Activate
Range("C1").Select ‘ ←オートシェイプを付けたときに、データベース用に加工するセル
Selection.ClearContents
Range("D1").Select ‘←データベースから復元したときに、オートシェイプを指示するセル
Selection.ClearContents
Dim 範囲 As Range
Dim myShape As Variant
Set 範囲 = Range("A1:B1”) ‘←オートシェイプを付けるセルの範囲
For Each myShape In ActiveSheet.Shapes
If Not Intersect(Range(myShape.TopLeftCell, myShape.BottomRightCell), 範囲) Is Nothing Then
myShape.Delete
End If
Next
End Sub
4・新しくオートシェイプをつける
これも同じく、コピペすればセルの指定範囲を変更すれば利用できます。
NGの場合は、指定セルの範囲を変更して下さい。
Sub OKのオートシェイプを表示()
Dim sh1 as worksheet
Set sh1 = thisworkbook.sheet(“sheet1”)
Sh1.Activate
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Call残ったオートシェイプの削除
Range("A1") = "OK" ←NGはB1セル
With Range("A1:A1") ←NGはB1セル
ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height).Select
Selection.ShapeRange.Fill.Visible = msoFalse
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0) ←オートシェイプの色を変えるのここ
.Transparency = 0
End With
End With
Range("C1").Value = "OK"
Range("A1").Activate
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
楽を追及するのが、VBA
さらにこのオートシェイプの表示をさせるのに
ダブルクリックは面倒臭いから、
右クリックでオートシェイプが出る様にすると
非常に楽。
もう一度言います。
非常に楽です。