
VBA初心者です。
突如作成を依頼されてしまいました。
どなたかお手すきでしたら、よろしくお願いします。
まず2つのフォルダA(新しいデータのExcelファイル)、
フォルダB(古いデータのExcelファイル)があります。
それぞれには同じ名前のExcelファイルが200個近く入っているのですが、
新旧同じ名前同士のファイルを比較し、差分箇所に色をつけるという
作業をしたいのです。(新旧のファイルどちらにも色を付ける)
できればフォルダAとフォルダBを選択したら勝手に処理してくれるという
プログラムにしたいのですが、どのようにしたらよろしいでしょうか。
数値の比較ですが、範囲を指定してマッチしてなければ色付け、という
処理でもいいかな・・と思っております。
どうかよろしくお願いします。
No.2ベストアンサー
- 回答日時:
こんなのではどうでしょうか?
両フォルダには同じ名前のExcelファイル(各シート数も同じ)があるとして、片方からだけ見てます。
同名のブックを開けないので作業フォルダに別名でコピーして作業をして戻してます。(これが結構長くしてる)
Const workFolder ="???"を適当に設定してください。
シートのチェックはUsedRange内のチェックをしてます。
さすがにこれは片方からだけとはいかないので両方からチェックしてます。
当然ダブってチェックする部分がほとんどですが・・・処理が長くなりそうなのでダブり部分のチェックはしません。
かわりに作業の進行状況をステータスバーに表示しますので、シートにボタンを作って、ボタンのクリックからsampleを呼んでみてください。
Option Explicit
Const workFolder = "c:\temp" '適当な作業フォルダを設定してください。
Sub sample()
Dim srcFolder As String
Dim dstFolder As String
srcFolder = "c:\test\a" 'フォルダA
dstFolder = "c:\test\b" 'フォルダB
Dim fso As New FileSystemObject
Dim srcFile As String
Dim dstFile As String
Dim srcWorkFile As String
Dim dstWorkFile As String
Dim f As File
Dim n As Integer '進行状況表示用
Dim i As Integer '進行状況表示用
'表示設定
Application.DisplayStatusBar = True 'ステータスバー表示
Application.ScreenUpdating = False '画面更新禁止
'作業ファイル名
srcWorkFile = workFolder & "\src.xls"
dstWorkFile = workFolder & "\dst.xls"
n = fso.GetFolder(srcFolder).Files.Count
For Each f In fso.GetFolder(srcFolder).Files
i = i + 1
If f Like "*.xls" Then
'srcFolderのファイルと同じ名前のファイルがdstFolderにもあるとする
srcFile = srcFolder & "\" & f.Name
dstFile = dstFolder & "\" & f.Name
'ステータスバー表示
Application.StatusBar = srcFile & " と " & dstFile & " を、チェック中 (" & i & "/" & n & ")"
'作業フォルダにファイルをコピー
fso.CopyFile srcFile, srcWorkFile, True
fso.CopyFile dstFile, dstWorkFile, True
'ブックチェック
checkBook srcWorkFile, dstWorkFile
'作業フォルダのファイルを戻す
fso.CopyFile srcWorkFile, srcFile, True
fso.CopyFile dstWorkFile, dstFile, True
End If
Next
'作業ファイルを削除
fso.DeleteFile srcWorkFile
fso.DeleteFile dstWorkFile
'後始末
Set fso = Nothing
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
'ブック(ファイル)のチェック
Sub checkBook(srcFile As String, dstFile As String)
Dim srcBook As Workbook
Dim dstBook As Workbook
Dim ws As Worksheet
Set srcBook = Workbooks.Open(srcFile)
Set dstBook = Workbooks.Open(dstFile)
'srcBookのシート名と同じシートがdstBookにもあるとしてチェック
For Each ws In srcBook.Worksheets
checkSheet ws, dstBook.Worksheets(ws.Name)
Next
srcBook.Close savechanges:=True
dstBook.Close savechanges:=True
End Sub
'シートのチェック
Sub checkSheet(srcSheet As Worksheet, dstSheet As Worksheet)
'背景色のクリア
srcSheet.Cells.Interior.ColorIndex = xlNone
dstSheet.Cells.Interior.ColorIndex = xlNone
'両方のUsedRange範囲内で変更点をチェック
'ダブってチェックする部分が多いけれど
checkSheetUsedRange srcSheet, dstSheet
checkSheetUsedRange dstSheet, srcSheet
End Sub
'シートのチェック(srcSheetのUsedRange内)
Sub checkSheetUsedRange(srcSheet As Worksheet, dstSheet As Worksheet)
Dim r As Range
For Each r In srcSheet.UsedRange
If r <> dstSheet.Range(r.Address) Then
r.Interior.ColorIndex = 3
dstSheet.Range(r.Address).Interior.ColorIndex = 3
End If
Next
End Sub
コメントありがとうございます。
お忙しいところココまで考えて頂きありがとうございます。
ほとんど丸投げ的な感じになってしまい申し訳ないという気持ちです・・・。
ほとんどやりたい事は実現されていますので、これを参考に詰めて生きたいと思います。
本当にありがとうございました。
No.3
- 回答日時:
これは相当VBAの熟練者で無いと無理だ。
丸投げ的回答期待に見えるが、それも無理だ。
>Excelファイルが200個近く入っているのですが
これが時間がかかる基になりそう。
ーー
課題要素の分解
(1)>フォルダB(古いデータのExcelファイル)があります
フォルダBのファイルを基にフォルダAを探す、という(存在しなければメッセージを出す)というコードからはじめる(内容コンペアは次の問題としておいておく、省略する)とにしたたら。それが出来ないようでは先に勧めない。
(2)新旧亜フィルを捕まえたら、私ならソート法でやる。
新旧ファイルをキー(たとえば職員に関数ファイルなら、職員番号に
当たるもの)でソートする。
そしてマッチングのロジックで両キーの等しいもの(行)を、内容(列)を比較して、色付けや書き出しをする。
マッチングのロジックが判るかどうか。
ーー
既製ソフトが無いかそういうのを探すことだ。
ーーー
同じというものを比較せねば意味ないのだが、質問に何も書いてなくて、そういうことの意識の弱いうち(レベルで)は、この種のプログラムは無理だ。
ーー
アクセスを使って突合せを考えるほうが、まだ真ともかなと思う。こちらも未経験だと習得に道は遠いが。
コメントありがとうございます。
複数のヒントを提示していただき、ありがたく思います。
imogasiさんの仰るとおりです。
普段はPHPなどを触っておりほとんどVBAの経験がなく、人員欠如により
急遽作成を依頼されたもので慌てておりました。
丸投げ的文章になってしまった事はお詫びいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/07/01 12:54
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/02 11:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel: ファイル名になぜ、[...
-
エクセルのファイル:「自分」が...
-
CSVファイルの特定行の削除
-
ファイルが移動してもリンクの...
-
VBScriptでExcelファイルをDLす...
-
CSVファイルの暗号化
-
FTPのgetとputの使いわけ。
-
Excelファイルを比較し、差分箇...
-
彼女の過去の恋愛に嫉妬してし...
-
エクセル保存終了で一時ファイ...
-
このファイルは外部のエディタ...
-
複数のExcelファイルにある同名...
-
エクセルの一時ファイルが保存...
-
html ネットワークドライブへ...
-
VBでHTMLファイルが開けない
-
VBA ファイル一覧を取得して全...
-
[Unity]シーンファイルの中が消...
-
batでファイル名を変更したい(...
-
VBAにおいて、ファイルの移...
-
自動で.xlsを閉じて指定フォル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CSVファイルの特定行の削除
-
彼女の過去の恋愛に嫉妬してし...
-
エクセルのファイル:「自分」が...
-
Excel: ファイル名になぜ、[...
-
ファイルが移動してもリンクの...
-
複数のExcelファイルにある同名...
-
iCloud for Windowsをアンイン...
-
EXCELVBAにて文字列にして「01...
-
[Unity]シーンファイルの中が消...
-
vbsからのExcelマクロ呼び出し...
-
5000個のtiffファイルをpdfへ変...
-
batでファイル名を変更したい(...
-
WINDOWS CMDからゴミ箱のファ...
-
VBA ファイル一覧を取得して全...
-
docxをmht形式で保存したファイ...
-
CSVファイルの暗号化
-
バインダーの作り方
-
FTPのgetとputの使いわけ。
-
フォルダ内の複数のファイルの...
-
自動で.xlsを閉じて指定フォル...
おすすめ情報