1383824213 Excel VBA のコードをお願いいたします。


①.自動でB列に画像ファイルを挿入
例えばC:\キャプチャ\ゲームというフォルダがあった場合、そのフォルダ内の画像を全て高さ1cm、幅6cmで挿入※縦横比無視、
1行につき1枚、セルの幅、高さは自由 ただし画像はセルの中央へ

②.自動でA列にフォルダ名をコピペ
①で貼り付けた画像の左隣(A列)に画像の格納されていたフォルダ名をコピペ。

こちらで指定していない部分(エクセルのファイル名、シート名等)は自由です。
A列の並びは五十音順にして頂けるとありがたいです。
詳しくは画像を参照してください。

何卒よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/11/07 20:36:53
  • 終了:2013/11/10 00:33:15

ベストアンサー

id:language_and_engineering No.1

lang_and_engine回答回数170ベストアンサー獲得回数632013/11/09 23:38:01

ポイント100pt

こんにちは。ご要望のマクロを作成してみて,動作確認が取れましたので,下記のエントリに掲載しておきました。
ご利用ください。


Excel VBAで,フォルダ内の画像ファイルを一括でシートに取り込み,サムネイルのアルバムを自動生成
http://d.hatena.ne.jp/language_and_engineering/20131109/GenerateImageThumbnailAlbumByExcelVBA

他2件のコメントを見る
id:language_and_engineering

いくつか対処法があります。


・マクロ実行の前に,画像のサイズをあらかじめ一括して縮小処理しておき,そのうえでマクロを走らせる。そうすれば,扱う画像の総容量が小さくて済む。画像のサイズの一括変更のためには,下記の記事に載っているフリーソフトなどを使う。

 >画像を多数Wordに貼り付けてレポートを作る。デジカメ画像サイズを一括変更 - プログラミングとIT技術をコツコツ勉強するブログ
 >http://d.hatena.ne.jp/TipsMemo+computer-technology/20130925/p2


・シートを分割する。一度に実行する画像の数を1000個以内にして,何回かに分けて実行して,最後に実行結果のシートを1個にまとめる。


・PCのスペックを上げる。メモリ増設。


>メモリ不足
具体的にどういう状態になりますか?画面上にはどんな表示が出ますか?

2013/11/12 12:03:30
id:tyyyu2005

ご回答ありがとうございます。

>メモリ不足
>具体的にどういう状態になりますか?画面上にはどんな表示が出ますか?
画面のメッセージまでは完全に覚えていませんが、会社のPCメモリ8ギガでメモリ不足ですとの表示でした。
自宅のPCメモリ16ギガで最後まで走りました。
なので物理的な問題だったのだと思います。

>シートを分割する
はい 自分もこの方法で考えていました。

>画像のサイズをあらかじめ一括して縮小処理
なるほどこれは思いつきませんでした。
明日にでも試させて頂きます。

非常に勉強になりました。ありがとうございました。

2013/11/12 20:34:06

その他の回答(0件)

id:language_and_engineering No.1

lang_and_engine回答回数170ベストアンサー獲得回数632013/11/09 23:38:01ここでベストアンサー

ポイント100pt

こんにちは。ご要望のマクロを作成してみて,動作確認が取れましたので,下記のエントリに掲載しておきました。
ご利用ください。


Excel VBAで,フォルダ内の画像ファイルを一括でシートに取り込み,サムネイルのアルバムを自動生成
http://d.hatena.ne.jp/language_and_engineering/20131109/GenerateImageThumbnailAlbumByExcelVBA

他2件のコメントを見る
id:language_and_engineering

いくつか対処法があります。


・マクロ実行の前に,画像のサイズをあらかじめ一括して縮小処理しておき,そのうえでマクロを走らせる。そうすれば,扱う画像の総容量が小さくて済む。画像のサイズの一括変更のためには,下記の記事に載っているフリーソフトなどを使う。

 >画像を多数Wordに貼り付けてレポートを作る。デジカメ画像サイズを一括変更 - プログラミングとIT技術をコツコツ勉強するブログ
 >http://d.hatena.ne.jp/TipsMemo+computer-technology/20130925/p2


・シートを分割する。一度に実行する画像の数を1000個以内にして,何回かに分けて実行して,最後に実行結果のシートを1個にまとめる。


