ここから本文です

EXCELで複数画像を貼り付けるボタン作成を頼まれたのですが・・・ 詳しい方に具体...

toremorotoremoro5さん

2011/10/1204:26:33

EXCELで複数画像を貼り付けるボタン作成を頼まれたのですが・・・
詳しい方に具体的にどのようなVBAプログラムソースになるか教えてください(7回目)

前回のもの
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1473118809 参考まで

1シート3つ貼り付ける範囲があり、セル(画像設置場所A3:A17,A19:A33,A35:A49)結合して範囲)
大きさはAセル列幅(59.13)、A3からA17の行幅(各18)で1つに結合

今回はアプローチを変え、挿入し目的セルヘ、リサイズし日付つけは一緒
なのですが、複数同時ではなく、次々ドロップで画像挿入すれば楽という観点からです。

イメージとしてはボタンを押す、”小さいボックス”(縦3つのツール?のようなもの)が出て
そこへ開いてあるフォルダから好きな画像を選びドロップする
するとエクセルシートの3つの設置予定場所のセルの大きさにちゃんと入って行くというもの。

縦3つなのでシート側の縦3つに合わせる形で、真中にドロップすれば
シートの真ん中設置部へと画像が入るように
1つ1つのドロップですが、画像挿入で深い会社サーバーの中を駆け巡り
何百、何千という画像フォルダを探さなくていいという利点があります。

どうか宜しくお願いいたします。

補足いろいろと本当に有難うございます。知恵袋活用は最近知ったばかりなので済みません。それと1度開いた後というのは知っていましたが、ネットワークは15のデータサーバーから年間2500フォルダ、中は100単位の画像が・・。行き来が面倒なのです。参考にしたい機能とはhttp://lonewolf.chu.jp/こちらのドロップ窓というもの。こちらはぴったりとリサイズできなく撮影日付も入らず。

閲覧数:
1,796
回答数:
5
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

mie********さん

編集あり2011/10/1519:31:47

■ 2011/10/15 14:45 編集 ■

ドラッグ・アンド・ドロップ 方式での
画像ファイル取得なのですが、

当方では、
UserForm 上の、
ListView 利用で、
(jpg 画像のみ対応による)
シ-ト単位、単体選択での
(3枚までの)
画像追加・表示、単体削除までは、
””何となく””できております。 w

..... ただし、
..... 現時点、同一フォルダ-内での複数ファイルのドロップは可能
..... フォルダ-をまたいでの、複数ファイルの選択ではドロップ不可

ただ、全コ-ドの提示となると、
回答文字数をはるかに超えますし、
複数(3枚を超える)ファイルの任意選択が可能かどうか、
さらに、その一括挿入および一括削除をする際、
またシ-トをまたいで処理する場合に対処する、
コ-ドを考慮中で、
しかも回答文字数が膨らむと思いますので、
お見せできる段階に至っていないと思います ww

今回ご指摘のネットワーク関連の問題も、
当方は、確認方法がないので、
他の方の解決策をみないと、
なんとも言いようが無いのです。

当方の
Shapes.Add メソッド を使用したコ-ドでは、
処理過程で、
一度原寸で、挿入
それを結合セルのサイズに合わせ、
縮小または拡大しております。
おそらく原因はこのへんにあると思いますが・・・

Excel2010 でどうしても動かしたかったため、
MSの対処コ-ドを少し変えて、
このコ-ドになっております。
..... MSの対処コ-ドそのままですと、画像がボケる場合がありまして .....

今さらですが、Excel2003などのバ-ジョンでの動作確認はしておりません。
当方、Excel2007およびExcel2010のみ利用できる環境なものですから ・・・


■ 2011/10/15 10:17 編集 ■
<<別件での再追記事項>>

”画像が原寸に戻る”
という現象ですが、
当方が提示したコ-ドの中、
Shapes.Add メソッドを使用している
場合、

Cnt = ActiveSheet.Shapes.Count

の一行が抜けていないか(存在しているか)、
ご確認願えないでしょうか。

この一行が欠落している場合、
2枚目以降に挿入した画像が、
原寸に戻る現象を、
当方で確認しました。


■ 2011/10/13 22:32 編集 ■
<<別件での追記事項>>
撮影日の表示形式で、
時刻部分のみが不要というのであれば、

当方が提示していた、コ-ド内の、
撮影日の記述部分で、下記のように書き換えてください。

.TextFrame.Characters.Text = StrDate

