[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の文字列のあるセルにオートシェイプで丸を書くマクロ』(アラフィフおやじ)
方眼紙状の表に2桁の数字が並んでいます。
ある数字は() や【】で囲まれてます。
()のセルはオートシェイプの〇で囲みたい
【】のセルは 塗りつぶした透過〇で囲みたいのですが可能でしょうか?
今は手作業でやっておりますが
100個以上あるし、毎月変わるのでマクロでできないかと相談させていただきました。よろしくお願いします。
< 使用 Excel:Excel2013、使用 OS:Windows7 >
オートシェイプはマクロで追加することができます。
その際、上からの距離、左からの距離、高さ、幅等すべてマクロで設定可能です。
また、シート内のセルのうち()や【】を探して、それが存在するセルに対して何かしらの処理を加えることは可能です。
つまり
シート内のセルを精査
⇒()や【】があれば位置、セルのサイズを取得
⇒取得した位置、サイズに合わせてオートシェイプを追加
⇒すべてのセルになるよう繰り返す
という処理で可能になります。
ただ、100個もオートシェイプを追加するとちょっとファイルサイズが大きくなり取り回しが悪くなりそうですが。
(高橋) 2019/07/27(土) 08:28
(アラフィフおやじ) 2019/07/28(日) 06:46
おはようございます ^^ 回答ではありません 新規BOOKにでもコピペしていじってみて下さい。^^;。。。何かの足しにでも ↑ ならなかったら ゴミ箱にでも。。。m(_ _)m
Option Explicit
Sub OneInstance()
Dim r As Range
Dim y As Long
Dim x As Long
With Worksheets("Sheet1")
x = 2
For y = 2 To 100 + 2
Set r = .Cells(y, x)
With .Shapes.AddShape(msoShapeOval, r.Left, r.Top, 72, 72)
.LockAspectRatio = True
If r.Height < r.Width Then
.Height = r.Height
Else
.Width = r.Width
End If
End With
Next y
End With
Set r = Nothing
End Sub
消すときは ↓ です。
Private Sub SpDelete()
Dim Sp As Object
For Each Sp In ActiveSheet.Shapes
Sp.Delete
Next
End Sub
(隠居じーさん) 2019/07/28(日) 08:16
こんばんは ^^ もう完成されたかもしれませんが 。。。作ってみました。 なにかの足しにでも ← ならないかも A^_^;
Sheet1 に 下記の様な情報が有ると仮定して。
|[A] |[B] |[C] |[D] |[E] |[F] |[G] |[H] |[I] |[J]
[1] |【32】| | | | | | | | |
[2] |【10】| | | | | | |【11】|【12】|【13】
[3] |【20】| | |【30】|【31】|【32】| | | |【99】
[4] | | | | | | | | | |
[5] | | | | | | | | | |
[6] | | |【45】| | | | | | (25)|
[7] | | |【46】| | | | (10)| | (88)|
[8] | | |【47】| | | | | | (89)|
[9] | | | | | | | | | (90)|
[10]| |【22】|【55】|【56】|【66】|【67】|【68】| | (91)|
Option Explicit
Sub OneInstance02()
Dim r As Range
Dim WF As Object
Set WF = WorksheetFunction
With Worksheets("Sheet1")
For Each r In .UsedRange
Select Case True
Case InStr(1, r.Value, WF.Unichar(12304)) <> 0
GetShapeToSheet 1, r
Case InStr(1, r.Value, WF.Unichar(40)) <> 0
GetShapeToSheet 0, r
End Select
Next
End With
Set r = Nothing
Set WF = Nothing
End Sub
Private Sub GetShapeToSheet(ByVal Flg As Long, ByVal r As Range)
Dim Tp As Single
With Worksheets("Sheet1")
Tp = 0.7
With .Shapes.AddShape(msoShapeOval, r.Left, r.Top, 72, 72)
.LockAspectRatio = True
If r.Height < r.Width Then
.Height = r.Height
.Left = r.Left + WorksheetFunction.Round((r.Width - .Width) / 2, 2)
Else
.Width = r.Width
.Top = r.Top + WorksheetFunction.Round((r.Height - .Height) / 2, 2)
End If
If Flg = 1 Then
.Fill.ForeColor.RGB = RGB(255, 255, 0)
.Fill.Transparency = Tp
End If
End With
End With
End Sub
(隠居じーさん) 2019/07/28(日) 18:24
.Line.ForeColor.RGB で線の色も指定できました。
自分だけでは、到底完成できませんでした。
本当にありがとうございました。
(アラフィフおやじ) 2019/07/29(月) 18:07
こんにちは ^^ 。。。 もうご覧になっていないかもしれませんが。よかったですね。なにかの足しには 。。。なった様で幸甚です。私も楽しく勉強させていただきました有難うございました。
Sub OneInstance02() の最後から2行目の Set r = Nothing は。。。不要だったと思います。ま!在ってもエラーには成りませんし影響もないと思いますが ^^: For Each 〜 を抜けた時点でNothingになっていました。済みません。。。 とほほ〜 m(_ _)m でわ (隠居じーさん) 2019/07/30(火) 07:36
(アラフィフおやじ) 2019/07/31(水) 05:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.