No.1
- 回答日時:
品番が入力されているセルにコメントを挿入し、そのコメントの書式設定から
[色と線]-[塗りつぶし]-[塗りつぶし効果]で画像を指定します。
セルの上にマウスポインタを当てると、画像が表示されます。
この回答への補足
ご回答ありがとうございました。
そういったやり方もあるんですね。
質問が悪かったのかもしれませんが、これはセルに対して画像を確認したいときにいいですよね。
私は、いくつかの品番をリストで選択できるようになっていて、これにリンクして別シートに選択した品番が出てくるようになってるんですが、そこに画像を簡単に貼り付けたいのです。挿入-図-ファイルで取り込んでるんですが、いくつもあると時間がかかってしまうので、何かいい方法はありますか?
No.2
- 回答日時:
> いくつかの品番をリストで選択し、これにリンクして別シートに選択した品番が
> 出てくるようになっているんですが、そこに画像を簡単に貼り付けたい。
いまいち内容が把握できませんが、下記のような操作は参考になりませんか?
<前提>
・Sheet2のA2:A20に品番リストがあります。
・画像ファイルはみな同じフォルダにあり、ファイル名は商品コードと同じです。
・Sheet2のA1には"Clear"と入力し、A1:A20に"List"という名前を設定します。
・Sheet1のA1に入力規則(リスト。参照範囲:=List)が設定されています。
Sheet1のシートタブを右クリックして「コードの表示」を選択し、下記モジュール
を記述します。
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FileName
If Target.Address <> "$A$1" Then Exit Sub
Application.ScreenUpdating = False
On Error GoTo Pfm:
ActiveSheet.Shapes("Pic").Cut
If Target.Value = "Clear" Then End
Pfm:
FileName = "C:\xxxxxxxx\" & Target.Value & ".jpg"
'C:\xxxxxxxx の部分には実際の画像ファイルフォルダのフルパスを記述します。
Sheets("Sheet2").Select
ActiveSheet.Pictures.Insert(FileName).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100 '表示する画像の縦サイズです。
Selection.Copy
Selection.Cut
Sheets("Sheet1").Select
Range("C1").Select
ActiveSheet.Paste
Selection.Name = "Pic"
Application.ScreenUpdating = True
Range("D2").Select
End Sub
<動作>
・Sheet1のA1で品番を選択すると、C1に画像が表示されます。
この回答への補足
ありがとうございます。そういうイメージでした。
でも、もう1回お聞きしてもよろしいですか?
この場合、同じシート内で入力規則を設定したセルを元に画像が表示されるんですよね。
例えば「Sheet1」内で、入力規則を使って品番を選択し、別のシート「Sheet2」のなかのセルに品番が表示されるようにリンクさせていて、そのSheet2に画像を挿入したいのですが。
応用ができなくてすみません。
教えてください。
No.3
- 回答日時:
> Sheet1内で入力規則を使って品番を選択し、Sheet2の中のセルに品番が表示され
> るようにリンクさせ、そのSheet2に画像を挿入したい
私もマクロはあまり得意なほうではありませんので、パッチワークのような方法に
なってしまいましたし、表示させるシート名も異なってしまうのですが....^_^;
<前提>
・Sheet2のA2:A20に品番リストがあります。
・画像ファイルはみな同じフォルダにあり、ファイル名は商品コードと同じです。
・Sheet2のA1には"Clear"と入力し、A1:A20に"List"という名前を設定します。
・Sheet1のA1に入力規則(リスト。参照範囲:=List)が設定されています。
ここまでは前回と同じです。以下、追加の前提です。
・Sheet3のA1に =IF(Sheet1!A1="Clear","",Sheet1!A1) という数式を入れます。
Sheet1のシートタブを右クリックして「コードの表示」を選択し、下記モジュール
を記述します。
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FileName
Application.ScreenUpdating = False
Application.Run "SetCell"
If Target.Address <> "$A$1" Then Exit Sub
On Error GoTo Pfm:
Sheets("Sheet3").Shapes("Pic").Cut
If Target.Value = "Clear" Then End
Pfm:
FileName = "C:\xxxxxxxx\" & Target.Value & ".jpg"
Sheets("Sheet2").Select
ActiveSheet.Pictures.Insert(FileName).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100
Selection.Copy
Selection.Cut
Sheets("Sheet3").Select
ActiveSheet.Paste
Selection.Name = "Pic"
Sheets("Sheet1").Select
Range("A1").Select
Application.Run "SetCell"
Application.ScreenUpdating = True
End Sub
そのまま[挿入]-[標準モジュール]で "Module1"を挿入し、次のように記述してか
ら VB Editor を閉じます。
'
Sub SetCell()
Sheets("Sheet2").Select
Range("A1").Select
Sheets("Sheet3").Select
Range("C1").Select
End Sub
<動作>
・Sheet1のA1で品番を選択すると、Sheet3のA1にその品番が表示され、同じシー
トのC3に画像が表示されます。
この回答への補足
遅くに、早速のご回答ありがとうございました。
できました。うれしいです。
また、初歩的なことでお聞きしたいんですが・・・
いま「Sheet3」の1箇所に挿入できました。
これが「Sheet1」で、いくつも入力画面があって
それを「Sheet3」で並べたいのですが。
あと、「Sheet1」で、その選択セルの内容を消した場合エラーになってしまうんですけど、それを回避できますか?
何度もすみません。
No.4
- 回答日時:
> Sheet1で選択セルの内容を消した場合エラーになってしまう
消さないで、リストの中の Clear を選択してください。
> Sheet1でいくつも入力画面があって、それをSheet3で並べたい
選択セルと表示セルの位置関係がわかりませんので、適当に設定しています。
シート名もわかりやすいように変更しました。
(おかげで説明は紛らわしいデス。^^;)
Sheet1 → 選択、 Sheet2 → List、 Sheet3 → 表示
<前提>
・基本的には前回と同じですが、入力規則(リスト)は A1:A5 に設定されています。
・表示(旧Sheet3)のA1に入れた数式(=IF(Sheet1!A1="Clear","",Sheet1!A1) という
数式は不要です。
・表示シートで品番を表示するセルは5つです。それぞれのセルに次のような名前
をつけてください。
選択シート(旧Sheet1)のA1で選択された品番を表示するセルの名前: NMA1
選択シート(旧Sheet1)のA2で選択された品番を表示するセルの名前: NMA2
というように、"NM" と 選択シートのセル番地を組み合わせた名前にします。
・選択シートのタブから以下のマクロを記述します。
・前回の標準モジュールに記述したマクロは使用しませんので、削除します。
※画面左のツリーの"Module1"上で右クリックし、[Module1の解放]-[いいえ]。
'
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jump, FileName
Application.ScreenUpdating = False
If Target.Column <> 1 Then Exit Sub 'A列以外は処理しません
If Target.Row > 5 Then Exit Sub '5行目までしか処理しません
Jump = "NM" & WorksheetFunction.Substitute(Target.Address, "$", "")
Worksheets("List").Select
Application.Goto ActiveSheet.Range("A1"), True
Worksheets("表示").Select
Application.Goto Reference:=Jump
Selection = Target.Value
If Target.Value = "Clear" Then Selection = ""
Application.Goto ActiveSheet.Range(Selection.Address).Offset(0, 2)
On Error GoTo Pfm:
Sheets("表示").Shapes("Pic" & Jump).Cut
If Target.Value = "Clear" Then GoTo Fin
Pfm:
FileName = "C:\...........\" & Target.Value & ".jpg"
Sheets("List").Select
ActiveSheet.Pictures.Insert(FileName).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100
Selection.Copy
Selection.Cut
Sheets("表示").Select
ActiveSheet.Paste
Selection.Name = "Pic" & Jump
Application.Goto Reference:=Jump
Fin:
Sheets("選択").Select
Application.ScreenUpdating = True
End Sub
<動作>
・選択シートのA1:A5で品番を選択すると、表示シートの指定セルにその品番が表示
され、その2つとなりのセルに画像が表示されます。
No.5
- 回答日時:
昨夜の回答(No.4)のマクロ部分の差し替えです。
・選択シートで"Clear"を選ばずにセル内容を削除してもエラーになりません。
・選択シートの選択用セルを個別に定義できるようにしましたので、連続セルで
なくても定義しやすくなりました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jump, FileName
Select Case Target.Address
Case Is = "$A$1", "$A$2", "$A$3", "$A$4", "$A$5" '←対象セル定義
GoTo OK
Case Else
Exit Sub
End Select
OK:
If Target.Value = "" Then Target.Value = "Clear"
Application.ScreenUpdating = False
Jump = "NM" & WorksheetFunction.Substitute(Target.Address, "$", "")
Worksheets("List").Select
Application.Goto ActiveSheet.Range("A1"), True
Worksheets("表示").Select
Application.Goto Reference:=Jump
Selection = Target.Value
If Target.Value = "Clear" Then Selection = ""
Application.Goto ActiveSheet.Range(Selection.Address).Offset(0, 2)
On Error GoTo Pfm:
Sheets("表示").Shapes("Pic" & Jump).Cut
Pfm:
If Target.Value = "Clear" Then GoTo Fin
FileName = "C:\Z_Graphic\Illust\CG_Girls\" & Target.Value & ".jpg"
Sheets("List").Select
ActiveSheet.Pictures.Insert(FileName).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100 'Sheet3する画像の縦サイズです。
Selection.Copy
Selection.Cut
Sheets("表示").Select
ActiveSheet.Paste
Selection.Name = "Pic" & Jump
Fin:
Application.Goto Reference:=Jump
Sheets("選択").Select
Application.ScreenUpdating = True
End Sub
この回答への補足
またも早速のご回答ありがとうございます。
でも、どこが悪いのか何度やっても実行がとまらないんですが。。。?
選択シートA1~A5が、入力できる画面ですよね。
それにたいして表示される画像は表示シートでどこのセルにでてくるのでしょう?
何度もお手数おかけしてすみません。
No.6
- 回答日時:
> 表示される画像は表示シートでどこのセルにでてくるのでしょう?
回答No.4の<前提>と<動作>を改めて記述します。(一部手を加えました)
<前提>
1)入力規則は、選択シートの A1:A5 の5つのセルに設定されているとします。
2)表示シートでは、5つのセル(任意)に次のような名前をつけてください。
選択シートのA1で選択された品番を表示したいセルを選択して、名前ボック
スに NMA1 と入力して [Enter]。
選択シートのA2で選択された品番を表示するセルには NMA2 という名前。
このように、5つとも "NM" と "選択シートのセル番地"を組み合わせた名前
にします。
3)選択シートのタブから、回答No.5のマクロを記述します。
4)前回"標準モジュール"に記述したマクロは使用しません。
<動作>
選択シートのA1:A5で品番を選択すると、表示シートで指定したセルにその品番が
書き込まれ、その2つ右隣りのセルに画像が表示されます。
この回答への補足
できました。ありがとうございます。
シート名とセルの場所を変えてやってみたらどうしても「入力した文字列は参照名または定義名として正しくありません」
"No.4記述の16行目"Application.Goto Reference:=Jumpのところで止まってしまいます。どこがだめなのでしょう?
あと選択シートでいくつかセルが指定できるように、そのセルに合わせてListシートにもいくつもリストがある場合にはどこをなおしたらいいのでしょうか?
ほんとに、何度も何度もすみません。
とても助かっています。
No.7
- 回答日時:
> エラーの問題は解決しました。
表示シートの品番表示用セルに、ちゃんと名前が設定されていなかったのではないでしょうか。
名前ボックスに入力するときにIMEが日本語モードになっていると、表示は半角でも一度の[Enter]で
は入力確定されません。
名前を設定するときは、[Enter]で名前が名前ボックスの中央に表示されるのを確認してください。
> 選択シートでいくつかセルが指定できるように、そのセルに合わせてListシートにもいくつも
> リストがある場合
選択シートのA1:A5で表示されるリストがそれぞれ異なる場合でしたら、マクロの修正ではなく、
Listシートの各リスト範囲に名前をつけ、選択シートのA1:A5の各セルの参照先を変更すればよいで
しょう。
でも・・・・・
リストごとにファイルの保存場所が異なるというのでしたら、マクロも含めた修正をしなくてはなり
ません。
この場合は複雑になりますが、次のようにすれば何とか.....。
1)ListシートのA2:Axxに選択シートA1用のリストを作成します。また、ListシートのA1にはそれらの
ファイルの保存ディレクトリのフルパスを入力します。(C:\............\)
B列以降も、リストの種類数だけ同じように入力します。
ListシートのA1とA4が同じリストを使い、A2とA3も別な同一リスト、A5は更に別なリスト、という
場合は3つのリストになりますね。1行目にはそれぞれのフォルダのフルパスを忘れずに。
2)各リスト範囲に名前をつけます。
・選択シートのA1が使うリスト範囲につける名前: ListA1
・選択シートのA2が使うリスト範囲につける名前: ListA2
・選択シートのA3が使うリスト範囲につける名前: ListA3
・選択シートのA4が使うリスト範囲につける名前: ListA4
・選択シートのA5が使うリスト範囲につける名前: ListA5
例えばA1とA4に同じリストを使う場合は、そのリスト範囲に2つの名前を設定してください。
つまり、一度リスト範囲を選択して ListA1 という名前を設定し、再び同じ範囲に ListA4 という 名前をつけます。
3)表示シートで品番を表示するセルにつける名前は、全回と同じです。
4)一部修正した次のマクロを使います。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim JumpToCode, JumpToList, FileName
Select Case Target.Address
Case Is = "$A$1", "$A$2", "$A$3", "$A$4", "$A$5"
GoTo OK
Case Else
Exit Sub
End Select
OK:
If Target.Value = "" Then Target.Value = "Clear"
JumpToCode = "NM" & WorksheetFunction.Substitute(Target.Address, "$", "")
JumpToList = "List" & WorksheetFunction.Substitute(Target.Address, "$", "")
Application.ScreenUpdating = False
Application.Goto Reference:=JumpToCode
Selection = Target.Value
If Target.Value = "Clear" Then Selection = ""
Application.Goto ActiveSheet.Range(Selection.Address).Offset(0, 1)
On Error GoTo Pfm:
Sheets("表示").Shapes("Pic" & JumpToCode).Cut
Pfm:
If Target.Value = "Clear" Then GoTo Fin
Application.Goto Reference:=JumpToList
Application.Goto ActiveSheet.Cells(Selection.Row - 1, Selection.Column)
FileName = Selection.Value & Target.Value & ".jpg"
Sheets("List").Select
Application.Goto ActiveSheet.Range("A1"), True
ActiveSheet.Pictures.Insert(FileName).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100
Selection.Copy
Selection.Cut
Sheets("表示").Select
ActiveSheet.Paste
Selection.Name = "Pic" & JumpToCode
Fin:
Application.Goto Reference:=JumpToCode
Sheets("選択").Select
Application.ScreenUpdating = True
End Sub
この回答への補足
いつもすばやいご回答ありがとうございます。
「アプリケーション定義またはオブジェクト定義のエラー」となって、"Application.Goto ActiveSheet.Cells(Selection.Row - 1, Selection.Column)"のところで止まってしまいます。
以前ListシートA1にあった"Clear"の文字はパス名に変更でいいですよね。
すみません。
No.8
- 回答日時:
私の説明がまずかったのかもしれませんね。
m(__)m名前をつける表範囲に、パスを入力したセル(A1 や B1) が含まれていませんか?
名前の範囲は A2:Axx 、B2:Bxx、.....です。
これで、ちゃんと動けばいいですね。
あと、
・フルパスの最後には必ず \ をつけてください。
・マウスだけで操作できるように、リストのA2やB2には Clear という項目を入れて
おいたほうがよいと思います。
この回答への補足
ありがとうございました。できました(^o^)
パスを入力したセルが含まれてました^m^。
またお聞きしたいのですが
・画像のファイルの中にあるフォルダ内の画像はjpg画像だけど、あるフォルダ内の画像はbmpの画像が入っていた場合はどうすればいいのでしょう?
(応用きかなくてすみません。)
・選択セルにリストはあるのですが、式が入ってる場合(例えばVlookupとかの関数)はだめなんですよね?
No.9ベストアンサー
- 回答日時:
> あるフォルダ内の画像はjpgで、あるフォルダ内はbmpという場合はどうすれば?
<対応策1>
リストの品番に拡張子もつけておき、
FileName = Selection.Value & Target.Value & ".jpg"
の部分の最後の & 以降を削除します。
<対応策2>
回答No.7のモジュールで、
FileName = Selection.Value & Target.Value & ".jpg" の部分を
FileName = Selection.Value & Dir$(Selection.Value & Target.Value & ".*")
に書き換えます。
いずれの方法でも、同じフォルダ内に異なる拡張子のファイルがある場合にも対応
できます。
> 式が入ってる場合(例えばVlookupとかの関数)はだめなんですよね?
どこにどのような式があるのかわかりませんが、試してごらんになられたらいかが
でしょうか。
この回答への補足
いつも、ありがとうございます。完璧です。
例えば、選択シートセルC1に"Aプラン、Bプラン"と選択できるようになっていて、A1~A5のセルにはそれぞれのプランに合わせて品番が決まって(IF関数などの式が入っています。例:セルA1はAプランの時にはClearが表示され、Bプランの時には、ある品番が表示されます。)このように、セル内に関数が入っている場合は、表示シートに反映されないのですが。できるようになりますか?
いつも無理いってすみません。
No.10
- 回答日時:
一応今回の回答ですが........
Private Sub Worksheet_Change(ByVal Target As Range)
で始まるマクロは、セル内容が直接編集されて変化した場合に動作するもので、
他のセルの変化によって自動的に表示変更された場合(例えばVLOOKUPの結果など)
では作動しません。
これまで記述させていただいたマクロは、A1:A5が変更入力されたら処理を行なう
ものですが、おっしゃるような条件では、C1などが変更されたときに処理すること
になりますので、マクロの内容を基本的に変更しなければなりません。
ごめんなさいね。
回答させていただくたびに、「実際はこういう内容なのです」を小出しにされて
いらっしゃいますが、本来は様式の内容や条件などの環境を当初からひととおり
提供なさるのが筋なのではないかと思います。
私も、そう思っていながらも何度か拙い回答をさせていただきましたが、この辺が
潮時なのかも知れません。
ご自身のお近くにもマクロを操作されるかたがきっといらっしゃると思いますので、
そういうかたがたにこれまでの経緯を説明されれば、最後のご要望もきっと叶えら
れるものと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) 余計なお世話的な「入力規則」?対策は? 2 2023/01/14 12:39
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- その他(Microsoft Office) 複数の写真を1枚に印刷 5 2023/05/05 22:41
- Visual Basic(VBA) tatsumaru77様 昨日回答して頂いたものです。 すみませんが、昨日の質問で1つ補足があります 1 2022/05/15 15:06
- Excel(エクセル) VBAで複数のExcelを1つのExcelにまとめる 1 2022/09/04 11:08
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報