Excel VBA素人です。VBAで図形をセンタリングする為のコードご存じの方教えてください。
C1:G8には文字(アルファベット)が入っています。
文字を検索し「A」のみの中央に図形の「〇」(※緑色)を付けたく、以下のコードを作ってみましたが、添付の写真のように、セルの中央に「〇」が付きません。Forループを使わない場合は上手くいくのですが。(尚、図形削除のボタンは無視してください)
図形を文字中央に移動するために必要なコード(Forループ内で)をご教示ください。
以下現状のコードです。
Sub まる()
Dim n As Integer
Dim d As Integer
s = 0
For d = 1 To 5
For n = 3 To 8
If Cells(d, n) = "A" Then
ActiveSheet.Shapes("まる").Copy
Cells(d, n).Select
ActiveSheet.Paste
End If
Next n
Next d
End Sub
素人ですので丁寧なご指導をお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは
Duplicate メソッド を使用した理想的な回答がされていますし
解決されているので余計な回答ですが
初心者との事で示されているコードに付け加え処理できる方法も回答します
貼り付けたShapeを取得する方法です
べたな方法も記憶に留めておくと良いかも知れません
Sub まる1()
Dim n As Integer
Dim d As Integer
s = 0
For d = 1 To 5
For n = 3 To 8
If Cells(d, n) = "A" Then
ActiveSheet.Shapes("まる").Copy
Cells(d, n).Select
ActiveSheet.Paste
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
.Left = Cells(d, n).Left + (Cells(d, n).Width - .Width) / 2
.Top = Cells(d, n).Top + (Cells(d, n).Height - .Height) / 2
End With
End If
Next n
Next d
Cells(d, n).Select
End Sub
追加部分
貼り付けたShapeに対して位置を指定
With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
.Left = Cells(d, n).Left + (Cells(d, n).Width - .Width) / 2
.Top = Cells(d, n).Top + (Cells(d, n).Height - .Height) / 2
End With
終了時のShape選択解除
Cells(d, n).Select
諸々で処理手順として60点くらいかも・・・ですが
ActiveSheet.Shapes(ActiveSheet.Shapes.Count)は使う場面があるかも知れませんね
返信が遅れました事お詫びいたします。
素人の私には、このコードが解りやすく今後、他の人がメンテするにしてもメンテ性が良いと感じます。今後ご指導を乞うことが有ろうかと思いますがその時にはよろしくお願いいたします。ありがとうございました。
No.1
- 回答日時:
こんにちは
セルや図形の中央を表す属性は無いので、左、上と高さ、幅などから計算します。
例えば、水平方向なら
図形.Left + 図形.Wifth /2
みたいな感じです。
それぞれの水平・垂直の中央位置が一致するように配置すれば良いことになります。
※ 図形名称「まる」という図形がシート上に存在し、それをコピーして
使用するという条件で良いものと解釈しました。
以下のような感じでできませんか?
Sub Q13599304()
Dim sp As Shape, c As Range
Const targetRange = "C1:G8" ' 対象セル範囲
Const shapeName = "まる" ' 図形名称
For Each sp In ActiveSheet.Shapes
If sp.Name = shapeName Then Exit For
Next sp
If sp Is Nothing Then MsgBox "図形がありません": Exit Sub
For Each c In Range(targetRange)
If c.Text = "A" Then
With sp.Duplicate
.Top = c.Top + (c.Height - .Height) / 2
.Left = c.Left + (c.Width - .Width) / 2
End With
End If
Next c
End Sub
早速の返信ありがとうございます。
素晴らしい。完璧です。勉強になりました。ありがとう御座いました。また何かありましたらご教示をお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel VBAでメールを送る方法について 2 2021/11/03 15:34
- Visual Basic(VBA) Excel VBAでフォルダ内の全テキストファイルの任意データを取得について 7 2021/12/18 16:00
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Visual Basic(VBA) VBA ある文字が含まれるセルの行をうまく削除出来ません 3 2021/10/30 22:07
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) EXCLE VBA シートクリックしたら該当シートコピー 1 2021/11/11 16:37
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) 条件をつけてカウントする 4 2021/12/19 20:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
過剰なオブジェクト指向脳から...
-
フィルターかけた後、重複を除...
-
sinカーブの表示のさせ方
-
WSH動作しない!!(WScript.Sle...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
1日に1人がこなせるプログラム...
-
PreviewKeyDownイベントが2回...
-
access2003 クエリSQL文に...
-
chatgptでつくってもらったコー...
-
1、Rstudioで回帰直線を求める...
-
変数名「cur」について
-
ユーザーフォームで銀行に対応...
-
VB6のComboBox関連の書き方をVB...
-
エクセルに見えない文字(JISX0...
-
多数のExcelファイルからVBAの...
-
Excel VBAについて
-
python コードについて(初学者...
-
オートフィルタで抽出結果に 罫...
-
COBOLの文法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Nullの使い方が不正です。
おすすめ情報