プロが教えるわが家の防犯対策術!

外資系アパレルの在庫管理しているExcel初心者です。
いつもググりながらいろんなファイルを作っては仕事の効率化を図っています。
しかしどうしても出来ないものがあります。

データベースには商品コードとその画像があるとします。(自作中)
指示書には単純な表で商品名と色やサイズの他に%か価格しかありません。(本社からの指示)
ある商品を値下げ、もしくは値上げしなさいという指示書です。
ある程度は推測できますが数千もある微妙な違いの商品コードからピンポイントでその商品を探すのは至難の業です。
そこでデータベースを作りそこから商品コードで画像を抽出したいのです。
指示書の空欄セルに表示できればベストです。
今、1品1品写真を撮ってそのファイル名を商品コードにしているところです。
自作中の表は
列A:商品コード、列B:色コード、列C:サイズ、列D:画像
と単純な表です。

指示書の空白セルに入れる数式を教えてほしいのです。
いろんなサイトを見て(TANAKA氏とか)試してみましたがうまくいきません。
例がプルダウンを使用するものばかりです。
それに知識も追いついていません・・・
やりたい作業は指示表に示されている(仮にA列)商品コードに合致する画像を空白セル(指示書最終セル)にデータベースから返したいのです。
同じブックの違うシートでの作業と仮定していただいて結構です。
よろしくお願いします。

質問者からの補足コメント

  • Private Sub Worksheet_Change(ByVal Target As Range)
    Const trgR As String = "A1" '番号を入力するセル
    Const insR As String = "D3" '挿入画像の左上のセル
    Const path As String = "F:\" 'ファイルの格納フォルダ
    Const pic As String = ".jpg" '「.(半角)」+ファイルの拡張子"
    Dim shp As Shape
    Dim buf As String

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/10/23 13:02
  • If Target.Address(0, 0) = trgR Then
    For Each shp In ActiveSheet.Shapes '既に表示されている画像を削除する処理
    If Not Intersect(Range(insR), Range(shp.TopLeftCell, _
    shp.BottomRightCell)) Is Nothing Then
    shp.Delete
    End If
    Next
    Range(insR).Select

      補足日時:2016/10/23 13:05
  • buf = Dir(path & Target.Value & pic)
    If buf <> "" Then '入力したファイル名があるかチェック
    ActiveSheet.Pictures.Insert (path & Target.Value & pic)
    Else
    MsgBox "指定したファイルがありません"
    End If
    End If
    Target.Offset(1, 0).Select
    End Sub

      補足日時:2016/10/23 13:05
  • というコードのマクロです。
    比較的私にも理解しやすく試しに作ってみたのですが、いくら試しても"指定したファイルがありません"としかでません。
    写真ファイルの名前をAとか単純なものに変えて試してみても同じでした。
    やはりセキュリティーに阻まれているのでしょうか・・・
    このPCのuser以下のメインフォルダには鍵マークがついています。
    なので個人USBを挿してそこにターゲットフォルダを置いて試してみましたが今のところ結果は同じでした。

    返信の追加はこれでいいのでしょうか・・・?
    文字数制限で小分けになってしまいました。
    解りにくくてすみません。

      補足日時:2016/10/23 13:07
  • 自宅のPCでも画像は表示されませんでした…
    ターゲットフォルダはCドライブの直下に置いていますし、ファイル名も合っています。
    何が悪いのかさっぱり解りません。

      補足日時:2016/10/23 22:48

A 回答 (10件)

コメントありがとうございました。


シートモジュールには正しく記載されているようですね。

よくあるミスですが
Const path As String = "F:\" 'ファイルの格納フォルダ
ここで最後に \ を忘れる事です。
これだと、何のフォルダでも何のファイル名でも「ありません」になります。
提示なさったコードでは¥がついていたので、間違いないとは思いますが。
    • good
    • 0
この回答へのお礼

