
以下コードは、以下の内容のマクロを、2つ同じ種類の物を連続して
書いただけです
当該マクロを、もう少し簡略して書くことはできますか?
アドバイス等でも良いので、教えて下さい
【マクロ内容】
・画像を作成
・画像にマクロを登録する
【コード】
Sub sample()
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.Name = "あいうえお"
With .TextFrame.Characters
.Text = "不要行削除"
.Font.Size = 16
End With
.Top = Range("d1").Top
.Left = Range("d1").Left
End With
ActiveSheet.Shapes("あいうえお").OnAction = "copy"
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.Name = "かきこ"
With .TextFrame.Characters
.Text = "重複"
.Font.Size = 16
End With
.Top = Range("h1").Top
.Left = Range("h1").Left
End With
ActiveSheet.Shapes("かきこ").OnAction = "かきくけこ"
End Sub
No.2ベストアンサー
- 回答日時:
No1の方のアドバイスに従って、修正してみました。
Sub samaple2()
Call my_shape("あいうえお", "不要行削除", "d1", "copy")
Call my_shape("かきこ", "重複", "h1", "かきくけこ")
End Sub
Sub my_shape(name As String, text As String, rng As String, act As String)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.name = name
With .TextFrame.Characters
.text = text
.Font.size = 16
End With
.Top = Range(rng).Top
.Left = Range(rng).Left
End With
ActiveSheet.Shapes(name).OnAction = act
End Sub
No.3
- 回答日時:
こういう質問は得意(元情報システム部)なのですが、歳を取って長いコードをかくのが苦手なので GoogleGemini に丸投げしまし。
以下はその回答です。以下に、ご提示いただいたコードを簡略化する例と、さらに応用的な方法をご紹介します。
1. 繰り返し処理と配列の活用
VBAでは、Forループを使って同じ処理を繰り返すことができます。
また、配列を使って複数のオブジェクトの情報をまとめて管理することで、コードを簡略化できます。
Sub sample()
Dim buttonNames As Variant
Dim buttonTexts As Variant
Dim buttonActions As Variant
Dim positions As Variant
Dim i As Long
' 各ボタンの情報を配列に格納
buttonNames = Array("あいうえお", "かきこ")
buttonTexts = Array("不要行削除", "重複")
buttonActions = Array("copy", "かきくけこ")
positions = Array("d1", "h1")
' 繰り返し処理でボタンを作成
For i = 0 To UBound(buttonNames)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.Name = buttonNames(i)
With .TextFrame.Characters
.Text = buttonTexts(i)
.Font.Size = 16
End With
.Top = Range(positions(i)).Top
.Left = Range(positions(i)).Left
End With
ActiveSheet.Shapes(buttonNames(i)).OnAction = buttonActions(i)
Next i
End Sub
このコードでは、ボタンの名前、テキスト、マクロ名、配置場所をそれぞれ配列に格納し、Forループを使ってまとめて処理しています。
これにより、ボタンの数が増えてもコードの変更箇所を最小限に抑えることができます。
2. 関数化
ボタンの作成処理を関数として独立させることで、コードの可読性を高めることができます。
Sub sample()
CreateButton "あいうえお", "不要行削除", "copy", "d1"
CreateButton "かきこ", "重複", "かきくけこ", "h1"
End Sub
Function CreateButton(name As String, text As String, action As String, position As String)
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.Name = name
With .TextFrame.Characters
.Text = text
.Font.Size = 16
End With
.Top = Range(position).Top
.Left = Range(position).Left
End With
ActiveSheet.Shapes(name).OnAction = action
End Function
このコードでは、CreateButtonという関数を作成し、ボタンの情報を引数として渡しています。
これにより、sampleマクロのコードが簡潔になり、処理の流れを把握しやすくなります。
3. クラスの活用 (応用)
より高度な方法として、クラスを使ってボタンオブジェクトを定義することもできます。
クラスを使うことで、ボタンのプロパティやメソッドをまとめて管理でき、コードの再利用性が高まります。
' クラスモジュール (ButtonClass)
Public name As String
Public text As String
Public action As String
Public position As String
Public Sub Create()
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 60, 60, 60, 60)
.Fill.ForeColor.RGB = RGB(220, 220, 220)
.Line.ForeColor.RGB = RGB(220, 220, 220)
.Name = name
With .TextFrame.Characters
.Text = text
.Font.Size = 16
End With
.Top = Range(position).Top
.Left = Range(position).Left
End With
ActiveSheet.Shapes(name).OnAction = action
End Sub
' 標準モジュール
Sub sample()
Dim button1 As ButtonClass
Set button1 = New ButtonClass
button1.name = "あいうえお"
button1.text = "不要行削除"
button1.action = "copy"
button1.position = "d1"
button1.Create
Dim button2 As ButtonClass
Set button2 = New ButtonClass
button2.name = "かきこ"
button2.text = "重複"
button2.action = "かきくけこ"
button2.position = "h1"
button2.Create
End Sub
このコードでは、ButtonClassというクラスを作成し、ボタンの情報をプロパティとして定義しています。
Createメソッドでボタンの作成処理を行い、sampleマクロでクラスのインスタンスを作成してボタンを生成しています。
これらの方法を組み合わせることで、より効率的で保守性の高いマクロを作成することができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 以下のコードを実行しても、オブジェクト変数または、withブロック変数が設定されていませんとエラーが 1 2024/03/07 16:21
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Vba SelStart、SelLen教えてください教えてください 1 2024/04/25 17:12
- Visual Basic(VBA) マクロの記録を使用したマクロの実行について 2 2024/06/28 17:20
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) Excel VBA マクロ シート名を変えずにA列にあるセル名の名前でファイルの分割をしたいです 3 2024/02/05 22:10
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/09/21 13:01
- Visual Basic(VBA) Excel VBA 文字列のセルを反映させたいです 2 2024/02/24 00:06
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- その他(Microsoft Office) 以下マクロの処理を最終行まで処理されるようにしたいです。 以下マクロですと最初の5行のA~D列をそれ 4 2023/12/07 11:48
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】大変な警告
【大喜利】「今このパソコンは大変危険な状態です」という警告メッセージを無視してパソコンを開いたら、こんなことが起こった
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
テレビやラジオに出たことがある人、いますか?
テレビやラジオに取材されたり、ゲスト出演したことある方いますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
【ExcelVBA】UTF-8(BOM無)でCSV保存するには?
Excel(エクセル)
-
【マクロ】Ifとwith ステートメントにて分からない部分があります
Excel(エクセル)
-
考えた式の戻り値が期待通りにならない
Excel(エクセル)
-
-
4
(マクロ)値を返す時は subでもfunctionでもどちらでも良いのでしょうか?
Excel(エクセル)
-
5
45490がどうして
Excel(エクセル)
-
6
Excel いい方法教えてください。
Excel(エクセル)
-
7
エクスプローラーで見ることはできますか
Excel(エクセル)
-
8
エクセルの数式につきまして
Excel(エクセル)
-
9
-1234 を (1234) と表記する由来は?
Excel(エクセル)
-
10
Excelの数式の効率化について
Excel(エクセル)
-
11
Excelの数値の小数点表示について質問です
Excel(エクセル)
-
12
【マクロ】functionプロシージャの、変数について
Excel(エクセル)
-
13
エクセルを使用して、円周率を表示させる方法
Excel(エクセル)
-
14
Excelの時刻の不思議
Excel(エクセル)
-
15
フィルター時の、別の列に書いてある数字の表に現れた個別の数字の数量のみを表す式を教えてください。
Excel(エクセル)
-
16
UNIQUE関数、配列数式を使わずに品名ごとの集計を求めたい
Excel(エクセル)
-
17
excelVBAについて。
Excel(エクセル)
-
18
excelVBAについて。
Excel(エクセル)
-
19
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
20
【マクロ】複数の日付データをYYYY/MM/DDに読替えて、別ブックへ転記したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでの文字入力について
-
Excelのデーターバーについて
-
マクロを実行すると、セル範囲...
-
【マクロ】シート追加時に同じ...
-
【マクロ】Call関数で呼び出し...
-
カーソルを合わせてる時のみ行...
-
別のシートの指定列の最終行を...
-
システムファイルについて
-
エクセルで、数字の下4桁の0を...
-
Excelのマクロが表示できない
-
スプレッドシートでの数値集計
-
自動的に日付入力 応用
-
エクセルの設定、下へスクロー...
-
UNIQUE関数の代用
-
Excel 日付の表示が直せません...
-
エクセルでA1を参照してその文...
-
VBA の単語の意味を教えて下さい。
-
Excel関数の解決方法
-
エクセルの数式について教えて...
-
Vbaをバッチ処理で動かす方法に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報