![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
B9に品番を入力するとA9に画像が自動挿入される所まではなんとか出来たのですが、
同じくB10,B11,B12・・・と下の行にも同じように品番を入力すれば画像が自動挿入される様にするには,どうのようにすれば良いのでしょうか?宜しくお願い致します。
A B
9 画像 品番
10 画像 品番
11 画像 品番
12 画像 品番
・
・
・
Private Sub Worksheet_Change(ByVal Target As Range)
Const ImagePath = "C:\Users\f\Desktop\画像\"
If Intersect(Target, Range("B9")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Dim codRange As Range
Set codeRange = Range("B9")
Dim picRange As Range
Set picRange = Range("A9")
Dim objPic As Picture
For Each objPic In ActiveSheet.Pictures
If objPic.Left >= picRange.Left And objPic.Left <= picRange.Left + picRange.Width _
And objPic.Top >= picRange.Top And objPic.Top <= picRange.Top + picRange.Height Then
objPic.Delete
Exit For
End If
Next
picPath = ImagePath & codeRange.Value & ".jpg"
If Dir(picPath, vbNormal) = "" Then
picRange.Cells(1, 1).Value = "画像がありません"
Else
picRange.Select
Sheets(1).Pictures.Insert(picPath).Select '画像ファイルの挿入
With ActiveSheet.Pictures(ActiveSheet.Pictures.Count).ShapeRange
.LockAspectRatio = msoFalse
.Parent.Visible = msoTrue
.Left = picRange.Left
.Top = picRange.Top
.Height = picRange.Height
.Width = picRange.Width
End With
picRange.Cells(1, 1).Value = ""
End If
Application.EnableEvents = True
End Sub
No.1ベストアンサー
- 回答日時:
例えば、セルB9:B1000を入力できるようにする場合です。
Private Sub Worksheet_Change(ByVal Target As Range)
Const ImagePath = "C:\Users\f\Desktop\画像\"
If Target.Count <> 1 Or _
Application.Intersect(Target, Range("B9:B1000")) Is Nothing Then Exit Sub '■■修正
Application.EnableEvents = False
Dim codeRange As Range 'スペルミス?
Set codeRange = Target '■■修正
Dim picRange As Range
Set picRange = Target.Offset(0, -1) '■■修正
Dim objPic As Picture
この程度で大丈夫かなと思います。
この回答への補足
有難うございます!思っている様なことが出来ました!
ちなみに、別のエクセルファイルから品番一覧をコピーして品番の列(B9)に貼りつけると画像が表示されないのですが、やはり手で入力するのとコピー&ペーストとではマクロコードは違うのでしょうか?
申し訳ないです。
No.2
- 回答日時:
>ちなみに、別のエクセルファイルから品番一覧をコピーして品番の列(B9)に貼りつけると画像が表示されないのですが、やはり手で入力するのとコピー&ペーストとではマクロコードは違うのでしょうか?
質問のコードの
If Intersect(Target, Range("B9")) Is Nothing Then Exit Sub
と
Set codeRange = Range("B9")
Set picRange = Range("A9")
を見て、B9単一セルに対する処理と判断しました。かつ、「同じくB10,B11,B12・・・と下の行にも同じように品番を入力すれば」とあるので、単一セル入力と限定して解答しました。かつコピー&ペーストのパターンまで質問からは読み取れないので書きようがないわけです(A列、B列を一緒にコピペか、B列だけ複数とか)。
そのため、解答には、
If Target.Count <> 1 Or Application.Intersect(Target, Range("B9:B1000")) Is Nothing Then
としています。複数セルの操作は「Target.Count <> 1」でキャンセルしています。
そのため、コピー&ペーストが単一セルの場合は動きますが、複数セルの場合はExitします。
一度、この部分を削除して動かしてみてはどうでしょうか。
コピー&ペーストのときというよりも、複数セルを操作したときにも対応するためには、
For Each 単一セル In Target
のようにして単一セル単位で処理するように変える必要があります。当然、意図しない複数セルを変更した場合、エラー対応や復帰の処理が必要になります。質問のコードを見ただけではなかなか手を付けられませんね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
セルを結合した時のエクセル集...
-
エクセル1行おきのセルを隣の...
-
文字列から英数字のみを抽出す...
-
excelで、空白を除いてデータを...
-
自分の左隣のセル
-
何時から何時までを○○、何時か...
-
エクセル、○が連続する回数を数...
-
エクセルで、指定の値よりも大...
-
EXCELのcountif関数での大文字...
-
エクセルで、A2のセルにA3...
-
EXCELでマイナス値の入ったセル...
-
エクセルに入力後、別シートの...
-
Excelで大量のセルに一気に関数...
-
エクセルのセル内から数字だけ...
-
一時間当たりの製造数を調べた...
-
同一セル内の重複文字を削除し...
-
Excelで項目ごとの単一セルと結...
-
【Excel】IF文「ある文字を含ん...
-
エクセル シェアの求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIF関数で、「ブランク以外を...
-
エクセル1行おきのセルを隣の...
-
文字列から英数字のみを抽出す...
-
自分の左隣のセル
-
excelで、空白を除いてデータを...
-
エクセルで、指定の値よりも大...
-
セルを結合した時のエクセル集...
-
条件付き書式の色付きセルのカ...
-
EXCELでマイナス値の入ったセル...
-
EXCELのcountif関数での大文字...
-
エクセルで、A2のセルにA3...
-
Excelで離れた位置のAVERAGEを...
-
同一セル内の重複文字を削除し...
-
エクセルで特定のセル内にだけ...
-
Excelで大量のセルに一気に関数...
-
セルの内容表示が邪魔になる
-
エラー「#REF」の箇所を置き換...
-
エクセルで年月日から月日のみへ
-
【Excel】4つとばしで合計する方法
-
週の労働時間を計算するエクセル
おすすめ情報