マクロ初心者です。
下記のコードはグーグルで検索してコードの継ぎ接ぎで作成しています。
処理内容は
【sub 画像 の処理について】
1、指定フォルダからフォルダ内の画像をすべて開く。
2、開いた画像名をセル「ax1」~順番に記入
3、画像は適当なところに貼り付ける
【sub 名前変更の処理について】
1、アクティブシートの画像をすべてに名前の変更を1からナンバリングする。
上記のような処理を行いたいのですが、
【画像】マクロを実行し【名前変更】の処理をすると
エクセル画面の「名前ボックス」セル番号とか表示される内容は
画像保存名のままでナンバリングできません。
オブジェクトだからなのでしょうか?
説明不足で恐縮ですがアドバイスをお願いします。
Sub 画像()
Dim strFileName As String, dirPath As String
Dim Obj As Object
Range("Ax1").Activate
dirPath = "C:\Users\画像\"
strFileName = Dir(dirPath & "*.JPG")
Do Until strFileName = ""
ActiveSheet.Pictures.Insert(dirPath & strFileName).Select
ActiveCell.Value = strFileName
ActiveCell.Offset(1, 0).Activate
strFileName = Dir()
Loop
End Sub
----------------------------------------------
Sub 名前変更()
Const conName As String = ""
Dim c As Long
Dim objShape As Object
For Each objShape In ActiveSheet.Shapes
If objShape.Type = msoPicture Then
c = c + 1
objShape.Name = conName & c
End If
Next
End Sub
No.2ベストアンサー
- 回答日時:
>→回答を頂いたように、パス名と画像ファイルをしているのでリンク画像という扱いになります。
であれば、
If objShape.Type = msoPicture Then
は、
If objShape.Type = msoLinkedPicture Then
となります。
msoPictureは、画像です。
msoLinkedPictureは、リンク画像です。
つまり、リンク画像の場合、If objShape.Type = msoPicture Then はFalseとなり
c = c + 1
objShape.Name = conName & c
が実行されません。
ちなみに、画像を挿入時に名前を変える場合と後から変える場合では
実際の処理結果に違いが出ます。
すでに、名前が存在した場合は、どうするかとか、、、
後からなら、既存のシェイプも条件を通れば、リネームされることになります。
このあたりの仕様を検討してプロセスを考えると良いかと思います。
ちなみに、後からシートにある画像に対してリネームを行うなら
同じモジュールにある場合。
Loop
Call 名前変更
End Sub
でOKかと、、
また、挿入時なら
Const conName As String = ""
Dim c As Long
Range("Ax1").Activate
strFileName = Dir(dirPath & "*.JPG")
Do Until strFileName = ""
ActiveSheet.Pictures.Insert(dirPath & strFileName).Select
c = c + 1
Selection.Name = conName & c ’ここでリネーム
ActiveCell.Value = strFileName
ActiveCell.Offset(1, 0).Activate
strFileName = Dir()
Loop
エラー対策が必要になるかと、、、
ファイルを選択して、、、ならファイルピッカー FileOpenPicker
フォルダ内すべてなら、、、フォルダピッカーを FolderPicker を使うと良いでしょう。
No.3
- 回答日時:
投稿して気が付きました。
13などの番号が間際らしかったのですね。
Shapeの種別に関する参考サイトです。
https://www.relief.jp/docs/excel-vba-list-msosha …
No.1
- 回答日時:
こんにちは、
>画像保存名のままでナンバリングできません。オブジェクトだからなのでしょうか?
If objShape.Type = msoPicture Then は、画像ならとなっていますが、貼り付けたjpgは画像(13)と確定していますか?
>ActiveSheet.Pictures.Insert(dirPath & strFileName).Select リンク画像 (11)になっているのではないでしょうか?
リンク貼り付けが問題になる場合は、貼り付け方を検討する必要があると思います。
このまま、リネームするのであれば、Typeを確認してみてはいかがでしょう。
Const conName As String = ""
Dim c As Long
Dim objShape As Object
For Each objShape In ActiveSheet.Shapes
Debug.Print objShape.Type ’を追加してイミディエイトウィンドウで確認(msoPictureは13です。)
If objShape.Type = msoPicture Then
c = c + 1
objShape.Name = conName & c
End If
Next
Qchan1962さん丁寧な回答ありがとうございます。
無事に自分のしたいマクロを組むことに成功しました。
説明不足なところが多くお手数をお掛けしました。
また近いうち質問することがあると思うので、
その際はまたよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vb.net 画像の透過について
-
スマホでサイトの画像を長押し→...
-
Excel ユーザーフォームで表示...
-
jqueryスライダーを2段でスライ...
-
「問題も答えも画像」のクイズ...
-
画像の上に重ねて配置した吹き...
-
【PowerPoint】VBAで画像サイズ...
-
同じ画像を複数回表示させる
-
gif 画像上の ボタンに リン...
-
UWSCでループ処理がうまくいき...
-
【WPF】画像の切り替え
-
VB.NETの画像の切り取り...
-
パネルに画像
-
C#で画像を他の画像に貼り付け...
-
ImageMagickでgif画像の一部が...
-
UWSC「画像が無い場合」
-
UWSCの画像認識について教えて...
-
colorbox.js 画像クリックで閉じる
-
背景画像の繰り返しについて
-
Excelで画像クリックのアテンシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 複数のImageコントロ...
-
背景画像の繰り返しについて
-
【EXCEL VBA】ダブルクリックで...
-
UWSCの色判定
-
Excel ユーザーフォームで表示...
-
uwcs のマクロで画像認識をして...
-
UWSC「画像が無い場合」
-
uwscの画像認識に失敗します。
-
スマホでサイトの画像を長押し→...
-
VBA シート毎に画像挿入
-
VBAのユーザーフォームのイメー...
-
vb.net 画像の透過について
-
PowerPoint VBA で画像の鮮明度...
-
画像処理したBitmapをピクチャ...
-
画像認識アルゴリズムについて
-
HTMLでサイトの模写をしていま...
-
gif 画像上の ボタンに リン...
-
「using Windows」でエラーが出る
-
【WPF】画像の切り替え
-
画像のピクセルデータの取得
おすすめ情報
早速の回答ありがとうございます。
>画像保存名のままでナンバリングできません。オブジェクトだからなのでしょうか?
If objShape.Type = msoPicture Then は、画像ならとなっていますが、貼り付けたjpgは画像(13)と確定していますか?
→マクロ起動後の画像は「図13」のように確定しています
>ActiveSheet.Pictures.Insert(dirPath & strFileName).Select リンク画像 (11)になっているのではないでしょうか?
→回答を頂いたように、パス名と画像ファイルをしているのでリンク画像という扱いになります。
「挿入タブ」から「画像」を複数選択するような通常動作である場合、
最初の質問のマクロ「名前変更」が実行され
開いた順番に1から10にナンバーリングされます
のようにしたいです。説明不足で申し訳ありません。