・PCのスペックを上げる。メモリ増設。


>メモリ不足
具体的にどういう状態になりますか?画面上にはどんな表示が出ますか?

2013/11/12 12:03:30
id:tyyyu2005

ご回答ありがとうございます。

>メモリ不足
>具体的にどういう状態になりますか?画面上にはどんな表示が出ますか?
画面のメッセージまでは完全に覚えていませんが、会社のPCメモリ8ギガでメモリ不足ですとの表示でした。
自宅のPCメモリ16ギガで最後まで走りました。
なので物理的な問題だったのだと思います。

>シートを分割する
はい 自分もこの方法で考えていました。

>画像のサイズをあらかじめ一括して縮小処理
なるほどこれは思いつきませんでした。
明日にでも試させて頂きます。

非常に勉強になりました。ありがとうございました。

2013/11/12 20:34:06
id:tyyyu2005

lang_and_engineさん
メモリ不足解消のため挿入する画像が大変大きいため、予め画像加工ツールでリサイズしコンパクトにする事に致しました。
今度はエクセルに画像を加工する際、そのままの大きさで挿入をしたいと思います。
挿入した画像の高さに合わせて、セルの高さを自動調整(上下余白2m程度)したいのですが未熟なばかりにうまく行きません。
ちなみに参考にしたのが(http://q.hatena.ne.jp/1384181723)です。
参照urlは選択した画像の高さに合わせてセルの高さを調整(上下余白2m程度)するマクロです。
素人考えの思いつきで出来るのかなと考えてしまいました。
実際どうなのでしょうか。

  • id:language_and_engineering
    リサイズでメモリ不足が解消してよかったです。

    >補足

    できましたよ~。

    ・エクセルに画像を挿入する際、そのままの大きさで挿入
    ・挿入した画像の高さに合わせて、セルの高さを自動調整(上下余白2m程度)

    >|vb|

    ' ある一つの画像ファイルをシート中に取り込む
    Private Sub importImageFile(file_name, y, root_dir, sub_dir)
    file_path = sub_dir & "\" & file_name

    ' 一列目にはサブフォルダ名を
    ActiveSheet.Cells(y, 1).Value = sub_dir.Name

    ' 二列目には画像を
    ActiveSheet.Cells(y, 2).Select
    Set myShape = ActiveSheet.Shapes.AddPicture( _
    Filename:=file_path, _
    LinkToFile:=False, _
    SaveWithDocument:=True, _
    Left:=Selection.Left, _
    Top:=Selection.Top + Application.CentimetersToPoints(0.2), _
    Width:=0, _
    Height:=0)
    ' http://www.moug.net/tech/exvba/0120020.html
    ' http://www.moug.net/tech/exvba/0070012.html

    ' 挿入した画像を,元画像と同じ高さ・幅にする
    With myShape
    .ScaleHeight 1, msoTrue
    .ScaleWidth 1, msoTrue
    End With

    ' この行高を自動調整
    Cells(y, 1).RowHeight = myShape.Height + Application.CentimetersToPoints(0.4)

    End Sub

    ||<

    これ以上何かあったら,コードの意味を考えていただいたり,
    私が執筆した記事の解説を読んでいただいたりして
    できるだけ独力で対処して頂ければ助かります。


    あと,
    「メモリ不足でも動作できないか?」
    「画像サイズをそのままで動作できないか?」
    というのは,いずれも仕様の変更になりますので,
    同じ質問内ではなく別の質問を投稿して新たに仕切り直して下さると本来は嬉しいです。
    その場合は,再度ご相談に乗りますので。

    もし業者に頼んでいたら,
    それら1件ごとに新たな要望として料金を取られますからね。


    私は物好きなので,自分の興味(そういうコードを書いて解決してみたいという好奇心)
    が続く限りは,質問者様の仕様変更にもいつも対応させて頂いています。


    ただしさすがに3回を超えたら警告させてもらっていますが・・・
    http://q.hatena.ne.jp/1319868767#c223358

    それでは。。
  • id:tyyyu2005
    lang_and_engineさん

    大変失礼致しました。この場合は仕切りなおすべきでした。

    またこちらの都合で仕様変更に応じてくださり、とても感謝しております。
    動作確認完璧でした。
    ありがとうございます。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません