Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6441 / 13646 ツリー ←次へ | 前へ→

【45211】2つのファイルを1つに合体したい カド 06/12/15(金) 16:43 質問[未読]
【45221】Re:2つのファイルを1つに合体したい 飛ばない豚 06/12/15(金) 18:19 発言[未読]
【45230】Re:2つのファイルを1つに合体したい カド 06/12/15(金) 20:30 お礼[未読]
【45228】Re:2つのファイルを1つに合体したい Kein 06/12/15(金) 19:43 回答[未読]
【45231】Re:2つのファイルを1つに合体したい カド 06/12/15(金) 20:35 発言[未読]

【45211】2つのファイルを1つに合体したい
質問  カド  - 06/12/15(金) 16:43 -

引用なし
パスワード
   以下のような家計簿のファイルがあります。

     A   B   C    D   E    F  G
1   1月  電気 ガス  水道  電話  ・・・・・・
2   2月  12   3   2    3   
3   3月   3   6  10    5
4   4月   4   5   1    3
5   5月   


今月は5月のデータを入力するのですが、同じファイルが
自宅と自宅外にあり、都合の良い時に入力しています。

そうすると5月の電気代は自宅で入力し、ガス代は自宅外で
入力するといった感じで、ご想像のように、中身の異なるファイルが
2つ出来てしまいます。

マクロを使って、この2つのファイルの中身を合体して、
一つのファイルにしたいのです。

私が考えるには、2つのファイルのA1からE5までの各セルの値を
地道に一つずつ比較して、ファイル1のセルは空欄で、かつ、
ファイル2のセルに数字が有ったら、その数字をファイル1に
転記するといった方法しか思いつかないのですが、
なんかもっとすばらしい方法はないでしょうか?

イメージ的にはファイル1と2を写真に撮って、重ね合わせ、
ファイル2の文字を全てファイル1に転写するのですが、
空白セルだけは空白で上書きせずに、ファイル1の値を
そのまま残すといった感じです。

【45221】Re:2つのファイルを1つに合体したい
発言  飛ばない豚  - 06/12/15(金) 18:19 -

引用なし
パスワード
   ▼カド さん:
同じファイルということであれば、

一つのブックに入れてしまい、
Sheet_自宅
Sheet_自宅外
Sheet_合算
とし(名前は適宜変更)、

Sheet(合算)のB2に
=IF(Sheet_自宅外!B2="",IF(Sheet_自宅!B2="","",Sheet_自宅!B2),IF(Sheet_自宅!B2="",Sheet_自宅外!B2,Sheet_自宅外!B2+Sheet_自宅!B2))


あとは、フィルすれば合算できるかと思います。

最後に、合算の式を入れたセルの式をはずして、Sheet_自宅、Sheet_自宅外、
を削除すれば完成です。

一応、参考までに。(^・ω・^)

【45228】Re:2つのファイルを1つに合体したい
回答  Kein  - 06/12/15(金) 19:43 -

引用なし
パスワード
   ファイルの同期をとる。ということなら、更新日時の新しい方から古い方へコピー
するのが定石でしょう。例えばこのようなコードで出来ます。

Sub MyFile_Update()
  Dim MyF As String, MyF2 As String, Pmt As String
  Dim WshShell As Object, FSO As Object
  Dim Dt1 As Date, Dt2 As Date
  Dim Ans As Integer
  Const Fol As String = _
  "\\CP1\F\Documents and Settings\Administrator\My Documents\Exl_Files"
  'ネットワーク上の保存先フォルダーのパス
 
  Set WshShell = CreateObject("WScript.Shell")
  On Error Resume Next
  WshShell.CurrentDirectory = Fol
  If Err.Number <> 0 Then
   MsgBox "ネットワークに繋がっていません", 48
   Set WshShell = Nothing: Exit Sub
  End If
  On Error GoTo 0
  With Application
   MyF = .GetOpenFilename
   If MyF = "False" Then GoTo ELine
   MyF2 = .DefaultFilePath & "\" & Dir(MyF)
  End With
  Set FSO = CreateObject("Scripting.FileSystemObject")
  If FSO.FileExists(MyF2) = False Then
   MsgBox "その名前のファイルはこのマシンに存在しません", 48
   GoTo ELine
  End If
  Dt1 = FSO.GetFile(MyF).DateLastModified
  Dt2 = FSO.GetFile(MyF2).DateLastModified
  Pmt = "選択したファイルの更新日時" & vbLf & Dt1 & vbLf & _
  "こちらのマシンにあるファイルの更新日時" & vbLf & Dt2 & vbLf & vbLf
  If Dt1 > Dt2 Then
   Ans = MsgBox(Pmt & "ネットワーク上のファイルをこちらのファイル" _
   & vbLf & "にコピーしますか", 36)
   If Ans = 6 Then FSO.CopyFile MyF, MyF2, True
  ElseIf Dt1 < Dt2 Then
   Ans = MsgBox(Pmt & "こちらのファイルをネットワーク上のファイル" _
   & vbLf & "にコピーしますか", 36)
   If Ans = 6 Then FSO.CopyFile MyF2, MyF, True
  Else
   MsgBox "更新済みです", 64
  End If
ELine:
  Set WshShell = Nothing: Set FSO = Nothing
End Sub

ダイアログで選択したファイルと同じ名前のファイルが、こちらのマシンの
"通常エクセルファイルを開く"フォルダーに存在しているか、チェックしています。
なお「データを比較して」ということなら、双方のファイルに作業シートを挿入
しておき、A1:E12 の範囲にリンク式を埋めて値を引っ張り、COUNTA関数で入力数
を比べる、などが考えられます。

【45230】Re:2つのファイルを1つに合体したい
お礼  カド E-MAIL  - 06/12/15(金) 20:30 -

引用なし
パスワード
   ▼飛ばない豚 さん 回答ありがとうございます。
かなりいい線いってます。
ひとつのブック内に自宅と自宅外というシートを準備することは
気づきませんでした。
後は数式をマクロで書き込むなどして使い勝手を良くすれば
実用性が高まると思われます。

【45231】Re:2つのファイルを1つに合体したい
発言  カド E-MAIL  - 06/12/15(金) 20:35 -

引用なし
パスワード
   ▼Kein さん 回答ありがとうございます。

>ファイルの同期をとる。ということなら、更新日時の新しい方から古い方へコピー
>するのが定石でしょう。

今回の質問は、新しいファイル/古いファイルと言った概念はありません。
あくまでも同じフォーマットのファイルが2つあり、一部内容が異なると
いうことです。
そして、その異なる内容を合体してひとつにまとめたいのです。

ファイル1    ファイル2     合体
1  2  +  1  2   ⇒  1  2 
3           5      3  5

6441 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free