.TextFrame.Characters.Text = Left(StrDate, 13)





toremorotoremoro5さん
kamicha1さん

当方の方は、あまり気になさらないでください w

今回のご質問内容・ご希望に沿うためにも、
前回までのものとは別(個)のものとして、
組み上げていかれた方が、
混乱をきたさないと考えます。

前回、当方の回答記述の中で、
当方が気分を害している、と思われたのでしょうか ?

でしたら、誤解だと思いますよ。

あくまでも、
”挿入画像が原寸に戻った”
についての、原因がどこにあるのか、を、
はっきりさせたかった為、
つっこんだ語調になってしまっていたのかもしれません。
大変失礼いたしました。

.... で、この点に関し、原因を特定され、解決されたのでしょうか。
.... 解決されないでおかれると、後々困ったことになると思われます。
.... 画像挿入に使用するメソッドを、見直して、
.... 変更するなどして対処しませんと、いけないことなのかしれませんが、
.... どうでしょうか ?


尚、
画像ファイル(名)の取得を、
ドラッグアンドドロップで、
処理したい、
という旨の方法については、
当方もかなり難しいと思います。

● VBAでドラッグ・アンド・ドロップ によるファイル名取得と処理●

【検索】により
参考になると思われる、同種類の質問と回答
(Listview Control ... OleDragDrop イベント を使った回答サンプルコ-ドを含む)
http://oshiete.goo.ne.jp/qa/1492077.html

( BA 回答者:Wendy02 様の)
回答サンプルコ-ドでは、
Excel の xls ファイルを判定しておりますが、
これを応用して、
jpg ファイル等(の画像ファイルのみ)を判定し、
挿入配置処理へ、もっていければいいのですが ・・・

.... 複数ファイルのドラッグ・アンド・ドロップも可能なようですので ・・・・

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

2011/10/1513:57:41

miekirukabukiageさんへ
まだ詳しくはSub AddPicTest()シリーズ(1~9?)全てのものを見たわけではないんですが
Cnt = ActiveSheet.Shapes.Count
のほうはしっかり有りました。

不具合検証のほうは・・・こういう感じになると考えてます
1、挿入時Sheetタブが先頭にある場合ない場合
2、Worksheets(1).Activateを削除した場合しない場合
3、日付が画像に貼り付いている場合(トリミング不可)、貼り付いてなく枠を同時に入れ込む仕様の場合(トリミング可)
4、下に永遠に続く場合、横に新規シートへ伸ばす場合
5、保存形式がEXCEL2007を使いながらも汎用性のため.xlsで保存、作業はXPとVISTAで使用
等々です。
ドラッグ&ドロップ式は難しそうですね・・・ファイル名しかはいりません

編集あり2011/10/1404:17:52

補足で言い忘れました;;このリンクのほうですがリサイズ等できました勘違いでした、スミマセン;;撮影日はデジカメのような形にはならない模様で・・・。とりあえずアドバイスを受け、参考に上げてもらいました関連項目を調べています・・・。別件のほうですが修正ありがとうございます;;数字は右余白分だったのですね。まだ枠線がが消えず奮闘中ですw

ann********さん

編集あり2011/10/1209:28:46

画像挿入では深層のディレクトリにたどりつくまでが大変と、いう点について
だけですが――

Application.GetOpenFilenameから画像挿入する場合、最初に画像を選択した
ディレクトリが、Excelを閉じない限り次の実行でも自動的に開いてくれます
ので、あまり問題にはならないと思うのですが・・・

また、GetOpenFilenameが記述されている行の前に
ChDir "C:\aaaa\bbbb\cccc\dddd"
のように目的のパスを記述しておくと、最初の実行時からそのディレクトリが
開いてくれます。

追補:
私はスタンドアロン環境のみですので、共有サーバーの環境でも有効なのかどうか
わかりませんが、動作しなかったら無視してください。

kam********さん

編集あり2011/10/1305:43:27

toremorotoremoro5さん

≪補足を見ました≫

> ネットワークは15のデータサーバーから年間2500フォルダ、中は100単位の画像が・・。行き来が面倒なのです。

画像は、ひとつずつ選ぶのでしょうか?
行き来という意味が今ひとつわかりません。
もし複数の画像を一気に処理するときにフォルダが複数にわかれているのであれば、仕組みを考える必要があります。

> 参考にしたい機能とはhttp://lonewolf.chu.jp/こちらのドロップ窓というもの。こちらはぴったりとリサイズできなく撮影日付も入らず。

