
勤務先で、Excelで作成した住所一覧から封筒あて名印刷ができるようにVBAを設定をしました。
分からないことがあり、「教えて!goo」で質問をします。
以下をご参照の上、アドバイスを頂けると大変助かります。
VBAは初心者です。
この封筒あて名印刷のExcelファイルは、当方史上の大作で完成させたいの一心です。
どうぞ、よろしくお願いいたします。
【困っていること】
料金別納表示の下半分を広告に使えると聞き、Excelの図形を組み合わせて作成しました。
コマンドボタンで表示することはできるのですが、削除の設定が出来ずに困っています。
料金別納表示をコマンドボタンで削除するコードに知識がないため、ネット検索してはコピペを繰り返すもエラー。
料金別納表示は図形なのか、画像なのかでコードが変わってくるのかも分からず、お手上げ状態です。
【Excelで作成したのは、以下の通りです】
①「sheetあ」の「A1セル」に、図形を組み合わせて料金別納表示を作り、グループ化しました。
②「sheetい」の「A1:D4セル」を結合して、中央揃えで結合しました。
③「sheetい」にコマンドボタンを作り、①の料金別納表示を②に表示させました。
【要望】
『「料金別納表示削除コマンドボタン」をクリックしたら、削除できた』を、したいのです。
料金別納表示をコマンドボタンで削除するコードに知識がないため、ネット検索してはコピペを繰り返すもエラー。
料金別納表示は図形なのか、画像なのかでコードが変わってくるのかも分からず、お手上げ状態です。
【参考までに】
①料金別納表示をコマンドボタンで表示させてるコードです。
Private Sub CommandButton14_Click() '料金別納表示広告
Sheets(あ).Range("A1").CopyPicture Appearance:=xlScreen, Format:=xlPicture 'シート「あ」の「A1セル」の画像を
Sheets(い).Paste Sheets(い).Range("A1") 'シート「い」の「A1セル」に貼り付けて
【添付ファイルの説明】
文章だけでは分かりにくいと思い、Excelの画面をコピペしました。
【その他】
料金別納表示が楕円になっていますが、あえて楕円にしてますので、そこを突っ込まれてもスルーします。

