質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

1106閲覧

Excel VBA画像貼り付けのアルゴリズム

yghvbn

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2021/01/18 01:04

数十枚からまんべんなく画像を選択したい

各フォルダに数十枚のjpgファイルが入っています。
VBAを使ってExcelにまんべんなく6枚をピックし貼り付けたいです。
どのようなアルゴリズムやループ処理をつかうべきでしょうか?

現在のファイル全貼り付けコード

Option Explicit

Sub showTargetImage()

Dim Path, buf As String Dim lngLeft, lngTop As Long Path = ThisWorkbook.Path buf = Dir(Path + "\target\" + "*.jpg") lngLeft = 296 Do While buf <> "" With Sheets("view").Pictures.Insert(Path + "\target\" + buf) .Top = 106.875 .Left = lngLeft .Width = 53 .Height = 30 lngLeft = lngLeft + 53 + 5 Application.Wait [Now()] + 350 / 86400000 End With Application.Wait [Now()] + 350 / 86400000 buf = Dir() Loop

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/18 01:56 編集

元画像のオリジナルサイズ(縦横の画素数)は、すべて同じなのでしょうか?それともバラバラなのでしょうか? また、「まんべんなく」というのは、サイズが異なる画像の場合は 拡大縮小して6枚とも同じサイズにし、任意の位置に隙間なく並べる、という意味でしょうか?それとも、画像フォルダからの選択がランダムになるように、という意味でしょうか? また、画像の並べ方(たとえば「横3列✕縦2行」等)は指定できた方がよいのでしょうか?
yghvbn

2021/01/18 02:28

>元画像のオリジナルサイズ(縦横の画素数)は、すべて同じなのでしょうか?それともバラバラなのでしょうか? →全て同じです。 >また、「まんべんなく」というのは、サイズが異なる画像の場合は 拡大縮小して6枚とも同じサイズにし、任意の位置に隙間なく並べる、という意味でしょうか?それとも、画像フォルダからの選択がランダムになるように、という意味でしょうか? →同じサイズにし、均等な隙間で並べたいです(現在横1列隙間5の間隔) 画像が動画を切ったものなので、例えば60秒60枚のデータがあったとしたら、いい感じに60秒追えるような感覚で選択したいです。 >また、画像の並べ方(たとえば「横3列✕縦2行」等)は指定できた方がよいのでしょうか? →横1列6枚を貼り付けたいです。
guest

回答1

0

ベストアンサー

vba

1Option Explicit 2 3Sub showTargetImage() 4 5Dim myPath, buf As String 6Dim myFile() As String 7Dim lngLeft As Long 8Dim i As Long, j As Long 9Dim cnt() As Long 10 11myPath = ThisWorkbook.Path 12 13buf = Dir(Path + "\target\" + "*.jpg") 14Do While buf <> "" 15 j = j + 1 16 ReDim Preserve myFile(j) 17 myFile(j) = buf 18 buf = Dir() 19Loop 20 21ReDim cnt(6) 22cnt(1) = 1 23For i = 2 To 5 24 cnt(i) = Int(j * 0.2 * (i - 1)) 25Next 26cnt(6) = j 27 28lngLeft = 296 29For i = 1 To 6 30 With Sheets("view").Pictures.Insert(myPath & "\target\" & myFile(cnt(i))) 31 32 .Top = 106.875 33 .Left = lngLeft 34 35 .Width = 53 36 .Height = 30 37 38 lngLeft = lngLeft + 53 + 5 39 40 Application.Wait [Now()] + 350 / 86400000 41 42 End With 43Next 44 45End Sub

「いい感じ」「まんべんなく」「なんとなく」という表現では
何がしたいかわかりません。
相手に伝わるようにしてください。

投稿2021/01/18 03:23

編集2021/01/19 00:15
radames1000

総合スコア1925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yghvbn

2021/01/18 04:13

ありがとうございます。この場合だと、6枚ごとに横1列となり、たとえば60枚ある場合、縦10列になりますよね? 横一列で十分なのですが、60枚あるうちの最初の6枚ではなく、なんとなく均等な間隔で取ってきたい場合はどうするのがベストでしょうか? 例で60としましたが、30だったり120だったりファイル数は様々です。
radames1000

2021/01/18 04:50 編集

If i > 6 Then 上記の6を変更すれば横1列の画像数になります。 均等な間隔を調整したければ、 lngLeft = lngLeft + 53 + 5 ここの足している数を変更すればOKです。 ご自身でちょうどいい数を探ってみてください。
yghvbn

2021/01/18 05:19

回答ありがとうございます。 均等な間隔というのは、0n,0.2n,0.4n,0.6n,0.8n,1.0n(nは枚数)枚目を取りに行くようなことを指していました。 この場合のアルゴリズムはどうなりますか? わかりにくくてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問