こういう情報は早くいただきたいです。

人が作ったものは使いたくないという方針があるのであれば、
時間があれば、一旦、サンプルを作りますので、それを真似して、ご自身で作り直してみてはいかがですか?
ただ、UserFormの配置も必要てすので、知恵袋にソースを載せるだけでは、回答文字数制限もあり、苦しいですので、

>> 容量無制限の無料オンラインストレージ firestorage
>> http://firestorage.jp/
>>
>> にアップロードさせていただくとしたら、ご確認いただくことは可能でしょうか?

は、いかがでしょうか?

あと、「撮影日の形式」は、印刷設定シートの126行目あたりで調整できませんか?

P.S.

▼miekirukabukiageさん

> 当方の方は、あまり気になさらないでください

了解しました。
横から割り込むような形でご迷惑かなと思いつつ、早く解決してもらいたいという思いもありました。

> 前回、当方の回答記述の中で、
> 当方が気分を害している、と思われたのでしょうか ?

誤解であればいいのですが・・・

なお、IDをころころ変更される点と、知恵コインの件、回答することの意義?については、同意見です。

▼annaandoさん

> 共有サーバーの環境でも有効なのかどうか

ChDirは、ネットワーク上のフォルダを指定できないため、
CreateObject("WScript.Shell").CurrentDirectory = "\\~"
とします。

(参考)
http://officetanaka.net/other/extra/tips15.htm

≪以下、前回の回答≫

過去の経緯から、なんとなく方針転換されたような感じがするので、参考程度に聞いていただければと思います。

> イメージとしてはボタンを押す、”小さいボックス”(縦3つのツール?のようなもの)が出て
> そこへ開いてあるフォルダから好きな画像を選びドロップする
> するとエクセルシートの3つの設置予定場所のセルの大きさにちゃんと入って行くというもの。

ドラッグ&ドロップでシート上に画像を挿入するのは、私が知らないだけかもしれませんが、たしか難しかったように思いますので、
ドラッグ&ドロップより
①画像ファイルを複数選択する
②「貼り付け開始位置のセルを指定してください」というInputBoxを出す(デフォルトは、アクティブセル)
という方法ではいけませんか?

ずっと対応を続けられているmiekirukabukiageさんからアイデアがまた提案されると思いますので、
あまりご迷惑おかけしたり、ご気分を悪くされるかもしれませんが、
上記の方法は、以下のようなコードで実現できます。
(このコードだけでは、画像は挿入されませんが、別シートのセルも選択可能です)

Sub Test()
Dim FName As Variant
'====★
Dim rngPic As Range
'====★
Dim R As Long, C As Integer

FName = Application.GetOpenFilename _
("jpg,*.jpg,jpeg,*.jpeg,bmp,*.bmp,gif,*.gif,png,*.png", , MultiSelect:=True)

If Not IsArray(FName) Then
MsgBox "取り消されました。", vbInformation
Exit Sub
End If

'====★
Set rngPic = Nothing
On Error Resume Next
Set rngPic = Application.InputBox(Prompt:="貼り付け開始位置のセルを指定してください", Type:=8)
On Error GoTo 0

If rngPic Is Nothing Then
MsgBox "セル選択をキャンセルされました", vbInformation
Exit Sub
End If
MsgBox "挿入先のセルは" & rngPic.Address(, , , True)
R = rngPic.Row: C = 1
'====★

End Sub

なお、このコードを使われるならば、今までのコードをあちこち修正せざるを得ません。
ただ、やはり、miekirukabukiageさんの意向もありますから、
必要で、ご連絡いただくまでは、提案を控えさせていただきます。

> 縦3つなのでシート側の縦3つに合わせる形で、真中にドロップすれば
> シートの真ん中設置部へと画像が入るように
> 1つ1つのドロップですが、画像挿入で深い会社サーバーの中を駆け巡り
> 何百、何千という画像フォルダを探さなくていい

この部分が少しわかりづらいです。
①1シートには、縦3つに貼り付け位置がある
②ドラッグ&ドロップは、縦3つの真ん中のセルを指定する
③1つだけ画像を選んだとき、2つ画像を選んだとき、4つ画像を選んだとき
それぞれ、どこに貼り付けるのでしょうか?

なお、少し、相談ですが、こちらでサンプルファイルを作って、

容量無制限の無料オンラインストレージ firestorage
http://firestorage.jp/

にアップロードさせていただくとしたら、ご確認いただくことは可能でしょうか?

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる