advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 295 for cell filename (0.001 sec.)
cell (1170), filename (1984)
[[20230628132711]]
#score: 11157
@digest: 90291a2b5082c48329b066d1d1c462d7
@id: 94571
@mdate: 2023-07-04T08:21:56Z
@size: 13847
@type: text/plain
#keywords: imagename (84670), piccell (53629), 像名 (46273), 像画 (38744), 画像 (29024), foldername (24847), high (21338), dbjpg (20194), addpicture (16721), 像の (15130), 率= (11901), 比率 (11326), filepath (10957), height (10053), scaleheight (8891), msotrue (8828), scalewidth (8453), acell (7053), width (5961), の幅 (5882), の高 (5373), 高さ (4847), 定フ (4720), lastrow (4594), 列" (4095), 像が (3956), 縦横 (3765), 指定 (3000), 調整 (2987), 縮小 (2442), 像を (2384), filename (2225)
『VBAで指定の画像を呼び出したいです』(もっちゃん)
VBAで指定のファイルから画像を取り出す方法はありますでしょうか。 ネットで検索して、下記のURLが出てきたのですが、空しく失敗しまして,,, https://vba-gas.info/excel-vba-addpicture 私としては、画像の名前をセルに打ち込むと画像がパッ!と出てくるイメージです。 画像の拡張子はJPGで、"A1"など一つのセルに画像が収まるようにサイズも指定したいです。 可能でしょうか。 不明な点があれば再度ご返信いたします。 宜しくお願い致します。 < 使用 Excel:Excel2019、使用 OS:Windows11 > ---- 参考過去ログです。 [[20230622124713]] 『一括で画像を挿入する際に画像にハイパーリンクを』(VBA初心者) (MK) 2023/06/28(水) 13:48:45 ---- (MK)さん 頂いた内容を試しましたが、希望とはまた違う内容でした。ご配慮感謝致します。 例えば、指定フォルダ内に画像のみを入れて置き、Excel内でB列に画像名を打ち込むと指定フォルダ内からA列へ"画像"として自動配置されるイメージです。 その際に画像のサイズをA列に収まるようにもしたいのです。 ごめんなさい、ご教授頂けますでしょうか。 (もっちゃん) 2023/06/28(水) 19:15:01 ---- 参考で出していただいてるURLで「失敗した」というのはどのように失敗したのですか? かなり希望と近そうなのですが… (.:*.ゆ ゅ) 2023/06/29(木) 10:29:45 ---- (.:*.ゆ ゅ)さん 参考のもので、 ImageName = “テスト” ‘画像名を指定 とありますが、1種類の画像ではなく、様々な品番の画像を取り出したいのです。 その場合、どのようなコードになりますでしょうか。 (もっちゃん) 2023/06/29(木) 10:44:33 ---- 1)changeイベントで起動させる 2)B列への入力かを確認する 3)B列への入力だった場合、ImageName = Targetで設定する この改変だけで行けそうですが… (.:*.ゆ ゅ) 2023/06/29(木) 10:51:41 ---- (.:*.ゆ ゅ)さん 一度参考元のコードを一部変更したものを下記致します。 ---- Private Sub Worksheet_Change(ByVal Target As Range) Dim WID As Long Dim HIGH As Long Dim PAR As Double Dim shp As Shape Dim ImageUrl As String Dim ImageName As String Dim FolderName As String Dim FilePath As String Dim DLValue As Long FolderName = ThisWorkbook.Path & "C:¥dbjpg¥" '画像が保存されているフォルダを指定 ImageName = Target '画像名を指定 FilePath = FolderName & "¥" & ImageName & ".jpg" '画像のフルパスを指定 '画像をシートに貼り付ける Set shp = ActiveSheet.Shapes.AddPicture(fileName:="C:¥dbjpg¥", LinkToFile:=False, SaveWithDocument:=True, _ Left:=Selection.Left, Top:=Selection.Top, Width:=0, Height:=0) With shp '画像をいったんオリジナルのサイズに戻す .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue '画像の高さが、画像の幅×0.8以上の場合 If .Height >= .Width * 0.8 Then HIGH = Selection.Height 'セルの高さを取得 PAR = HIGH / .Height '比率=セルの高さ / 画像の高さ WID = Int(.Width * PAR) '画像の幅=画像の幅を比率で縮小 .Width = WID * 0.9 '貼り付ける画像の幅を指定 .Height = HIGH * 0.9 '貼り付ける画像の高さを指定 '画像の位置を調整 .Left = .Left + 10 .Top = .Top + (ActiveCell.Height - .Height) / 2 '画像の幅が、画像の高さ×0.8より大きい場合 ElseIf .Width * 0.8 > .Height Then WID = Selection.Width 'セルの幅を取得 PAR = WID / .Width '比率=セルの幅 / 画像の幅 HIGH = Int(.Height * PAR) '画像の高さ=画像の高さを比率で縮小 .Width = WID * 0.9 '貼り付ける画像の幅を指定 .Height = HIGH * 0.9 '貼り付ける画像の高さを指定 '画像の位置を調整 .Left = .Left + 10 .Top = .Top + (ActiveCell.Height - .Height) / 2 End If End With End Sub ---- 上記コードの中で、 Set shp = ActiveSheet.Shapes.AddPicture(fileName:="C:¥dbjpg¥", LinkToFile:=False, SaveWithDocument:=True, _ Left:=Selection.Left, Top:=Selection.Top, Width:=0, Height:=0) この部分で詰まってしまいます。ファイルパスが原因なのか、チェンジイベントで起動するようにしたからなのか、理由がわからなくて、、指定ファイル名は"dbjpg"という名前です。 またこのVBAではA列全てに反映させることができるのかわからなく、 どのセルで検索をかけているのかもわからない状態です。 上記コードの中から過不足があるかどうか検討して頂けませんか、、、 どうかよろしくお願いします。 (もっちゃん) 2023/06/29(木) 11:42:01 ---- >FolderName = ThisWorkbook.Path & "C:¥dbjpg¥" '画像が保存されているフォルダを指定 細かいところ見ていませんが、とりあえずこれはおかしいです。 ThisWorkbook.Pathが何を指すのか理解していれば絶対に書かないコードです。 >ActiveSheet.Shapes.AddPicture(fileName:="C:¥dbjpg¥" ここも違います。"FileName"と書いてある以上、ファイルの名前を指定するものです。 >FilePath = FolderName & “¥” & ImageName & “.jpg” ‘画像のフルパスを指定 ここで画像の名前とパスを代入しているので、元々のコードでは >ActiveSheet.Shapes.AddPicture(fileName:=FilePath, となっています。 何用に使用したいのかわかりませんが、コードを全く理解していないと少しの仕様変更で動かなくなります。 やみくもに変更するのではなく、一旦調べるか、作成依頼を出すかどちらかだと思います。 そのうえで質問なのですが、 >このVBAではA列全てに反映させることができるのかわからなく、 と書いてありますが最初の質問内容だと >画像の名前をセルに打ち込むと画像がパッ!と出てくるイメージです と書いてあったのでchangeイベントを薦めました。 一気に処理したいのであればchangeイベントである必要がないのですが、どちらが希望なのですか? (.:*.ゆ ゅ) 2023/06/29(木) 12:49:50 ---- (.:*.ゆ ゅ)さん 丁寧な返信大変感謝致します。 初心者という事もありやみくもに進めておりました。 ご指摘の通り実際に進めたいのは >画像の名前をセルに打ち込むと画像がパッ!と出てくるイメージです の方になります。 下記イメージです。 A B 1 画像 画像名 2 画像 画像名 3 画像 画像名 上記"B列"へ画像名を記入すると、"A列"へ指定フォルダ内の画像が出てくるイメージです。 画像名は単一ではなく様々ございます。 画像サイズの指定は特にはないのですが、A列へ収まっていると大変助かる、という感じです。 VBA初心者という事で大変ご迷惑をお掛けしておりますが、ご確認頂ければ幸いです、、 (もっちゃん) 2023/06/29(木) 13:21:19 ---- 私が上記で説明したことは、最初に貼ってくださった https://vba-gas.info/excel-vba-addpicture このサイトにもほとんど同じ説明が書いています。 誰しも最初は初心者なので、自分でトライしてみたいなら一度読んで、わからい部分は調べて、上記のコードをもう一度手直ししてみてください。 一旦、With shp より上だけで大丈夫です。 今は固定でA1に出力されるようになっていますが、そこも気にしないでください。 (.:*.ゆ ゅ) 2023/06/29(木) 13:47:45 ---- 横から失礼します。 今回の件が解決した後にでも↓をご覧ください。 コメントに画像を表示することができます。 手作業での説明になってますが、マクロで自動化することもできます。 https://keicob.com/cell-comment-gazou/ (MK) 2023/06/29(木) 14:35:10 ---- 難しいのは、Changeイベントの書き方だと思うんで、そこのところを。 画像サイズの変更については割愛 Private Sub Worksheet_Change(ByVal Target As Range) Const picPath As String = "D:¥" ' 画像が保存されているフォルダ 実際に合わせて修正 Dim aCell As Range, picCell As Range, shp As Shape Set Target = Intersect(Target, Me.Columns("B")) If Target Is Nothing Then Exit Sub For Each aCell In Target.Cells Set picCell = aCell.Offset(, -1) If aCell.Value = "" Then picCell.Clear For Each shp In Me.Shapes If Not Intersect(shp.TopLeftCell, picCell) Is Nothing Then shp.Delete End If Next ElseIf Dir(picPath & "¥" & aCell.Value & ".jpg") = "" Then picCell.Value = "ファイルが見つかりません" Else Me.Shapes.AddPicture filename:=picPath & "¥" & aCell.Value & ".jpg", _ LinkToFile:=False, SaveWithDocument:=True, _ Left:=picCell.Left, Top:=picCell.Top, Width:=picCell.Width, Height:=picCell.Height End If Next End Sub (´・ω・`) 2023/06/29(木) 15:05:56 ---- URL コード試してみました。そして改変してみました。 これがあると縦にはみ出して次の画像と重なるので削除。 '画像をいったんオリジナルのサイズに戻す .ScaleHeight 1, msoTrue .ScaleWidth 1, msoTrue URL のコードは Cells(1, 1).Select と A1 固定になっている。 画像名も“テスト”と固定になっている。 この部分を改変したのが★です。 Sub 画像貼り付け() Dim WID As Long Dim HIGH As Long Dim PAR As Double Dim shp As Shape Dim ImageUrl As String Dim ImageName As String Dim FolderName As String Dim FilePath As String Dim DLValue As Long Dim lastRow As Long '★ lastRow = Cells(Rows.Count, 2).End(xlUp).Row '★ FolderName = ThisWorkbook.Path & "¥" & "画像" '画像が保存されているフォルダを指定 ◎を参照。 ImageName = Cells(lastRow, 2).Value '画像名を指定 ★ FilePath = FolderName & "¥" & ImageName & ".jpg" '画像のフルパスを指定 '変数FilePathに代入したパスが存在しているか調べる、存在しない場合はなにも処理しない If Dir(FilePath) = "" Then Else Cells(lastRow, 1).Select 'セルA1をアクティブセルに '★ Cells(lastRow, 1).RowHeight = 90 'セルA1の高さ指定 '★ Cells(lastRow, 1).ColumnWidth = 11.5 'セルA1の幅指定 '★ '画像をシートに貼り付ける Set shp = ActiveSheet.Shapes.AddPicture(FileName:=FilePath, LinkToFile:=False, SaveWithDocument:=True, _ Left:=Selection.Left, Top:=Selection.Top, Width:=0, Height:=0) With shp '画像の高さが、画像の幅×0.8以上の場合 If .Height >= .Width * 0.8 Then HIGH = Selection.Height 'セルの高さを取得 PAR = HIGH / .Height '比率=セルの高さ / 画像の高さ WID = Int(.Width * PAR) '画像の幅=画像の幅を比率で縮小 .Width = WID * 0.9 '貼り付ける画像の幅を指定 .Height = HIGH * 0.9 '貼り付ける画像の高さを指定 '画像の位置を調整 .Left = .Left + 5 .Top = .Top + (ActiveCell.Height - .Height) / 2 '画像の幅が、画像の高さ×0.8より大きい場合 ElseIf .Width * 0.8 > .Height Then WID = Selection.Width 'セルの幅を取得 PAR = WID / .Width '比率=セルの幅 / 画像の幅 HIGH = Int(.Height * PAR) '画像の高さ=画像の高さを比率で縮小 .Width = WID * 0.9 '貼り付ける画像の幅を指定 .Height = HIGH * 0.9 '貼り付ける画像の高さを指定 '画像の位置を調整 .Left = .Left + 10 .Top = .Top + (ActiveCell.Height - .Height) / 2 End If End With End If Cells(lastRow + 1, 2).Select'★ 画像名入力セル位置へ移動 End Sub ◎C:¥Users¥□□¥Desktop¥画像挿入 画像挿入というフォルダの中にこのアァィルと画像フォルダがあります。 ThisWorkbook.Path とはそのファイルがあるフォルダが指定されます。 ここでは画像挿入を指定したことになります。 その中の画像フォルダを指定しています。 > FolderName = ThisWorkbook.Path & "C:¥dbjpg¥" '画像が保存されているフォルダを指定 貴方の環境に合わせて FolderName = "C:¥Users¥□□¥Desktop¥画像挿入¥画像"とするべきです。 >下記イメージです。 > A B > 1 画像 画像名 > 2 画像 画像名 > 3 画像 あいう ← 説明用に変更 >上記"B列"へ画像名を記入すると、"A列"へ指定フォルダ内の画像が出てくるイメージです。 上記のように改変することにより実現できた。 B列の行数をカウントして変数 lastRow に代入する。ここでは 3 とする。 ImageName = Cells(lastRow, 2).Value は Cells(3, 2).Value となり B3 の値(あいう)を ImageName の変数に代入する。 FilePath = FolderName & "¥" & ImageName & ".jpg" でも使用される。 Cells(lastRow, 1).Select は Cells(3, 1).Select となり A3 を選択します。 セルの幅と高さを設定して B3 の値(あいう)の画像を A3 貼り付けます。 B4 にデータを入力して実行すると A4 にコピーされます。 Cells(lastRow, 1).RowHeight = 90 'セルA1の高さ指定 ★ Cells(lastRow, 1).ColumnWidth = 11.5 'セルA1の幅指定 ★ の値を変更して画像とセルのの大きさを変更できます。 好みの大きさにしてください。 フォームコントロールのボタンを配置して実行してください。 (IT) 2023/07/03(月) 09:38:13 ---- 解決したのでしょうか。 拝見して気づいたことをメモします。 (´・ω・`)さんのChangeイベントプロシージャがよいかなと思いました。 ・画像名を消せば、それに連動してA列の画像も削除されますし、 ・B列のどこであっても(最終行でなくても)、画像名の追加に追随して画像が挿入されます。 ・複数の画像名を一括して、B列にコピーペイストするようなケースにも対応されています。 (機能が多いため、その分、Changeイベントプロシージャのコードがとっつきにくいかもですが。) 画像の挿入と位置調整についてですが、 ITさんの > これがあると縦にはみ出して次の画像と重なるので削除。 > '画像をいったんオリジナルのサイズに戻す > .ScaleHeight 1, msoTrue > .ScaleWidth 1, msoTrue その削除は悪手かもしれません。 理由: (1)縦にはみ出すのは一時的なものだと思いますが、いかがですか? (2)それを消去してしまうと、元の画像の縦横の比率が 1 になってしまうはずです。 結果として、仕上がりの画像がセルをはみ出すケースも出てきます。 Width:=0, Height:=0の引数で、AddPictureメソッドを使うと、 縦横の比率が 1 になってしまうので、それを > .ScaleHeight 1, msoTrue > .ScaleWidth 1, msoTrue で元画像の縦横を元に戻したわけです。これは必要な処理のように思えます。 もしくは、 Width:=-1, Height:=-1の引数で、AddPictureメソッドを使う方法もあるようです。 元画像の縦横がそのままで挿入されるので、上記二行の調整は不要です。 (-1 というのがマジックナンバーで気持ち悪いですが。) 画像の位置調整については、質問者さんが仕様を提示されないと分かりませんが、 色々な考え方があり得ます。 ・画像の縦横比率は元のものを保持するのか、 ・セルに幅、高さに合わせて、画像の大きさを調整するのか、 ・A列の幅は、固定しておいて、画像の大きさに合わせて、セルの高さを調整するとか。 これ以上は突っ込みません。沼にはまりそうです。 余談: 参照されたという https://vba-gas.info/excel-vba-addpicture はちょっとひどいなあ、という印象です。 ・今どき、インデントを無視したコードは参考にしてもらいたくないです。 ・しかも、コメントの開始記号(')や、マイナス記号が別の文字になっていて、 そのままコピーペイストして使うと、コンパイルエラーの山で画面が真っ赤になる。 こういうサイトは初めて見ました。 (個人的には頑張っておられるのでしょうけど、ちょっと残念な気がします。) (xyz) 2023/07/04(火) 17:21:56 ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/202306/20230628132711.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97054 documents and 608269 words.

訪問者:カウンタValid HTML 4.01 Transitional