Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 8 : Excel 2013)
新旧2ファイルを比較し、更新項目とその値を別ファイルに抽出する
投稿日時: 17/12/17 19:47:58
投稿者: hana87

 
週4日、サーバーから抽出した新旧ファイルを比較し、更新された項目名とその値を作業日名ファイルで保存していく必要があります。
 
自分の知識経験では1項目ごと関数で比較し、フィルターをかけるくらいしか思いつきません。
150行ほどで関数で比較してみましたが、大変時間がかかります。
どうにかVBAで作業時間を短縮できないか、と3週間ほど考えて試していますがどれもうまく出来ず、
VBA学習を2か月前に始めていますが、何がダメなのか理解できません。
 
どなたかご教示ください。
 
行いたいことは、
・A(旧情報)のファイル内容とB(最新情報)のファイル内容を管理番号をキーにして比較し
 Bのファイルで更新された項目と内容(値:日付、メーカー名、件名など)を抽出する
 
・B(最新情報)のファイル内容で情報が何も更新されていない場合はA(旧情報)のファイル内容のまま
 B(最新情報)のファイルが空欄の場合、A(旧情報)のファイル内容は空欄で上書きすることなく、
 A(旧情報)のファイル内容の値のままとする
 
です。
 
 
比較項目は50項目(50列)です。
A(旧)ファイル、B(最新情報)ファイルの項目名は一致していますが並びは異なっています。。
A,Bファイル共に1行目に項目名があり、列に空欄はありません。
行数は6000行あり、途中空欄が含まれています。
 
以下にデータ例を記入します。
 
 
A(旧)ファイル内容
 
管理番号    件名      予定日    メーカー名      
F0040002    鈴木001PT    2017/10/10 JJJ       
F0001302    佐藤004PW    2017/8/18          
F0000467    木村003PR    2017/9/19 タイヨウネーション
F0040054    田中002EF    2017/11/1         
F0022002    元木006WW    2017/9/10 F-XOOOK    
             
 
B(最新情報)ファイル内容
 
管理番号    件名      予定日    メーカー名      
F0040002    鈴木001PT    2017/10/15 JJJ      ←予定日が10/15へ変更されている
F0001302    佐藤004PW    2017/8/18 NNN      ←メーカー名が追加されている
F0000467    矢野003PR    2017/9/19 タイヨウネーション ←件名が変更されている
F0040054                           ←更新情報はないのでA(旧)
                                  ファイルのままとしたい
F0022002    元木006WW    2017/9/10 TWW888H   ←メーカー名が変更されている
                                
 
 
(抽出し新しいファイルを作成するイメージ)
C(更新情報)ファイル内容(=更新する情報のみ項目名と値を抽出し別ファイルを作成する)
  
管理番号    件名      予定日     メーカー名       訪問日
F0040002             2017/10/15
F0001302                 NNN        
F0000467    矢野003PR    
F0040054      
F0022002     F-XOOOK    
 
どうぞ、よろしくお願いいたします。
 

回答
投稿日時: 17/12/17 22:13:01
投稿者: simple

トライしたのであれば、うまくいかないままで結構ですから、
途中まででもアップしてみてはどうですか?
そのほうが、ご自分の勉強になると思いますけどねえ。

回答
投稿日時: 17/12/18 10:30:14
投稿者: もこな2

こんにちは。投稿を拝見しましたが何がお困りかよくわからなかったので確認です。

引用:
どうにかVBAで作業時間を短縮できないか、と3週間ほど考えて試していますがどれもうまく出来ず、VBA学習を2か月前に始めていますが、何がダメなのか理解できません。
どれが、どのようにうまく出来なかったのでしょうか?
 
引用:
どなたかご教示ください。
なにをでしょうか?
 
既にSimpleさんがコメントされておりますが、うまくいかなかったコードでも、助言があれば解決のヒントになる部分があるかもしれませんので、コードを提示してアドバイスを求めてみては如何でしょうか

回答
投稿日時: 17/12/18 19:12:58
投稿者: 細雪

ちょっとだけ、考えてみました。
 
 
はてさて、何がどううまくいかないのかなぁ。
躓く箇所があるとしたら「Aの何行目にあるのか?」を探すときくらいかなぁ。
 
だとしたら、そこまで難しく考える必要もないです。
例えば「A列からある値を探すとき」って、一般機能ではどうしますか?
おそらく(ほぼ間違いなく)「検索」機能を使いませんか?
コレを「マクロの記録」して、使いやすく書き直せば良いです。
んで、検索結果の「行」だけを抜き取って、変数に代入して使えばラクチンです。
  変数 = 探す領域.Find(What:="探したい値").Row
ただし、管理番号に(A・Bそれぞれ)重複が無いのが条件ですけれど。
という感じですね。
 
 
 
ま、もっとも、ココで躓いてるのかどうか解らなかったりしますけど(笑)。
現段階ではこんな当たるか解らない中途半端なアドバイスしかできないです。
「何でどう躓いているのか」がサッパリ伝わってこないので。
 
思う動きをしない自作コードを提示するのは恥ずかしくないですよ。
重要なのは「添削・指摘・助言・その他」をちゃんと理解して、
今後の構築に活かせるかどうか?なのですよ。
むしろ、投げっ放しで然も「作ってくれ」風の質問の方が余程恥ずかしいです。
なのでキッチリ、やりたいことと現状の自作コードをまとめてご提示くださいませ。
 
 
 

回答
投稿日時: 17/12/20 21:53:16
投稿者: simple

一部に間違いはあるものの、とてもしっかりした文章なので、
期待しているのですが、なかなか後続発言がないですね。
 
ところで、
Aファイルにはあった内容が、Bファイルで消去された場合
Cファイルにはどのように表示するんでしょうかねえ。
まったくのブランクだと、異動があったことが分からないですよね。
それとも、そういうケースは無いと考えてよいのでしょうか?

トピックに返信