[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同じ日付のファイルを一つのファイルにまとめられますか』(ギラくん)
いつもお世話になります
ファイル名が
令和03年06月15日(本店)と
令和03年06月15日(支店)
みたいな2つのファイルを
令和03年06月15日
みたいに一つのファイルにしたいのですが
こういうことってできますでしょうか
ちなみに同じフォルダに入っています
できなければいいいです
よろしくお願いします
< 使用 Excel:Excel2019、使用 OS:Windows10 >
(もこな2) 2021/06/15(火) 23:15
なお、自分で作る気が無く、ただ作成依頼したいだけならそのように書いておいたほうがいいですよ。
(その場合、私は興味が無いので撤退しますが誰かが気を利かせて作ってくれるかもしれません)
(もこな2) 2021/06/16(水) 20:31
(もこな2) 2021/06/16(水) 21:33
(砂糖) 2021/06/17(木) 17:21
(あ) 2021/06/17(木) 17:44
Sub 実験01() Dim MyDate As Date Dim MySTR As String
MyDate = "6/15" MySTR = StrConv(Format(MyDate, "gggee年mm月dd日"), vbWide)
MsgBox MySTR & "(本店).xlsx" & vbLf & _ MySTR & "(支店).xlsx" & vbLf & _ MySTR & "(合体).xlsx" End Sub
■2
それ以外は↓のようにすればよいでしょう
1) 本店のファイルを開く (必要な命令はマクロの記録で調べられます) 2) 支店のファイルを開く (必要な命令はマクロの記録で調べられます) 3) 本店のファイルに支店のファイルを合体(コピペ)する (必要な命令はマクロの記録で大体調べられます) 4) 支店のファイルを保存せずに閉じます (必要な命令はマクロの記録で調べられます) 5) 本店のファイルを名前を付けて保存します (必要な命令はマクロの記録で調べられます)
(もこな2) 2021/06/17(木) 18:16
5) 本店のファイルを【名前を付けて保存】します (必要な命令はマクロの記録で調べられます)
上書き保存とは言ってません。
(もこな2) 2021/06/17(木) 19:36
(ギラくん) 2021/06/17(木) 19:58
MyDate = "6/15" はなぜ6/15なのでしょうか テストの意味ならわかりますが 例示したファイル名はあくまでも例で 日付は固定ではないです
(ギラくん) 2021/06/17(木) 20:56
それは自己判断できませんか?
(言わなくてもわかりませんか?)
(もこな2) 2021/06/17(木) 22:10
(ギラくん) 2021/06/17(木) 22:17
1)InputBoxを使うとか、セルに入力しておくとか、Date(マクロを実行した日)などで対象の日付を取得する 2)↑の日付を元に【令和03年06月15日】のような文字列を取得する 3)決まったフォルダ(例:C:\hogehoge\)から↑と【(本店).xlsx】を組みあせたブックを開く 4)決まったフォルダ(例:C:\hogehoge\)から↑と【(支店).xlsx】を組みあせたブックを開く 5)【令和03年06月15日(支店).xlsx】から【令和03年06月15日(本店).xlsx】にコピー&ペーストする 6)【令和03年06月15日(本店).xlsx】を決まったフォルダ(例:C:\hogehoge\)に【令和03年06月15日】と【(合体)】を組みあせたブック名で"名前を付けて保存"する
なぜ「開いたファイル名の日付を取得」する必要があるのですか?というか"開いたファイル名の日付"とはどういう意味ですか?
(例えば、C:\hogehoge\令和03年06月15日(本店).xlsx はユーザーが指定して開く設計であって、それに対応する(支店)のファイルを開きたいとかそういうことですか?) (それならフルパスを取得してから"本店"を"支店"に置換すればよいでしょう)
■4
>これでよろしいでしょうか
しりません。自分で判断(検証)してください。
(もこな2) 2021/06/17(木) 23:44
2)↑の日付を元に【令和03年06月15日】のような文字列を取得する の方法がわかりません 教えていただけたら助かります よろしくお願いします (ギラくん) 2021/06/20(日) 22:34
他のトピックもそうですが、どのように考えたのか示していただかないと、こちらでは何が分からないのかわかりません。
ともすれば、ごねて正解コードを欲しがってるだけのようにも見えてしまします。
(もこな2) 2021/06/20(日) 23:43
Columns("A:A").Select Selection.Replace What:="(*", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False←(以降を消す Range("A1").Select ファイル名 = Range("a1").Value←日付を取得 ファイル名2 = StrConv(Format(ファイル名, "gggee年mm月dd日"), vbWide)←取得した日付を元号の形に直す ここまでは問題ないです Workbooks.Open Filename:="フルパス\ファイル名2&(支店).xlsx"←でエラーになりました 助けてくださいよろしくお願いします
End Sub
(ギラくん) 2021/06/21(月) 19:54
■7
(再確認)
なぜ「開いたファイル名の日付を取得」する必要があるのですか?というか"開いたファイル名の日付"とはどういう意味ですか?
■8
提示されたアプローチだと、ActiveWorkbookが本店ファイルということですね。
であれば、やはりfullnameのうち、本店を支店に【Replace関数で置換】すればよくないですか?
■9
提示されたコードは理解して書いたものですか?
特に↓は、全部が文字列になってますが狙いどおりですか?
"フルパス\ファイル名2&(支店).xlsx"
(もこな2) 2021/06/21(月) 20:08
■7 (再確認) なぜ「開いたファイル名の日付を取得」する必要があるのですか?というか"開いたファイル名の日付"とはどういう意味ですか? つまり令和3年6月21日(本店)を取得したかったです ■8 提示されたアプローチだと、ActiveWorkbookが本店ファイルということですね。 であれば、やはりfullnameのうち、本店を支店に【Replace関数で置換】すればよくないですか? 方法がわかりません 教えていただけたら助かります ■9 提示されたコードは理解して書いたものですか? 特に↓は、全部が文字列になってますが狙いどおりですか?
"フルパス\ファイル名2&(支店).xlsx" いやファイルを開きたいです ファイル名2と(支店)を組み合わせたファイルを開きたいです 2に関してはまだてにつけててません すいませんがよろしくおねがいします (ギラくん) 2021/06/21(月) 20:22
■11
>方法がわかりません 教えていただけたら助かります
ヒントは出してますが何かご自身で調べてみましたか?
>やはりfullnameのうち https://excelwork.info/excel/bookpathfullname/ https://www.moug.net/tech/exvba/0060036.html https://excelwork.info/excel/bookpathfullname/
すなわち、アクティブブックのフルパス(フォルダとファイル名)を求めるならば↓でokです。
MsgBox ActiveWorkbook.FullName
>Replace関数 http://officetanaka.net/excel/vba/function/replace.htm https://www.tipsfound.com/vba/05replace https://www.sejuku.net/blog/31570
すわなち、おっしゃる通りの状況ならば
MsgBox Replace(ActiveWorkbook.FullName, "本店", "支店")
↑で↓のようになるとお伝えしたつもりです。
C:\hogehoge\令和03年06月15日(本店).xlsx ^^↓^^ C:\hogehoge\令和03年06月15日(支店).xlsx
■12
(再掲)
↓は、全部が文字列になってますが狙いどおりですか?
"フルパス\ファイル名2&(支店).xlsx"
【ヒント1】「""」で囲んだ部分は文字列として認識されます
【ヒント2】文字列を結合(合体)させるには「&」を使います
(もこな2) 2021/06/22(火) 07:52
Sub さんぷる() Const フォルダ As String = "C:\hogehoge\" Dim MyDate As Variant Dim MySTR As String Dim srcWB As Workbook Dim 最終行 As Long
'InputBoxで【日付】を取得 Do MyDate = InputBox("日付を入力してください") If MyDate = "" Then Exit Sub If Not IsDate(MyDate) Then If MsgBox("日付として認識出来ません" & "処理を中止しますか?", vbYesNo) = vbYes Then Exit Sub End If End If Loop Until IsDate(MyDate)
'取得した【日付】を基に文字列に変換 MySTR = StrConv(Format(MyDate, "gggee年mm月dd日"), vbWide)
'支店ファイルを開いてコピー元ブックとして覚える Set srcWB = 【支店ブックを開く命令(マクロの記録で調べられます)】(フォルダ & MySTR & "(支店).xlsx")
'貼付先にするため本店ファイルを開く With 【本店ブックを開く命令(マクロの記録で調べられます)】(フォルダ & MySTR & "(本店).xlsx")
'本店ブックの1番目のシートを作業対象にする With .Worksheets(1) 最終行 = 【前トピック参照】
'支店ブックの1番目のシートの使用しているセルをコピー srcWB.Worksheets(1).UsedRange.【コピーする命令(マクロの記録で調べられます)】
'本店ブックの最終行の下に貼付 .Cells(最終行 + 1, "A").【貼付する命令(マクロの記録で調べられます)】
'支店ブックを保存せずに閉じる srcWB.【ブックを閉じる命令(マクロの記録で調べられます)】 End With
'本店ブックを名前を付けて(別名で)保存 .【名前を付けて保存する命令(マクロの記録で調べられます)】 フォルダ & MySTR & "(合体)"
'合体(別名で保存)したブックを閉じる .【ブックを閉じる命令(マクロの記録で調べられます)】
End With End Sub
(もこな2) 2021/06/22(火) 12:05
Columns("A:A").Select Selection.Replace What:="(*", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("A1").Select ファイル名 = Range("a1").Value ファイル名2 = StrConv(Format(ファイル名, "gggee年mm月dd日"), vbWide) Workbooks.Open Filename:=mypath & "\" & ファイル名2 & "(支店).xlsx"
End Sub
これで
テストをしたところ 支店ファイルを開くところまではできました
後は本店のシートをすべてコピーするだけです
どうするか調べてもよくわかりませんでした
よろしくお願いします
(ギラくん) 2021/06/22(火) 20:30
また↓で学んだことが生かせるのではありませんか?
[[20210503222756]]『複数のシートのデータを一つにまとめたい(他サイトを参考にしてます)』(ギラくん)
[[20210608200242]] 『マクロの改造』(ギラくん)
■15
「2021/06/21(月) 19:54」、「2021/06/22(火) 20:30」に提示されたコードで使用しているのは、Replaceメソッドです。
私が言っている(■8,■11で示している)のは、Replace関数です。
名前が一緒なのでややこしいですが、動き(特に対象が)違いますので両者の違いを理解されておいたほうがよいでしょう。
■16
↓で説明済ですが、いちいちSelectする必要はないです。
[[20210503222756]]『複数のシートのデータを一つにまとめたい(他サイトを参考にしてます)』(ギラくん)
■17
上記を踏まえて確認します。
1) ↓は何を目的にしているのですか? 2) ↓はどのブック」の「どのシート」のA1セルに書き込むつもりなのですか? Range("a1") = ActiveWorkbook.Name
3) ↓は「どのブック」の「どのシート」を対象にしているつもりなのですか? 4) ↓は何故、A列全体を処理対象にする必要があるのですか? Columns("A:A").Select Selection.Replace What:="(*", Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
■余談です
正直、確認したことについて返事が返ってきませんし、過去トピックを含めプロシージャ名やコメントに理解してるとは思えない(テキトーに切り貼りしてるだけに思える)箇所があり、お付き合いする気持ちがかなり薄れています。
また、いつまでもキャッチボールを続けていると、遠慮して回答を止める方がいらっしゃるかもしれませんから、私は次で終わりにしようと思います。(といいつつコメントしちゃうかもですが・・・)
(もこな2) 2021/06/22(火) 22:47
理解が乏しくて 少し考えてみます
(ギラくん) 2021/06/23(水) 19:19
Workbooks.Open Filename:=ファイル名 Set wb2 = ActiveWorkbook wb1.Sheets().Copy After:=wb2.Sheets(1) wb2.SaveAs Filename:=ファイル名2 & "まとめ.xlsx" End Sub
テストもして動きましたありがとうございました
(ギラくん) 2021/06/25(金) 18:01
Sub テキトー() With ActiveWorkbook Workbooks.Open(Replace(.FullName, "本店", "支店")).Worksheets.Move After:=.Sheets(1) .SaveAs Filename:=Replace(.FullName, "本店", "まとめ") .Close End With End Sub
それにしても、日付の話は何だったんだって気になります・・・・・
(これ以上このトピックにお付き合いするつもりがないので、返事は不要です)
(もこな2) 2021/06/25(金) 18:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.