
前提として、VBA超初心者です。4日前に初めてVBAを知った位です…。
仕事で「現場写真」を数百~千枚程度整理し、エクセルで「写真帳」を作る必要があります。
その際に、貼り付けた写真の横に、撮影月日を「和暦」で記載する必要もあります。
今までは、貼り付けるものが工事写真なので、写り込んでいる黒板の日付を確認して、手入力で日付を記載していましたが…日付の判読が難しいもの等は、都度、画像のプロパティーを開き、撮影月日を確認してから入力する必要もあり…
流石に扱う枚数が増えると、この作業だけの為に費やす時間が膨大で…。
「写真を貼り付けたら、自動で日付を『和暦』で記載させられないか?」
と考え、VBAに手を出した所です。
ネットでかなり理想に近しいVBAを見つけられましたが…
如何せん日付が「西暦表示で時間まで記載」されるタイプで…。
「和暦」への返還方法を求めて、試行錯誤し、「VBA初心者講座」等も読破しましたが…。
どうしても改良が上手くいかないまま3日過ごしています。
何分、工期もあり、「上手くいかなければ手入力」と考えると…
これ以上悠長に時間を避けません。
そこで、下記のVBAを「時間は省き、日付を和暦で記載」する改良方法を、
恥を忍んで先人の方々に教えを請わせて戴きます。
Sub 写真挿入日付自動記載試験版()
' 関数の宣言
Dim objFS, objFile, shellObj, folderObj, myPic, MyFile, myPath
' 画像の選択、関数代入
myPic = Application.GetOpenFilename(Title:="*** 貼り付ける画像の選択 ***")
If myPic = False Then Exit Sub
ActiveSheet.Pictures.Insert(myPic).Select
With Selection
' 貼り付け位置の設定
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Width = 640 '画像の縦横比は現在4:3、サイズと比を自由に設定
.Height = 480
End With
' 関数代入
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile(myPic)
MyFile = objFile.Name
myPath = Replace(myPic, MyFile, "")
myPath = Left(myPath, Len(myPath) - 1)
Set shellObj = CreateObject("Shell.Application")
Set folderObj = shellObj.Namespace(myPath)
' 日付記載位置(貼り付けたJPGのセルから、「下に15行、右に2列」のセルに記載)
ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12) 'Xpの場合、Vista,7は12にする
Set objFS = Nothing
Set objFile = Nothing
Set shellObj = Nothing
Set folderObj = Nothing
End Sub
システム環境はWIN7、エクセル2010です。
どうか宜しくお願いいたします。
No.8ベストアンサー
- 回答日時:
非常に厄介ですし、実際の内容がこちらでは把握できないので、最適ではありませんが「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)」の後に次の数行を足してみてください。
---------------------------------------------------------------------------------------------------
Dim i, DatStr, DateStr
With ActiveCell.Offset(15, 2)
DatStr = .Value
For i = 1 To Len(.Value)
If IsNumeric(Mid(.Value, i, 1)) Then
DateStr = DateStr & Mid(.Value, i, 1)
If Len(DateStr) = 4 Then DateStr = DateStr & "/"
If Len(DateStr) = 7 Then DateStr = DateStr & "/"
If Len(DateStr) = 10 Then Exit For
End If
Next
.Value = CDate(DateStr)
.NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"";@"
End With
---------------------------------------------------------------------------------------------------
何をやっているかというと、
① 1文字ずつ数字かどうか確認して数字だったら抜き出して文字列を作っていきます。
② 4桁になったら「年」の部分が出来たので「/」を足します。(「yyyy/」になります)
③ 7桁になったら「月」の部分までが出来たので「/」を足します。(「yyyy/mm/」になります)
④ 10桁になったら日付まで出来たので次に進みます。(「yyyy/mm/dd」になります)
⑤「DateStr」を「CDate」関数を使って日付(シリアル値)に変換し元と入れ替えます。
⑥ 書式を変更します。
もし時間も表示はしたくないけど残したいのならば
---------------------------------------------------------------------------------------------------
With ActiveCell.Offset(15, 2)
DatStr = .Value
For i = 1 To Len(.Value)
If IsNumeric(Mid(.Value, i, 1)) Then
DateStr = DateStr & Mid(.Value, i, 1)
If Len(DateStr) = 4 Then DateStr = DateStr & "/"
If Len(DateStr) = 7 Then DateStr = DateStr & "/"
If Len(DateStr) = 10 Then DateStr = DateStr & " "
If Len(DateStr) = 13 Then DateStr = DateStr & ":"
If Len(DateStr) = 16 Then Exit For
End If
Next
.Value = CDate(DateStr)
.NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"";@"
End With
---------------------------------------------------------------------------------------------------
何度もすいません…。
本当にありがとうございます
.Value = CDate(DateStr)
の部分で
実行エラー13
型が一致しません
と出ました。
あと、№5のお礼でが尻切れになっていましたので、追記させていただきます。
写真貼り付け位置はB1セル
日時の記載セルはD16(正確にはD16~F17の結合セル)
です
但し、同一シートに写真3段。印刷シートを変えて更に複数の…
なので、セルの個別指定は難しいです。
No.7
- 回答日時:
表示が「?2017/?04/?29??13:14」ですと面倒ですね
「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)」の次の行に「MsgBox (ActiveCell.Offset(15, 2).Text)」と入れて実行したときににまだ「?」が表示されてしまいますか?
>表示が「?2017/?04/?29??13:14」ですと面倒ですね
Σ( ̄Д ̄;)なぬぅっ!!
マジですか…。
手入力まっしぐらですか…。
市ぬんですか?俺…。
とりあえず…結果
「?2017/?04/?29??13:14」
でした
No.6
- 回答日時:
No.3 の訂正 何をやっているのでしょうか? 申し訳ございません。
それでしたら「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)」を「ActiveCell.Offset(15, 2) = CDate(folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12))」とかではどうですか?
何度も何度もすいません
教えていただいた書式は、質問時に記載した基本VBAに立ち戻ってから、追記して試しています。
ActiveCell.Offset(15, 2) = CDate(folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12))
実行エラー13
型が一致しません
と出ました。
No.5
- 回答日時:
No.4 の追補
もし日時が表示されたのならば「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)」の次の行に「ActiveCell.Offset(15, 2).Value = CDate(ActiveCell.Offset(15, 2).Value)」と「ActiveCell.Offset(15, 2).NumberFormatLocal = "[DBNum3][$-411]ggge""年""m""月""d""日"";@"」で行けそうです。
もし日時が表示されないようでしたら、表示されているセルの位置が違うのだと思います。
写真の貼り付けたセル番号と日時が表示されているセル番号を教えてください。
また、日時以外が含まれている物が表示されたのならば、サンプルとして提示していただければ対応できるかもしれません。
何度もお手を煩わせてすいません…。
ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)
ActiveCell.Offset(15, 2).Value = CDate(ActiveCell.Offset(15, 2).Value)
ActiveCell.Offset(15, 2).NumberFormatLocal = "[DBNum3][$-411]ggge""年""m""月""d""日"";@"
の結果
ActiveCell.Offset(15, 2).Value = CDate(ActiveCell.Offset(15, 2).Value)
の型が一致しないらしいです。
写真貼り付け位置はB1セル
No.4
- 回答日時:
「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.Pars
eName(MyFile), 12)」の次の行に「MsgBox (ActiveCell.Offset(15, 2).Value)」と入れて実行したときに何が表示されますか?Sub 写真挿入日付自動記載試験版()
' 関数の宣言
Dim objFS, objFile, shellObj, folderObj, myPic, MyFile, myPath
' 画像の選択、関数代入
myPic = Application.GetOpenFilename(Title:="*** 貼り付ける画像の選択 ***")
If myPic = False Then Exit Sub
ActiveSheet.Pictures.Insert(myPic).Select
With Selection
' 貼り付け位置の設定
.Top = ActiveCell.Top
.Left = ActiveCell.Left
.Width = 640 '画像の縦横比は現在4:3、サイズと比を自由に設定
.Height = 480
End With
' 関数代入
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile(myPic)
MyFile = objFile.Name
myPath = Replace(myPic, MyFile, "")
myPath = Left(myPath, Len(myPath) - 1)
Set shellObj = CreateObject("Shell.Application")
Set folderObj = shellObj.Namespace(myPath)
' 日付記載位置(貼り付けたJPGのセルから、「下に15行、右に2列」のセルに記載)
ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12) 'Xpの場合、Vista,7は12にする
MsgBox (ActiveCell.Offset(15, 2).Value)
Set objFS = Nothing
Set objFile = Nothing
Set shellObj = Nothing
Set folderObj = Nothing
End Sub
の結果
「?2017/?04/?29??13:14」
でした
No.3
- 回答日時:
それでしたら「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderOb
j.ParseName(MyFile), 12)」を「CDate(ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12))」とかではどうですか?No.1
- 回答日時:
和暦は書式設定だけ変更すれば良いと思います。
「ActiveCell.Offset(15, 2) = folderObj.GetDetailsOf(folderObj.ParseName(MyFile), 12)」の次の行に「ActiveCell.Offset(15, 2).NumberFormatLocal = "[$-411]ggge""年""m""月""d""日"";@"」などで良いのでは?
神の如く早い回答ありがとうございます!
ですが…
日付表示は
「2017/04/29 13:14」
の様に、和暦には直りませんでした…。
原因を思案中ですが…
撮影日時からの取得だと「文字列」になるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
VBAで、JPG写真の撮影日時を読み出す関数?
Excel(エクセル)
-
Excel-VBA 撮影日時の取得
Visual Basic(VBA)
-
エクセルのマクロでデジカメの撮影日時を取得
その他(Microsoft Office)
-
-
4
エクセルVBAで縦向きの画像の挿入・回転
Excel(エクセル)
-
5
エクセル マクロ写真帳に一括で写真を張り付けたいです。
Visual Basic(VBA)
-
6
エクセル、画像ファイル名の書かれたセル(複数個所)に画像を一括で表示させる方法
Excel(エクセル)
-
7
日付入り写真をエクセルに貼り付けたい。
Excel(エクセル)
-
8
エクセル写真帳で日付けデータの取得
Windows Vista・XP
-
9
EXIF情報を出力するマクロ
Visual Basic(VBA)
-
10
エクセルに張り付けた写真のファイル名が見たい
Microsoft ASP
-
11
VBAでエクセルのシート上の画像のリサイズと配置を行いたい
Excel(エクセル)
-
12
エクセルのセルに指定画像(.jpg)を自動で貼り付けたいです。
Excel(エクセル)
-
13
【VBA】写真の貼り付けコードがうまく機能しません。
Visual Basic(VBA)
-
14
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
15
エクセル マクロで、選択している画像の数を数えたい
Excel(エクセル)
-
16
VBA 写真の挿入 回転
その他(Microsoft Office)
-
17
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
18
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
19
回転させた画像を左上のセルにフィットさせたい
Excel(エクセル)
-
20
エクセルのVBAを使用し、工事写真台帳を作成しています。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでENTERを押すと数式が...
-
31:30:00が1900/1/1 7:30:0
-
Excelに入力した個々の日付の数...
-
エクセル関数で日付かどうかの...
-
Excelで半年後の日付を計算したい
-
入力後に日付順になるように自...
-
エクセルで数字列の間に『/』を...
-
エクセル 当番表の作り方 エク...
-
日付だけを変更して印刷(Excel)
-
Excelで8/26等の日付を全てその...
-
エクセル グラフ 軸の日付表記...
-
☆Excelエクセルで入力した日の...
-
EXCELで直近の日付を抽出する関数
-
エクセルのセルにカレンダーを...
-
日付を入力したセルをファイル...
-
日付の照合でFALSEになります。
-
ワード差込について
-
参照先は空白なのに、なぜ年月...
-
EXCELで、西暦を固定させる。
-
エクセル セルに109と入力する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
入力後に日付順になるように自...
-
日付だけを変更して印刷(Excel)
-
Excelで半年後の日付を計算したい
-
エクセルでENTERを押すと数式が...
-
Excelに入力した個々の日付の数...
-
31:30:00が1900/1/1 7:30:0
-
エクセルで数字列の間に『/』を...
-
Excelで8/26等の日付を全てその...
-
エクセル関数で日付かどうかの...
-
エクセル 当番表の作り方 エク...
-
エクセルのセルにカレンダーを...
-
excelで月末日を判定したい
-
エクセルで1年後の月末を表示さ...
-
EXCELで直近の日付を抽出する関数
-
WORDで翌日や翌々日の日付を表...
-
☆Excelエクセルで入力した日の...
-
エクセル グラフ 軸の日付表記...
-
エクセルで、曜日から日付を呼...
-
参照先は空白なのに、なぜ年月...
-
VBAでセルに入っている日付をシ...
おすすめ情報