
エクセルにて、"□"または"■"の入力された未結合のセルをダブルクリックした時には"□"↔"■"の切り替え、横10,縦1の結合セルをダブルクリックした時には写真の貼り付けをしたいのですが、下記式では"□"↔"■"の切り替えはできますが、写真の貼り付けができません。
元々別々で作成していたものですが、同じイベントを並べることができないため、どうにかして一つにまとめようとしてるのですが、手詰まってしまいました。
どうかご指導お願いいたします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Target.Columns.Count = 1 Then End
Select Case Target.Value
Case "□": Target.Value = "■"
Case "■": Target.Value = "□"
Case Else: Exit Sub
End Select
Cancel = True
If Not Target.Columns.Count = 10 And Target.Rows.Count = 1 Then Exit Sub
Application.ScreenUpdating = False
SendKeys "C:\{ENTER}"
For Each c In Selection
Set cm = c.MergeArea
If c.Address = cm.Item(1).Address Then
If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub
With Selection
ActiveSheet.Shapes(.Name).LockAspectRatio = msoFalse
.Left = cm.Left
.Top = cm.Top
.Height = cm.Height
.Width = cm.Width
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.Weight = 1.25
.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
.Placement = xlFreeFloating
End With
End If
Next
Set cm = Nothing
End Sub
No.2ベストアンサー
- 回答日時:
#1
ざっくりで回答してしまいましたが、
確認するとFor Each C In Selectionなども不要かな?
結合セル部分
If Not Target.Columns.Count = 10 And Target.Rows.Count = 1 Then Exit Sub
Set cm = Selection(1).MergeArea
If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub
Application.ScreenUpdating = False
With Selection
ActiveSheet.Shapes(.Name).LockAspectRatio = msoFalse
.Left = cm.Left
.Top = cm.Top
.Height = cm.Height
.Width = cm.Width
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.Weight = 1.25
.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
.Placement = xlFreeFloating
End With
Application.ScreenUpdating = True
Set cm = Nothing
ダメかな?
何度も修正ありがとうございます。
こちらも無事に作動してくれました。
周りでコードを組める人がおらず、仕事の隙間時間に色々なサンプルコードを組み合わせて作っていたもので、正直なところ命令の内容が把握しきず、要不要がわからないまま作成してました。
今回の手詰まりで、きちんと内容を理解する事が大事だと実感しました。
何度も質問をしないよう、勉強を頑張りたいと思います。
本当にありがとうございました。
No.1
- 回答日時:
こんにちは
添削するとこんな感じかな?
If Target.Count = 1 Then
Select Case Target.Value
Case "□": Target.Value = "■"
Case "■": Target.Value = "□"
Case Else: Exit Sub
End Select
Cancel = True
End If
If Not Target.Columns.Count = 10 And Target.Rows.Count = 1 Then Exit Sub
Application.ScreenUpdating = False
SendKeys "C:\{ENTER}"
For Each C In Selection
Set cm = C.MergeArea
If C.Address = cm.Item(1).Address Then
If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub
With Selection
ActiveSheet.Shapes(.Name).LockAspectRatio = msoFalse
.Left = cm.Left
.Top = cm.Top
.Height = cm.Height
.Width = cm.Width
.ShapeRange.Line.Visible = msoTrue
.ShapeRange.Line.Weight = 1.25
.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
.Placement = xlFreeFloating
End With
End If
Next
Set cm = Nothing
変数は宣言したほうが良いかも・・・
Application.ScreenUpdating はさほど強い命令では無いのですが
処理後、Trueを設定した方が良いと思います。
SendKeysは不要なのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) Worksheet_Change 4 2023/03/12 21:54
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報