
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も見ています
-
EXCEL VBAで 図形を中央寄せに関して質問です
Excel(エクセル)
-
エクセルVBA 画像を貼り付けるセル位置を指定する方法
Excel(エクセル)
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
-
4
VBAによるセル内の画像の位置調整
Excel(エクセル)
-
5
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
6
VBA Shapes コピーと名前
Excel(エクセル)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
Excelで挿入した図をセルの中央に配置したいです
Excel(エクセル)
-
10
Excel(VBA)
Excel(エクセル)
-
11
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
12
VBA 同じ名前のオブジェクトを選択したいのですが
Visual Basic(VBA)
-
13
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
14
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
15
VBA 図形グループ化後オブジェクト名取得
PowerPoint(パワーポイント)
-
16
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
17
VBAでセルを指定した画像のコピー&ペーストを繰り返したい
Excel(エクセル)
-
18
エクセルで写真の挿入 セルの中央に写真を挿入する方法を教えてください。 (画像挿入→画像選択→デカイ
Excel(エクセル)
-
19
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
20
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
sinカーブの表示のさせ方
-
PreviewKeyDownイベントが2回...
-
JANコードとPOSコードは同じ?
-
access2021 VBA メソッドまたは...
-
Exel VBA 別ブックから該当デ...
-
Excel VBAでOpenTextのFieldInf...
-
Excelシート上で右クリックがで...
-
VBAでファイルオープン後にコー...
-
JavaScriptの定数名が取り消し...
-
VBA ユーザーフォームの印刷に...
-
【VB6】実行ファイルとした後、...
-
access2003 クエリSQL文に...
-
SQL
-
ACCESSで、履歴事項を管理する...
-
◾️Excel VBA 統合について Cons...
-
エクセル VBA 同じ内容のセル...
-
オートフィルタで抽出結果に 罫...
-
RS-232の ボーレイト変更がで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1日に1人がこなせるプログラム...
-
access2021 VBA メソッドまたは...
-
JANコードとPOSコードは同じ?
-
Exel VBA 別ブックから該当デ...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
オートフィルタで抽出結果に 罫...
-
PreviewKeyDownイベントが2回...
-
エクセルに見えない文字(JISX0...
-
VBAでファイルオープン後にコー...
-
Excelシート上で右クリックがで...
-
変数名「cur」について
-
Excel VBA素人です。VBAで図形...
-
【VB6】実行ファイルとした後、...
-
VBA 現在のセル番地を記憶、復...
-
COBOLの文法
-
ASCIIコードを文字に変換したい
-
wechatアプリについての質問で...
おすすめ情報