1. 方法の検討 2. 丸い線の表示/非表示 3. マクロコード 4. 組込方法 5. サンプルファイルのダウンロード
実用的な方法は1又は2だと思います。
1. 文字はセルに入力
楕円で文字を囲む普通に思いつきますが、EXCELの入力画面での表示は位置関係が正しくないので、印刷してみると丸がきちんと文字を囲んでくれません。
印刷プレビューで、確認しながらずらしていくんですが、これが結構面倒です。2. 楕円の中に文字を入力する オートシェイプで円形を作る→右クリックでテキストの追加で文字入れ→右クリックで書式設定を開く。
ここで、配置タブで縦横の位置を中央揃えと自動サイズ調整にチェック、余白タブの自動を消して全項目に0を入力します。
丸と文字がずれることはありませんが、文章の途中だったりすると他の文字との位置関係の調整で上と同じように苦労します。3. 丸付文字を利用する 1から20までしかありません。
しかも機種依存文字なので、Windowsコンピュータでしか使えません。
ずれることはないですが。
一般操作
オートシェイプを選択し、オートシェイプの書式設定で線の色を指定します。
「線なし」にすると線が消えます。
しかし、たくさんあるとかなり面倒な操作です。代換え案
これは丸付けではありませんが、フォームやコントロールツールボックスのオプションボタンやチェックボックスを使うとクリックだけでOn/Off操作ができて便利です。
同様なことが丸付けでもできないでしょうか?マクロを組む
オートシェイプには、マクロの起動ボタンに使える「マクロの登録」という機能があります。
これを利用して、丸い線のOn/Offをやってみます。マクロコード
線のOn(Off)は ActiveSheet.Shapes("丸1").LineVisible = True(False) でできます。このコードではシェイプの名前の付け方でグループ分けをしています。
Sub 丸付1()
With ActiveSheet.Shapes("丸1").Line '"丸1":オートシェイプの名前
.Visible = Not .Visible
End With
End Sub
1.これを標準モジュールにコピーする
2.楕円のオートシェイプの「マクロの登録」をする
3.名前を変更する。
4.クリックする毎に線のOn/Offができます。
たくさんある場合、オートシェイプ毎にコードを書くには面倒です。
Application.Callerを使うと起動ボタンの名前を取得できます。
Sub 丸付2()
With ActiveSheet.Shapes(Application.Caller).Line
.Visible = Not .Visible
End With
End Sub
上と同様に登録して下さい。
ちょっと便利でしょう!?
ここまでは単独処理。
先ほどのフォームやコントロールツールボックスの機能でいうとチェックボックスの動作になります。
では、排他処理はどうすればいいでしょうか。
セットになる楕円をグループとして考え、その中で線のOn/Offを行います。
3個セットとすれば、今までOffだったものをOnにすれば、他の二つは自動的にOffにならなければなりません。
ところで、OnだったものをOffにしたとき、全部がOffになるのか、一つはOnに変わるべきか。
常に一つはOnになっている様に考えたのが次のコードです。(Excel2000以上)
Sub 排他丸付()
'シェイプ命名規則、グループ名(自由)+分離記号("_"半角)+ナンバー(1からの連番半角)+記号("-"半角)+グループ総数(3など半角)
'例:丸1_1-5 グループ名:丸1 ナンバー:1 グループ総数:5 5個の内一つをOn とする
'単独で線のOnOffをする場合 楕円_1-1 等とつける。
'マクロの登録:右クリックメニューから、マクロの登録 排他丸付を選択しOKをおす。
Dim MyF As Boolean
Dim SCount As Long, SIndex As Long, SName As String, GName As String
Dim i As Long, Buf, SN As String
SName = Application.Caller
If InStr(SName, "-") * InStr(SName, "_") > 0 Then '起動条件:シェイプ名に"-"、"_"が含まれている
On Error GoTo ERR
Buf = Split(SName, "-")
If Not IsNumeric(Buf(UBound(Buf))) Then Exit Sub Else SCount = Buf(UBound(Buf)) 'グループ総数
Buf = Split(Buf(UBound(Buf) - 1), "_")
If Not IsNumeric(Buf(UBound(Buf))) Then Exit Sub Else SIndex = Buf(UBound(Buf)) 'ナンバー
GName = Buf(UBound(Buf) - 1) 'グループ名
Erase Buf
With ActiveSheet 'ナンバーに飛び番があるとエラーになります。
MyF = .Shapes(SName).Line.Visible
If SCount = 1 Then
.Shapes(SName).Line.Visible = Not MyF
Else
If Not MyF Then 'クリックしたシェイプの線を表示
For i = 1 To SCount
SN = GName & "_" & i & "-" & SCount
.Shapes(SN).Line.Visible = IIf(SN = SName, True, False)
Next
Else '線表示中のシェイプをクリック 次の番号の線を表示する
For i = 1 To SCount
SN = GName & "_" & i & "-" & SCount
If SIndex < SCount Then
.Shapes(SN).Line.Visible = IIf(i = SIndex + 1, MyF, Not MyF)
Else
.Shapes(SN).Line.Visible = IIf(i = 1, MyF, Not MyF)
End If
Next
End If
End If
End With
End If
Exit Sub
ERR:
If ERR.Number <> 0 Then
MsgBox "ナンバーに飛び番があるか、グループ総数が間違っています。" & vbCr & _
"グループのシェイプ名を確認して下さい", vbCritical, "排他丸付 エラー"
End If
End Sub
名前の付け方は、コード先頭のコメントに書いてあります。
丸付文字列の作成
オートシェイプで楕円を描きます。
中の文字を書きます。
書式設定-配置で縦横とも中央揃えにします。
必要に応じ、余白タブの自動のチェックを外し、数値をすべて0に打ち換えます。
マクロコードの準備
サンプルファイルと,移植先のBookを開いておき、VBE画面を開きます。
VBE画面は、メニューバーのツール-マクロ−Bisual Basic Editerとするか、シートタブを右クリックしコードの表示、あるいはAlt+F11キーで開くことができます。
プロジェクトエクスプローラ(通常右上に表示されている)で、サンプルファイルの「Mojule1」をドラッグし、移植先のBook名の上で離します。
これで、マクロコードの準備はできました。
単独丸付
特に名前をつける必要はありませんが、コピーコマンドを使った場合は同じ名前のシェイプができてしまうので要注意です。
シェイプの右クリックメニューから,マクロの登録、「丸付2」を選択し、OKを押します。排他丸付
シェイプの名前でグループ分けを行います。
間違えるとエラーになりますので、すぐに分かりますから、神経質になる必要はありません。修正すればいいのです。
書式は グループ名&_(アンダースコア)&ナンバー(半角数字)&-(ハイフン)&グループ総数(半角数字)。
【例】 楕円_1-4 楕円_2-4 楕円_3-4 楕円_4-4 の4個のグループ シェイプの右クリックメニューから,マクロの登録、「排他丸付」を選択し、OKを押します。複数シェイプの一括設定
シェイプを複数選択して書式の設定やマクロの登録を一括で設定することができます。
複数選択するには、ツールバーのオブジェクトの選択(白い矢印アイコン)を使い、囲むようにドラッグするか、Sihftキーを押しながらシェイプをクリックしていくとできます。
書式などの設定は、選択中のシェイプの一つの上で右クリックすれば、メニューから選択できます。
Marutuke.xls