[[20210615224015]] 『同じ日付のファイルを一つのファイルにまとめられ』(ギラくん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同じ日付のファイルを一つのファイルにまとめられますか』(ギラくん)

いつもお世話になります
ファイル名が
令和03年06月15日(本店)と
令和03年06月15日(支店)
みたいな2つのファイルを
令和03年06月15日
みたいに一つのファイルにしたいのですが
こういうことってできますでしょうか
ちなみに同じフォルダに入っています
できなければいいいです
よろしくお願いします

< 使用 Excel:Excel2019、使用 OS:Windows10 >


たとえば、令和03年06月15日(本店)と令和03年06月15日(支店)の両方をひらいて、どちらかのデータのしたに、もう片方のシートを貼り付けするなどの方法により可能です。
安心してチャレンジしてください。

(もこな2) 2021/06/15(火) 23:15


もこな2さんありがとうございます
基本的な方法はわかるのですがそれをマクロでできないでしょうか
書き方がわるくすいません
(ギラくん) 2021/06/16(水) 17:12

>マクロでできないでしょうか
繰り返しになりますが【可能です。】安心してチャレンジしてください。

なお、自分で作る気が無く、ただ作成依頼したいだけならそのように書いておいたほうがいいですよ。

 (その場合、私は興味が無いので撤退しますが誰かが気を利かせて作ってくれるかもしれません)

(もこな2) 2021/06/16(水) 20:31


作りたいのですが なんにせよ
難しいので教わりながら作りたいです
(ギラくん) 2021/06/16(水) 21:26

>なんにせよ難しい
何処で詰まっているのですか?
主要な命令は【マクロの記録】で調べることができるとおもいますが・・・

(もこな2) 2021/06/16(水) 21:33


同じフォルダで同じ日付のファイルをし調べ あらたに同じ日付の新規ブックを作ることにまず詰まってます
(ギラくん) 2021/06/17(木) 16:54

ファイル名を取得したり作成日を調べるならScripting.Filesystemobjectを調べるといいかも
重複した日付を抜き出すならScripting.DictionaryのExistsメソッドなどが使えるかもしれません

(砂糖) 2021/06/17(木) 17:21


>あらたに同じ日付の新規ブックを作る
これを手動でやってみましょう。
そのときに、【マクロの記録】をしていれば、それなりのコードができるでしょう。

(あ) 2021/06/17(木) 17:44


ありがとうございます
ファイルを扱うマクロは初めてなので色々教えていただけたら助かります
(ギラくん) 2021/06/17(木) 17:47

■1
とりあえず、マクロの記録では得られない部分はこんな感じでしょう。
    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


ありがとうございます
一つ訂正させてください
合体したデータは新規ブックで保存したいです
説明が下手でした
(ギラくん) 2021/06/17(木) 19:28

再掲
 5) 本店のファイルを【名前を付けて保存】します (必要な命令はマクロの記録で調べられます)

上書き保存とは言ってません。

(もこな2) 2021/06/17(木) 19:36


失礼しました

(ギラくん) 2021/06/17(木) 19:58


もこな2さん
とりあえず 実験01のマクロは動きました
ただ
        MyDate = "6/15"
はなぜ6/15なのでしょうか
テストの意味ならわかりますが
例示したファイル名はあくまでも例で
日付は固定ではないです

(ギラくん) 2021/06/17(木) 20:56


>例示したファイル名はあくまでも例で
>日付は固定ではないです
こちらもその"例"に合わせて提示してます

それは自己判断できませんか?
(言わなくてもわかりませんか?)

(もこな2) 2021/06/17(木) 22:10


なんとなく流れがわかりました
1 日付のファイルを開く (例 令和3年6月15日 (本店))
2 開いたファイル名の日付を取得 ※ 1
3 その日付の(支店) ファイルのデータと合体
4 新しいブックを作る
これでよろしいでしょうか
※のやり方がわかりません

(ギラくん) 2021/06/17(木) 22:17


■3
うーん。詰まっている部分がよくわかりません。
こちらが想像しているのは、こうですが・・・・
 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


少し考えてみます週明けになるかもしれませんがまたコメントします
(ギラくん) 2021/06/18(金) 18:15

お久し振りです
色々考えましたが
1)InputBoxを使うとか、セルに入力しておくとか、Date(マクロを実行した日)などで対象の日付を取得する
 2)↑の日付を元に【令和03年06月15日】のような文字列を取得する
の方法がわかりません
教えていただけたら助かります
よろしくお願いします
(ギラくん) 2021/06/20(日) 22:34

■5
>方法がわかりません
それは、■1で提示済みです

他のトピックもそうですが、どのように考えたのか示していただかないと、こちらでは何が分からないのかわかりません。
ともすれば、ごねて正解コードを欲しがってるだけのようにも見えてしまします。

(もこな2) 2021/06/20(日) 23:43


失礼しました
過去コメントを見返して作ってみました
前提として令和3年6月21日(本店)を開いた状態でマクロを実行してます
Sub テスト()
Dim ファイル名 As Date
Dim ファイル名2 As String
Range("a1") = ActiveWorkbook.Name←ファイル名の令和3年6月21日(本店)をa1に表示
    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


■6
話が別の方向に進んでいるようですが…
「■2」で示したことは取り組まれたのですか?
取り組んだのであれば、それを示してみてください。
(もちろんフォルダ名など特定されて困るものがあれば変えて構いません)

■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

■10
>つまり令和3年6月21日(本店)を取得したかったです
意味が分かりません。
よしんば、「開いたファイル名の【日付】を取得」なのですから、【令和3年6月21日】を取り出したいのなら意味は分かりますが・・・・・
もう一度聞きます。
"開いたファイル名の日付"とはどういう意味ですか?

■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


■13
「■6」のお返事がないところをみると、今回は採用しないようですが「■2」を踏まえれば以下のような感じの処理になったでしょう。
余力があれば”考えて”みてもよいとおもます。
    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


もこな2さん色々ありがとうございます提示されたものを見て少し考えてみます
コメントが少し遅れるかもしれません
よろしくお願いします
(ギラくん) 2021/06/22(火) 18:49

昨日のコードを
すこしもこな2さんの指摘とネットを見て
作ってみました
Sub テスト()
Dim ファイル名 As Date
Dim ファイル名2 As String
Dim mypath As String
mypath = ActiveWorkbook.Path
Range("a1") = ActiveWorkbook.Name
    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


■14
>後は本店のシートをすべてコピーするだけです
>どうするか調べてもよくわかりませんでした
マクロの記録は試したのですか?(何回言わせるのですか・・・・)

また↓で学んだことが生かせるのではありませんか?
[[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


もこな2さん色々ありがとうございますそしてすいません・・・・・・・・・・・・・

理解が乏しくて 少し考えてみます

(ギラくん) 2021/06/23(水) 19:19


おそくなりましたネットを見て色々工夫して組んでみました
Sub テスト2()
Dim ファイル名 As String
Dim ファイル名2 As String
Dim wb1 As Workbook
Dim wb2 As Workbook
Set wb1 = ActiveWorkbook
ファイル名 = Replace(ActiveWorkbook.FullName, "本店", "支店")
   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


ちらっと思わないではなかったですが、1シートにまとめる必要はなかったんですね。
提示のものを整理(ちょこっと改造)するとこれで済みますよ。
    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.