写真がでましたーーーーー!!!
かなり大きな写真が貼り付けられましたがやっと出ました(´;ω;`)
ありがとうございます!!
よくあるミスをまんまやってしまっていました。
こんな無知なものに丁寧にご指導いただきありがとうございました。
正しい位置のセルに適切な大きさで返せるようにこれを元に調べて実現したいと思います。
これから仕事に向かいますので会社のPCで試行錯誤してきます。
また頭打ちしてしまったらこちらにご相談させていただきます。
その時はここではなく質問を変えて新たに投稿したほうがいいんでしょうか?
今回のことでマクロ恐怖症になるところでしたが少し面白くなってきました。
ほんとにありがとうございました。

お礼日時:2016/10/24 09:34

重ねてですみません。



Pictures.Insert だとリンク貼り付けになってしまうので、Shapes.AddPicture の方がいいです。

With Range(insR)
Set shp = ActiveSheet.Shapes.AddPicture(FileName:=path & buf, _
LinkToFile:=False, SaveWithDocument:=True, _
Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
End With
    • good
    • 0
この回答へのお礼

すみませんお世話になります。
結果は.「指定したファイルがありません」でした。
差し替える箇所を何度かかえてBVEからエラーメッセージが出ない状態にして実行しましたが駄目でした。
きっと私が悪いのだと思いますが。

お礼日時:2016/10/24 09:03

今更ですが、そのイベントモジュールは該当シートのシートモジュールに入れていますよね。



画像が表示されない、とは
1.無動作
2.エラーメッセージが出る
3.「指定したファイルがありません」のメッセージが出る

のどれでしょうか。
またステップ実行はしてみましたか?
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
このマクロを紹介していた過去のQ&Aに記載されていたとおりにSheetを右クリックしてコードを表示をクリックしてでてくるVBEに貼り付けています。
でてくる表示は必ず「指定したファイルがありません」です。
階層フォルダのカタカナがいけないのか、大文字アルファベットがいけないのか…
いろいろ疑って試してみましたが結果はずっと「指定したファイルがありません」でした。
最終、Cドライブ直下に1枚のファイルを置くというのも試しましたがやはり「指定したファイルがありません」でした。
ステップ実行はわかりません。テストみたいな機能ですね。
調べて試してみます。
無動作や他のエラーメッセージの表示は一度もありません。

お礼日時:2016/10/24 08:33

英語版のWindowsって、見たことも触ったこともないのですが、パスの指定方法って同じなのですか?


それから、1点、実験をお願いしたいのですが、Dirによるファイルの存在確認をはしょって、Pictures.Insert をしてみて下さい(ファイルがありさえすれば、とりあえず存在確認なんて意味なので…)。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
拙い知識で試してみましたが〇〇が足りない的なエラーが出てしまいます。
詳しい方にはなんてことない事なんでしょうが私には難しすぎるようです。
そう簡単にできるとは思っていませんが悔しくて泣けてきます。

お礼日時:2016/10/23 23:06

No.4の者です。



補足されたコードをテストしてみました。
Fドライブというのはテスト出来ないので、ローカルのディレクトリに変更しましたが、正しくD3に画像が表示されました。

マクロの経験がないという事ですが、このコードの意味はおわかりでしょうか。
A1セルに画像のファイル名を入力した時、自動実行するイベントです。
A1セルに.jpg抜きのファイル名を正しく入力しましたでしょうか?

これが正しいのであれば、問題点を切り分ける為にまずはローカルのどこかに写真をおいてやってみて下さい。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
HPを作成したことがあるのでなんとなく理解しているつもりです。
仰るとおり.jpg抜きでA1セルに正しいファイル名を入力しましたが指定したファイルがありませんになります。
ためしに作ったbookなので表にはコード以外に何もありません。
間違えないようにA1セルにはコピペで入力しました。
使用付加の文字があるのかも(英数だけなので考えられませんが)知れないと、ファイル名をAという一文字にして
入力しても結果は同じでした。
最初にローカル(Cドライブ)にフォルダを置いてやってみましたが駄目だったのでFドライブで試しました。
まったく同じ結果でした。
帰ってから自宅のPCで試してみようと思っています。
もし自宅の物で実行できればやはり会社のこのPCが問題かと思います。
他のExcelファイルでもbook間のリンクとかの数式が絡んでくると開く時に[修正しますか?]というダイアログが出てきてOKを押さないと開かないしOKを押すと勝手に修正されるという始末です。
ちなみにその時は自宅PCでは何の問題もなく開けることができました。
謎なPCを相手に試行錯誤しております。

お礼日時:2016/10/23 17:38

候補となる画像が数個や数十個程度なら、何とか頑張って数式でもいけそうです


手元に試行できる環境がないので、出来そうだとしか・・・・

が、その為には、データベースではなく事前にEXCELシート内に画像を貼り付けたセルと品コードの一覧を準備する必要が有ります
その事前準備やモノの入れ替わり毎に数式を操作しなければならない雰囲気なので、効率的にどうだろうか?数式のミスなどを防止できるか?微妙ですね

DB使用が前提となると、VBAでのコーディングを行わなければなりません

同じVBAでやるなら、ACCESSを使った方が適しているのでは?とも思われる

既に色々工夫しているようですね
貴方の工夫によって、こういった無駄な作業が無くなりました、こういったミスがなくなりました
という成果を示して、貴方が今考えているさらなる効率化の為に、新しいツールを導入したい
と、職場を動かせないでしょうか?
そうすれば、管理者権限が・・・・というのはクリアできるのでは?


尚、このサイトで10年ほど前に、任意の画像を検索して貼り付ける関数といったQ&Aが行われています
https://oshiete.goo.ne.jp/qa/2343578.html
これを応用すれば、とりあえずは可能と思われますが、現実的かどうかは・・・・
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます!
撮るべき写真は数百になりますの数式(とくに初心者の私)では無理があるようですね。
皆様のご意見に励まされGoogle先生を頼りにマクロに挑戦中です。
本社が外国で仕事場にあるPCもWindows7なのですが、OSは英語版という効率の悪さです。
Excelのメニューもすべて英語ですし、エラーのダイアログも英語です。
もう何がなんやらわかりません。
セキュリティーも固くてマクロでもフォルダ参照とかに支障があるかもしれません。

とりあえず挑戦中なのは調べて出てきたのは・・・

文字オーバーなので続きます。

お礼日時:2016/10/23 12:54

他の方々とのやりとりを読ませて頂きました。



>右端空白列の最上段セルに数式を書き込みそれを下に
>オートフィルすると該当する小さな写真が返されると言うものです。
リンクでなく実際の写真を入れるのでしたら、マクロでないと無理だと思います。
マクロはおわかりですか。

マクロでよければ、での提案ですが
商品全ての行に縮小した写真を入れるより(これも可能ですが)
商品コードをダブルクリックするとその写真がエクセル内に表示されるという方法だとファイルサイズが大きくなりませんし、見やすくていいと思います。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます!
初心者にマクロはとても手を出せるものではないと数式で模索していましたがどうも無理があるようですね。
皆様の回答を参考に[マクロ 画像]でググッて調べて挑戦しています。
もうすでに行き詰りそうですが頑張ってやってみます。
またマクロについてどうしても解らない事がでてきましたら追記させていただきます。
ありがとうございました。

お礼日時:2016/10/23 12:44

1枚の指示書に記載されている商品コードは1つですか?それとも一覧形式になっていて、複数の記載があるのでしょうか?一覧形式の場合、最

大何件くらいの記載がありますか?
    • good
    • 0
この回答へのお礼

指示書は一覧形式で数はその都度違い少なくて15行(15商品)くらい、多くて70行(70商品)くらいでしょうか。1商品は10個のアルファベット(ひとつ数字)に数字5桁とカラー番号(アルファベット1と2桁の数字)で構成されています。

例:AABBCCCD1E10001B10

AA:性別
BB:レーベル
CCC:ジャンル
D1M:形
10001:識別番号
B10 :カラー番号

上記のようなコードが15~70行書かれていてその商品を何%引くという指示書です。
指示書の列はいろいろなデータがあり12列くらいありますが必要な商品コードは1列に一覧されています。
古い型を値引く場合もありますので店内にない商品も書かれています。
総在庫表は前日の物までを本社サーバーから毎日吸い上げてファイルしています。
いろいろ勉強してその総在庫から指示商品の在庫数を空白セルに返すことは出来ました。
これで在庫がない商品は0となりあるかどうかわからない物を探すムダが省けました。

今は次の段階を模索していて自分で写真を撮りジャンルに分けてフォルダにファイルしています。
このフォルダに検索をかければ商品の写真が出てくるのですがそれを小さく加工して指示書の空白セルに
1枚ずつ貼り付けるのは毎回時間がかかりすぎます。
そこで商品コードに予めかなり小さく加工した写真をセルに合わせて貼り付けて表を作っています。
データベースはA列商品コード、B列写真(横1cm、縦2cm)と単純なものです。
指示書をコピーしてそのデータベースのSheet2に貼り付けて数式を使ってSheet1の該当コード写真を返したいのです。
いろいろ調べたのですがドロップダウンで写真が切り替わるものしか見つかりませんでした。
イメージは在庫数を調べる時と同じように、指示書(Sheet1)の右端空白列の最上段セルに数式を書き込みそれを下に
オートフィルすると該当する小さな写真が返されると言うものです。
返す際は予めデータベースの写真の大きさに指示書右端空白列のセルを合わせているとお考えください。
よろしくお願いします。

お礼日時:2016/10/23 07:07

データベース化するということは、その商品数はかなりの数量になるのでしょうか?



あまり数が多いと現実的では無くなりますが、DBに拘らずに
画像ファイルを品番名=ファイル名としているのであれば
画像ファイルへのリンクを品番セルに設定するという方法もあるのかなぁと思う

画像データを印刷するなどの必要性が有るのか無いのかとか、画像を表示するサイズがどの程度なのかで表中に埋め込んだ方が良い場合もあれば、埋め込まない方が良い場合もあると思います

必ずしも埋め込む必要がないなら、リンクとして設定するのが単純で良さそう
    • good
    • 0
この回答へのお礼

ありがとうございます。
作業はこつこつとやっています。
すぐに完成というのではなくこれから出てくる新商品を順次撮影してデータベース化しています。
商品の入れ替えが早いので長くても1年あれば出来上がりそうです。
今まで何年も今の状態で仕事をしてきている会社なので急いではいません。
自分は入ったばかりで超有名外資系アパレルなのにすごくアナログな会社でとても不効率な仕事をさせられているのでなんとか頑張って簡略化しようと奮闘中です。
画像はすごく小さくてもいいので表のセルに埋め込みたいです。
普段商品を触っているスタッフなのでイメージさえできれば商品にたどり着けます。
スタッフは何十人といるので印刷する必要もあります。
よろしくお願いします。

お礼日時:2016/10/22 22:39

そもデーターベースで画像まで扱うのであればAccessを使うべきです。


Accessは取付きにくいですが、商品コードから画像を選び出すなど簡単にできます。
    • good
    • 0
この回答へのお礼

会社のPCにAccessは入っていません。また管理者制限があり新しいソフトはダウンロードできません。

お礼日時:2016/10/22 22:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!