A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
既に、ご質問者のご希望に沿って、マクロを使った方法が複数回答されています。
ただ、
>コマンドボタンを作り、①の料金別納表示を②に表示させました。
>「料金別納表示削除コマンドボタン」をクリックしたら、削除できた』を、したい
というご説明が【料金別納表示と非表示(つまり削除された状態)の切り替えを行いたい】という意図なら、必ずしもマクロでなくても実現できます。
>住所一覧から封筒あて名印刷ができるようにVBAを設定をしました。
ということなので、封筒あて名印刷の部分はVBAに頼るとして、料金別納表示はチェックボックスを設けて、「料金別納表示」にチェックを入れると「(楕円の)料金別納の画像」が表示され、チェックを外すと、「料金別納の画像」が消えるという挙動を実現する方法はいかがでしょう。
https://hirogura.com/2016/05/12/post-1793/
上記のURLの「画像を自動で切り替える」方法が記載されています。このURLでは「野球チームのロゴ」の切り替えですが、これを参考にして、「別納料金画像」の「表示」と「非表示」を切り替えることにします。切り替える画像の一方を「料金別納の画像」、もう一方を「無地(白色)の画像」とし、この二つをチェックボックスの「TRUE」「FALSE」に連動させます。
仮に、チェックボックスの連動セルが「sheetあ」のL1セル、「シートあ」のL2セルで「表示」「非表示」を判定するとして、「シートあ」のL2に
=IF(Sheetあ!$L$1,"表示",非表示")を入れて、名前の定義で名前を「料金別納」、参照範囲を「=INDIRECT(Sheetあ!$L$2)」とします。
「料金別納の画像」のセルに「表示」、「無地(白色)の画像」のセルに「非表示」と名前をつけてリンク貼付けし、URLの指示に従えば、「チェックリストのチェックを外す」というワンクリックで料金別納表示の画像が消えることになるので、「削除コマンドボタンを押す」という手数と変わりません。
前述のとおり、【料金別納表示と非表示(つまり削除された状態)の切り替えを行いたい】という意図なら、この方法でもよいのではないかと思います。
goomania 様
お忙しい中、ご回答くださり、ありがとうございます。
添付して頂いたURLと、その下のご回答を参考にやってみたのですが、できないんです。
「チェックボタンでできないなら、プルダウンに画像と空白(削除した状態)でできるかも」とやってみたものの、画像の表示すらできませんでした。
原因は、当方の知識不足ですが、画像の大きさ?、貼り付け箇所セルの結合?も関係しているのか、よく分からずです。
現在は、No2のkigoshiさんとNo4のfujillinさんのお礼コメントに応急処置コードを書きました。
今後の時代の流れと共に封筒印刷することも減りますが、しれでもまだ数年は使用していくので、なんとかしてコマンドボタンに限らず、他の方法でもクリック(Wクリックでも可)だけで画像を削除できるように、勉強をしていきます。
ありがとうございました。
No.4
- 回答日時:
こんにちは
CopyPictureメソッドの場合は、エクセルが新しく画像を作成してしまうので、元のオブジェクトのプロパティなどは利用できませんね。
Paste直後に、
PicName = Selection.Name
等としておけば、貼り付けた図形のName属性を取得できます。
これで記憶しておいて、No1様の最初の方法で消去できるでしょう。
(Pictureそのものを保存しておいても良いです)
「A1セルにある画像を消去する」という方法で行うなら、
No1様の2番目の方法で、Top、Left が共に0である(=A1セルにあることを意味します)Shape要素を削除するようにすれば宜しいでしょう。
fujillin 様
お忙しい中、ご回答くださり、ありがとうございます。
2行目、
「CopyPictureメソッドの場合は、エクセルが新しく画像を作成してしまう」
これに悩んでいます。
そもそも画像(Picture数字)がかわるため、そこからヒントを頂き、またNo2のkigoshiさんの回答を参考にしながら、下記の通り応急処置をしました。
「Dim i As Long
On Error Resume Next
For i = 40 To 9999
ActiveSheet.Shapes.Range("Picture " & i).Delete
Next i」
9999まで行ったらどうなるのかな?と思いつつ、応急処置してます。
少ない数で実験をするといいんでしょうけど、まだやっていないです。
9行目、
「A1セルにある画像を消去する」をやってみたところ、できなかったんです。
当方のコードイメージとしては、
①A1セルの画像を選択(画像を選択すると四隅に小さい白い〇ができる)
②A1セルの画像を削除
なんですが、違うんでしょう。
なんとかしたいので、VBAの勉強をしていきます。
ありがとうございました。
No.3
- 回答日時:
No.2です。
全部書いちゃうと、こんなかんじですか。
Dim shCnt As Integer
Private Sub CommandButton14_Click()
Sheets(あ).Range("A1").CopyPicture Appearance:=xlScreen, Format:=xlPicture 'シート「あ」の「A1セル」の画像を
Sheets(い).Paste Sheets(い).Range("A1") 'シート「い」の「A1セル」に貼り付けて
shCnt = Sheets(い).Shapes.Count
End Sub
Private Sub CommandButton15_Click() 'コマンドボタンの名前は適宜変更してください
Sheets(い).Shapes(shCnt).Delete
End Sub
kigoshi 様
コマンドボタンの名前の付け方が分からないんです。
No1のssawatakeさんのご回答と同じことをしてみたのですが、できないんです。
6行目「xlPicture」は、「xlPicture」ですよね。
当方のVBAの知識不足から、みなさんのご回答で解決できないでいます。
申し訳ありません。
No.2
- 回答日時:
Dim shCnt As Integer
シート「い」の「A1セル」に貼り付けた処理の直後
shCnt = Sheets(い).Shapes.Count '貼りつけた図が何番目か
その他の処理
Sheets(い).Shapes(shCnt).Delete '「A1セル」に貼り付けた図を削除
ということをやりたいのでしょうか。
kigoshi 様
お忙しい中、ご回答くださり、ありがとうございます。
当方の説明が分かりにくく申し訳ありません。
3行目の「'貼りつけた図が何番目か」
料金別納表示を広告4種類作成しましたので、「貼り付けた図が何番目か」は、貼り付けた数、図を消した数だけの番数になります。
kigoshiさんの回答を参考にしながら、
「Dim i As Long
On Error Resume Next
For i = 40 To 9999
ActiveSheet.Shapes.Range("Picture " & i).Delete
Next i」
で、応急処置をしています。
9999まで行ったらどうなるのかな?と思いつつ、応急処置してます。
今後も勉強して、VBAが分からない人にもなんとか扱えるように、手間が1つでもなくなるファイルを作っていきます。
この度は、ありがとうございました。
No.1
- 回答日時:
図形に名前を付けるならば、
Activesheet.Shapes(図形の名前).Delete
シート内一括削除で構わないなら
ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.Delete
ssawatake 様
お忙しい中、ご回答くださりありがとうございます。
当方がVBA初心者なのと、Excelの機能を分かっているつもりの中途半端な知識しかないと気づかされました。
まず、
Activesheet.Shapes(図形の名前).Delete。
図形の名前の付け方が分からず、
・Excelの左上の四角いところで図形の名前を付ける
・コード内で名前を付ける
上記2点をGoogle先生の助けも借りながらやってみたものの、できませんでした。
「シート内一括削除」は、
画像が消えました!
が、同じシート状にあったコマンドボタンも消えてしまいました。
で、現在は、
「Dim i As Long
On Error Resume Next
For i = 40 To 9999
ActiveSheet.Shapes.Range("Picture " & i).Delete
Next i」
で、応急処置をしています。
9999まで行ったらどうなるのかな?と思いつつ、応急処置してます。
今後も勉強して、なんとかVBAが分からない人にも扱えるように、手間が1つでもなくなるファイルを作っていきます。
この度は、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
- Visual Basic(VBA) EXCEL VBA シート比較し〇×判定 1 2021/11/19 11:49
- Excel(エクセル) Excelのシートの表示、非表示の方法について教えてください。 4 2022/02/02 08:41
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) シート名でファイル検索する 2 2021/11/30 17:05
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Word(ワード) 相互参照で図1.1としか挿入されない 3 2021/11/16 04:17
- Visual Basic(VBA) 【VBA】ユーザーフォーム リストボックスのヘッダー設定方法 2 2021/12/02 11:15
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel:コマンドボタンの移動
-
スクロールしてもボタンを常に...
-
ShowAllDataのエラーを回避したい
-
PPTのコマンドボタンがクリック...
-
Excel VBA --- コマンドボタ...
-
Excelシート上でボタン1つで交...
-
コマンドボタンがあるかどうか...
-
マクロボタンを別のファイルで...
-
ペイントショッププロ8のツー...
-
Auto CAD の F1(ヘルプ)を機...
-
コマンドボタンで「終了ボタン...
-
Acces コマンドボタンで複数条...
-
コマンドボタンを押すたびに大...
-
閉じるボタンを左に表示したい
-
Windows10でDVD再生 アスペクト...
-
マクロ登録ボタンに色をつける
-
EXCELでNo.を変えて印刷したい
-
コマンドボタンの画像も拡大表...
-
エクセルVBA
-
コマンドボタンで印刷ボタンを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドボタンを押すたびに大...
-
Excel:コマンドボタンの移動
-
スクロールしてもボタンを常に...
-
押したボタンの位置取得(共通の...
-
Excel VBA --- コマンドボタ...
-
Accessのコマンドボタンの立体...
-
PPTのコマンドボタンがクリック...
-
コマンドボタンがあるかどうか...
-
コマンドボタンで「終了ボタン...
-
ShowAllDataのエラーを回避したい
-
エクセルVBAでOptionButtonのオ...
-
エクセルのコマンドボタンの位...
-
エクセルVBA
-
Wordでドラッグした文字列を括...
-
EXCELでNo.を変えて印刷したい
-
エクセルVBA シート上にあるコ...
-
エクセルのマクロでスライドシ...
-
Accessユーザーフォームでコマ...
-
エクセルでマクロボタンを動か...
-
エクセルでマクロを使わずに複...
おすすめ情報
VBA通のみなさんに補足をわかりやすく書き、ヒント等を頂けたらと思っていますがが、「アウトプットが出来ないと言うことは、VBA知識が乏しい」現実に、困っています。
また、ご回答をいただいても理解するのに時間がかかり、現在は応急処置中です。
例えば、
ボタン等に「名前を付ける」は、「Sheetあ」で「名前の定義」を使用し名前を付ける。
「Sheetい」に画像を反映させたとて、名前までは引き継がれない。
ここで、当方がフリーズしてしまいます。
明日と言うか今日、会社でファイルとにらめっこする時間を数分設けてみます。