「夫を成功」へ導く妻の秘訣 座談会

CSVファイルが2つあります。
この内容が同じかどうかをチェックしたいんです。

しかしエクセルで開くとデータが256を超えているため、途中でちょん切れちゃって比較できません。

メモ帳で開けばちょん切れませんが、比較する方法が思い当たりません。

どうすればよいでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (11件中1~10件)

#10


改行も1文字として数えるので、ファイルの最後は改行せずに試してみてください^-^

If EOF(1) And EOF(2) Then
このIf文は、
ファイル1及びファイル2から読み込む文字がなくなったときに真になるけれど、最後の文字の一致/不一致まで言及していないのです。^-^;


If EOF(1) And EOF(2) And MyChar1 = MyChar2 Then
これだと、
ファイル1及びファイル2から読み込む文字がなくなり、かつ、最後の文字も一致しているときに真になります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/11/24 17:48

#8


最後の1文字が違うとき、同じと判定されていました^-^;

訂正です。
If EOF(1) And EOF(2) Then

If EOF(1) And EOF(2) And MyChar1 = MyChar2 Then

この回答への補足

何度もありがとうございます。
少数のデータで試しましたが、以下のコードで最後の1文字違いも判別するようですが、If EOF(1) And EOF(2) ThenでなくIf EOF(1) And EOF(2) And MyChar1 = MyChar2 Thenの意味はなんでしょう?

Sub CSVデータ比較()
Dim MyChar1 As String
Dim MyChar2 As String
Dim FName1 As Variant
Dim FName2 As Variant

Res = MsgBox("データを比較する2つのCSVファイルを選びます。 " & vbCr & _
"" & vbCr & _
"続行しますか?", vbYesNo + vbQuestion, "確認")

If Res = vbNo Then
MsgBox "中止します。 ", , "中止"
Exit Sub
End If

FName1 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName1 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else
End If

MsgBox FName1 & "を選択しました。 " & vbCr & _
"比較対象するファイルを選択してください。 ", , "対象選択"

FName2 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName2 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else

MsgBox FName1 & "と " & vbCr & _
FName2 & "の" & vbCr & _
"データを比較します。", vbInformation, "比較開始"

Open FName1 For Input As #1
Open FName2 For Input As #2

Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

If MyChar1 <> MyChar2 Then Exit Do
n = n + 1
Loop

If EOF(1) And EOF(2) Then
MsgBox "データ" & n & "個(カンマを含む)は完全一致です。", , "終了"
Else
MsgBox "データが異なりました。 " & vbCr & _
"カンマを含み、" & n & "個目で最初の不一致を確認しました。 ", , "終了"
End If

Close #1
Close #2

End If
End Sub

補足日時:2004/11/21 21:00
    • good
    • 0

> とりあえずは同じかどうかだけでいいのです。


> FilsSystemObject の ReadAll メソッドというものを存じませんので・・・。

ReadAll メソッド
http://www.microsoft.com/japan/msdn/library/ja/s …

こちらが参考になると思います。
ただ、↑にも書いてありますが、csvファイルのサイズが大きければ、使えませんが (^^ゞ
    • good
    • 0

vbaで


txtデータが同じかどうか調べたいということならば、こんな感じになります^-^?

Option Explicit

Public Sub Aaa()

Dim MyChar1 As String
Dim MyChar2 As String

Open "c:\temp\1.csv" For Input As #1
Open "c:\temp\2.csv" For Input As #2

Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

If MyChar1 <> MyChar2 Then Exit Do
Loop

If EOF(1) And EOF(2) Then
Debug.Print "OK"
Else
Debug.Print "違うよ^-^"
End If

Close #1
Close #2

End Sub
    • good
    • 0
この回答へのお礼

ご教示をもとに下記のように作りました。
ちゃんと作動するようですが、穴がないか、またはアドバイスがありましたら教えていただけたら幸いです。

Sub CSVデータ比較()
Dim MyChar1 As String
Dim MyChar2 As String
Dim FName1 As Variant
Dim FName2 As Variant

Res = MsgBox("比較用する2つのファイルを選びます。 " & vbCr & _
"続行しますか?", vbYesNo + vbQuestion, "確認")

If Res = vbNo Then
MsgBox "中止します。 ", , "中止"
Exit Sub
End If

Dim FName1 As Variant
FName1 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName1 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else
End If

MsgBox FName1 & "を選択しました。 " & vbCr & _
"比較対象するファイルを選択してください。 ", , "対象選択"

Dim FName2 As Variant
FName2 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName2 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else

MsgBox FName1 & "と " & vbCr & _
FName2 & "の" & vbCr & _
"データを比較します。", vbInformation, "比較開始"

Open FName1 For Input As #1
Open FName2 For Input As #2


Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

n = n + 1

If MyChar1 <> MyChar2 Then Exit Do
Loop

If EOF(1) And EOF(2) Then
MsgBox "データ" & n & "個(カンマを含む)は同一でした。", , "終了"
Else
MsgBox "データ異なりました。", , "終了"
End If

Close #1
Close #2

End If
End Sub

お礼日時:2004/11/21 17:55

(1)普通ビジネスでファイルが同じかどうか問題にするのはキー(例えば社員コードのようなもの)で、AとBファイルの同一の2レコードについてキー以外の項目を比較します。


このキーに当たるものがAとBファイルにありますか。
(2)無ければ、Aファイルの1番目のレコードとBファイルの1番目のレコード(以下2番と2番、以下繰り返し)で比較せねばなりませんが、それで意味がありますか。Bファイルに1レコード挿入されただけでも他のレコードが全く同じでも挿入レコード以後はすべて不一致になります。そう言う事態は考えられないのでしょうか。
(1)については、A,Bファイルをキー順にソートして
マッチングのアルゴリズムで処理するのが易しく、処理時間が早いと思います。オフラインバッチ処理の定番です。
普通は(2)は既製ソフト(ファイルコンペア)を見つけるのが良いのではないでしょうか。
>、いずれはVBAで処理しようと
プログラムはマッチングのアルゴリズムなら比較的簡単ですが、他の方法では、人によってはそこまで速く達するが、近くにアドバイザなどいないと、一般には難しいものですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

> Bファイルに1レコード挿入されただけでも他のレコードが全く同じでも挿入レコード以後はすべて不一致になります。そう言う事態は考えられないのでしょうか。

今回はこれは想定外でしたが、今後はそういうこともありますね。そのときのために既成ソフトがあるということですね。勉強になりました。

お礼日時:2004/11/21 21:40

> この内容が同じかどうかをチェックしたいんです。



どのレベルで比較するのでしょうか?

同じかどうかだけでいいのなら、FilsSystemObject の ReadAll メソッドで双方を読み込み、単純に
比較するとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえずは同じかどうかだけでいいのです。
FilsSystemObject の ReadAll メソッドというものを存じませんので・・・。

お礼日時:2004/11/21 17:59

すいません、読んだらそのとおりでした



FCは内容です
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

FCは内容?やっぱりわかりません。
わたし、そもそも「バッチ」がどういうものかも知らないので、今回はVBAでやってみました。
ごめんなさい。

お礼日時:2004/11/21 17:58

1.txtはたとえばです。

拡張子に注意してください

「1.txtを1.bat」とは名前を変えればいいです。

1はご自由に~
    • good
    • 0

テキストで


「FC ファイル名.csv ファイル名2.csv > kekka.txt」
で保存。(1.txtとする)

1.txtを1.batに変更。
3ファイルを同じ場所においてbatをダブルクリック。

kekka.txtに違う場所が表示されます。
あとこれは 完全一致でないと使えません(・・;)

この回答への補足

ありがとうございます。

>「FC ファイル名.csv ファイル名2.csv > kekka.txt」
で保存。(1.txtとする)

意味がよくわからないのですが、「」内が拡張子を含んだファイル名ですか?(1.txtとする)ってどういう意味でしょうか?

> 1.txtを1.batに変更。

拡張子を変えるということですか?

補足日時:2004/11/20 15:54
    • good
    • 0

ファイルを比較するための下記のようなソフトが有ります。



CSVなら、拡張子をTXTに変更すれば問題なく動作するはずです。

参考URL:http://www.vector.co.jp/soft/win95/util/se110502 …

この回答への補足

ありがとうございます。
たた、いずれはVBAで処理しようと思っていますので、できれば比較ソフト以外でやりたいのです。

補足日時:2004/11/20 15:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelで複数のCSVファイルを、セル・行を問わずに比較する方法を教えてください

Excelで、複数のファイルを比較し、差異を調べる方法を探しています。
使用しているExcelは2000です。

・最新データファイル.csv
・旧データファイル.csv
・リスト1.csv
・リスト2.csv
・リスト3.csv 
(……リストファイルは複数存在。今後も増える予定)

リストファイルをひとつにまとめたものが、旧データファイルです。
それをシステムに登録し、自動的に追加削除が加わり、必要な時にダウンロードしたものが最新データファイルとなります。

データファイルは一括されてしまいますので、新しく追加されたものだけ、削除されたリストだけという、データを指定してダウンロードすることはできません。

各ファイルの列はほぼ同じデータが並びますが、行に関しては、削除された場合自動的につまるため、シートとシートを行で比較して差異を調べるという方法では対応できませんでした。

追加・削除されたものを把握し、それがどのリストファイルに含まれていたかをできるだけ簡単に知る方法をご存知の方がいたら、教えてください。

また、これでは何をしたいのかわからないという場合は、必要な項目を教えてください。追記したいと思います。
よろしくお願いいたします。

Excelで、複数のファイルを比較し、差異を調べる方法を探しています。
使用しているExcelは2000です。

・最新データファイル.csv
・旧データファイル.csv
・リスト1.csv
・リスト2.csv
・リスト3.csv 
(……リストファイルは複数存在。今後も増える予定)

リストファイルをひとつにまとめたものが、旧データファイルです。
それをシステムに登録し、自動的に追加削除が加わり、必要な時にダウンロードしたものが最新データファイルとなります。

データファイルは一括されてしまいますので、新しく...続きを読む

Aベストアンサー

(#2コメントへのレスです)
>> A列の情報が追加・削除されたことを確認できれば、あとの列は
>  特に比較しなくても問題ないと考えています。
なので、比較的簡単そうです。(データ総量を考えなければ)

>『ファイル名付の1つのcsvファイル』とは、具体的にどういうものですか?
についてはQNo.3168255のANo.1を実際に試してみられたら良かったのですが、
ついでの修正版を書いておきます。

1)まず、各csvファイルを1つのフォルダにコピーしておいてください。
2)新規Bookに、『最新データファイル.csv』の『A列のみ』をコピーしてください。

(2)の新規Bookのコピー後シートをActiveにして(選択して)、
 以下のコードを実行してみてください。
 フォルダ選択画面では、(1)のフォルダを選択してください。

Sub CSVまとめsample()
  Dim obj As Object
  Dim fd As String
  Dim fn As String
  Dim msg As String
  Dim i  As Long
  Dim n  As Long
  Dim x  As Long
  Dim y  As Long
  Dim z  As Long
  Dim arg(1 To 256) As Long
 
  'フォルダを選択する
  Set obj = CreateObject("Shell.Application") _
    .BrowseForFolder(0, "SelectFolder", 0)
  '選択なければ処理を抜ける
  If obj Is Nothing Then Exit Sub
  On Error Resume Next
  fd = obj.self.Path & "\"
  If Err.Number <> 0 Then
    fd = obj.Items.Item.Path
    Err.Clear
  End If
  On Error GoTo errHndr
  Set obj = Nothing
  If Len(fd) = 0& Then MsgBox "failure": Exit Sub
  Application.ScreenUpdating = False
  arg(1) = 2
  x = 1
  '■ActiveSheetのD:E列を使用します。
  With ActiveSheet
    'Dirを使って指定フォルダ内csvファイルを順次処理
    fn = Dir(fd & "*.csv")
    
    Do Until Len(fn) = 0&
      i = i + 1
      'データ数によってセット先を変更
      n = n + x
      '外部データ取り込みを利用
      With .QueryTables.Add(Connection:="TEXT;" & fd & fn, _
                 Destination:=.Range("D" & n))
        .AdjustColumnWidth = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileCommaDelimiter = True
        .TextFileColumnDataTypes = arg
        .Refresh BackgroundQuery:=False
        x = .ResultRange.Rows.Count
        .Parent.Names(.Name).Delete
        .Delete
      End With
      'ファイル名をF列にセット
      .Range("E" & n).Resize(x).Value = fn
      '次のファイルへ
      fn = Dir()
    Loop
    
    If i = 0 Then
      msg = "no file"
    Else
      msg = i & " files.done"
      y = .Range("A65536").End(xlUp).Row
      z = n + x - 1
      'ここから---
      With .Range("B1:B" & y)
        .Formula = "=vlookup(A1,$D$1:$E$" & z & ",2,0)"
        '.Value = .Value '数式を値に変えるには行頭の『'』を削除
      End With
      With .Range("F1:F" & z)
        .Formula = "=match(D1,$A$1:$A$" & y & ",0)"
        '.Value = .Value
      End With
      '---ここは関数埋め込みなので、手作業でも可。
    End If
  End With
  Application.ScreenUpdating = True
  MsgBox msg
  Exit Sub
errHndr:
  Debug.Print Err.Number, Err.Description
  MsgBox Err.Number & vbTab & Err.Description
End Sub

データ総量を考えた場合、Excelでは厳しいかもしれません。
ただ、xl2007(1,048,576 行×16,384 列に拡張)への移行という手もあるかもしれませんし、
SQLを使った不一致抽出クエリをVBAから実行する手もあるかもしれません。

#でも業務に使う事と、今後のカスタマイズの事を考えればAccessなどの利用が現実的なのかなぁ。

(#2コメントへのレスです)
>> A列の情報が追加・削除されたことを確認できれば、あとの列は
>  特に比較しなくても問題ないと考えています。
なので、比較的簡単そうです。(データ総量を考えなければ)

>『ファイル名付の1つのcsvファイル』とは、具体的にどういうものですか?
についてはQNo.3168255のANo.1を実際に試してみられたら良かったのですが、
ついでの修正版を書いておきます。

1)まず、各csvファイルを1つのフォルダにコピーしておいてください。
2)新規Bookに、『最新データファイ...続きを読む

QExcelで2つのファイルの違い(Diff)をとりたい

Excelでファイル名が同じで更新日付の異なる2つのファイルがあります。
この2つのファイルで内容が変わっている部分を知りたいのですが、良い方法はあるでしょうか?
(もしくは内容が変わっているかどうかだけでも知りたい)

比較が必要なファイルが大量にあるため、一つずつ見比べる時間が無く、困っています。

Aベストアンサー

使ってないのでお勧めはわかりませんが、こちらのフリーソフトを試してみては?
http://search.vector.co.jp/search?query=excel+%94%E4%8Ar

QCSVファイル同士の比較

お世話になります。
どなたか教えてください。

2つのCSVファイルを比較して、違う場所を探したい
のですが、どのようにすれば簡単にできるでしょうか?

Aベストアンサー

CSVファイルは結局テキストファイルですから,テキストを比較するソフトなどを利用してはいかがでしょうか。以下のURL(ベクター)などにたくさんありますよ。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/text/diff/index.html

QExcelファイルを比較し、差分箇所に色をつけるには?

VBA初心者です。
突如作成を依頼されてしまいました。
どなたかお手すきでしたら、よろしくお願いします。


まず2つのフォルダA(新しいデータのExcelファイル)、
フォルダB(古いデータのExcelファイル)があります。

それぞれには同じ名前のExcelファイルが200個近く入っているのですが、
新旧同じ名前同士のファイルを比較し、差分箇所に色をつけるという
作業をしたいのです。(新旧のファイルどちらにも色を付ける)

できればフォルダAとフォルダBを選択したら勝手に処理してくれるという
プログラムにしたいのですが、どのようにしたらよろしいでしょうか。

数値の比較ですが、範囲を指定してマッチしてなければ色付け、という
処理でもいいかな・・と思っております。

どうかよろしくお願いします。

Aベストアンサー

こんなのではどうでしょうか?

両フォルダには同じ名前の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

こんなのではどうでしょうか?

両フォルダには同じ名前のExcelファイル(各シート数も同じ)があるとして、片方からだけ見てます。
同名のブックを開けないので作業フォルダに別名でコピーして作業をして戻してます。(これが結構長くしてる)
Const workFolder ="???"を適当に設定してください。
シートのチェックはUsedRange内のチェックをしてます。
さすがにこれは片方からだけとはいかないので両方からチェックしてます。
当然ダブってチェックする部分がほとんどですが・・・処理が長くなりそうなの...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QSQLで違うテーブルの値を比較して値に差があるレコードを抽出したいので

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu2002/07/05
XXXXXXX XX1takeshiokada2005/07/15
XXXXXXX XX1kamoshu1857/09/25
WWCWWCW WW2waowao2008/10/22
DDDDDDD DD1uihhh2006/06/30
DDDDDDD DD1jojoj x5xx1999/09/09
DDDDDDD DD1momohara2005/03/07
DDDDDDD DD1itaiu-2003/12/22
DDDDDDD DD1komanogoal2007/04/26
GGGGGGG GX9 damerecord2009/11/14
FFFFFFF USJ ikitai1995/08/15
FFFFFFF USJ sstebuspi2004/01/05
FFFFFFF USJ bbpp2009/08/23

A1とB1は主キー、A2とB2は副キーです。
Aテーブルの「A4」カラムにはBテーブルのレコード数を持っています。(主キー、副キーが同じものの)
しかし、よくよく見るとAテーブルの「GGGGGGG」のA4には「2」のはずなのにBテーブルには実際にレコードは1つしかありません。
こういう状態になってしまっているのを割り出したいのですがどのようにA4とBテーブルで数があってないものを抽出できるでしょうか。
よろしくお願いいたします。

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu200...続きを読む

Aベストアンサー

SELECT A.* FROM Aテーブル A
INNER JOIN
TABLE(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2) B
ON A.A1=B.B1 AND A.A2=B.B2
AND A.A4<>B.SU

または

WITH B(B1,B2,SU) AS
(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2)
SELECT A.* FROM Aテーブル A
INNER JOIN B ON A.A1=B.B1
AND A.A2=B.B2 AND A.A4<>B.SU

こんなのでどうでしょうか?
後者の方が標準的(他のDBシステムでも
使える可能性が高い)かと思います。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

QACCESSで2つのテーブル比較で一致データのみ抽出したい

ACCESS初心者です。
2つのテーブルのあるフィールドを比較して、
両方のフィールドに存在するデータであれば、それを抽出する
といったことをしたいのですが、どなたか手法を教えて下さい。
よろしくお願いします。

Aベストアンサー

No.2・No.4です。

> 少し勉強のお付き合いをしていただいて良いでしょうか?

はい。
ではまず、前回作成して戴いたクエリを、それぞれ以下のように変更して下さい。
(SQL文はそれぞれ全文のコピー&ペースト(上書き)でOKです);

※「テーブル1→テーブル2」型 ; クエリ名=クエリA
SELECT DISTINCT テーブル1.データ1, "テーブル1" AS 由来
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1;

※「テーブル1←テーブル2」型 ; クエリ名=クエリB
SELECT DISTINCT テーブル2.データ2, "テーブル2" AS 由来
FROM テーブル1 RIGHT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル1.データ1) Is Null))
ORDER BY テーブル2.データ2;

<変更の概略と理由の説明>
・(1行目) Distinct
 →重複分を非表示(なくても可)
・(1行目) "テーブル○" As 由来
 →各データがどのテーブルにあったかがわかるようにするために追加
  (不要なら『SELECT DISTINCT テーブル○.データ○』に変更して下さい)
・(4行目) 非表示列での並べ替え指定を解除
 →「表示」のチェックと同様、全て「Null」なので不要
  (重複分を非表示にしようとした場合には、エラーの原因にもなります)


・・・以上で準備は終わりです。
「AとBどちらかだけ」のデータを1つにまとめて表示するためのSQL文は、以下のように
なります;
Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;

 *このタイプのクエリ(ユニオンクエリといいます)は、デザインビューへの切替はできません。


「As 表示列」というのは、データ1・データ2を同一列として表示する際の名前の指定
です(指定しなくても同一列に扱われる場合もありますが、フィールド名が異なる場合は
こうして宣言してやった方が無難)。
 *クエリA・Bで「由来」を削除した場合、こちらの「,クエリ○.由来」も削除して下さい。


ちなみに上の文だと、元のテーブルやクエリの重複データは非表示(=1データに集約)です。
もし、重複分をそのまま表示したい場合は、元のクエリ(今回の例ではクエリA・クエリB)
の「DISTINCT(固有の値=はい)」の指定を解除した上で、

Select クエリA.データ1 As 表示列,クエリA.由来 From クエリA
UNION All
Select クエリB.データ2 As 表示列,クエリB.由来 From クエリB;

と、「Union」の後に「All」を追加すればOKです。
(どんなときに必要になるのかは私もわかっていないんですが・・・一応、参考までに)

No.2・No.4です。

> 少し勉強のお付き合いをしていただいて良いでしょうか?

はい。
ではまず、前回作成して戴いたクエリを、それぞれ以下のように変更して下さい。
(SQL文はそれぞれ全文のコピー&ペースト(上書き)でOKです);

※「テーブル1→テーブル2」型 ; クエリ名=クエリA
SELECT DISTINCT テーブル1.データ1, "テーブル1" AS 由来
FROM テーブル1 LEFT JOIN テーブル2 ON テーブル1.データ1 = テーブル2.データ2
WHERE (((テーブル2.データ2) Is Null))
ORDER BY テーブル1.データ1;

...続きを読む

Qエクセル 異なるブックのデータ比較

教えてください。
エクセルのファイルA1.xls(原本)とA2.xlsがあるとします。
どちらも行ごと(レコード)にデータを入力したデータベースのファイルです。

A1は原本データで、A2がデータ(レコード)を追加した編集後のファイルです。

この時、A1とA2の列(レコード)を比較し、A2にあってA1に無いものを抽出するフリーソフトなどはご存知ではないでしょうか。

あくまで、A1とA2の差分の抽出ではなく(A1にあってA2にないものはは除く)、A2にあってA1にないものだけを抽出したいのです。

Aベストアンサー

フリーソフトではありませんが
>A1とA2の列(レコード)を比較し、A2にあってA1に無いものを抽出する
アクセスがインストールされているパソコンが会社にないでしょうか。
アクセスのクエリの機能に不一致クエリがあります。
ご質問にぴったりです。エクセルのシートをリンクして一発で抽出できます。
追加したレコードが抽出できた後にどうされますか?
原本データに追加しながらデータベースを管理するとかであれば
そのまま、アクセスの追加クエリの機能になります。
用件がこの様なことで、アクセスがありましたら、目的を質問にしてみてはいかがでしょうか。
データベースの使い方では良くある内容ですので、いくらでもアドバイスの回答が付いてくると思います。

Q2つのシート間での重複データのチェック

Excelについて教えてください。
以下の2つのシートがあります。

Sheet1
すずき 03-0000-0000
やまだ 03-1111-1111
たなか 03-2222-2222

Sheet2
03-1111-1111
03-4444-4444
03-0000-0000
03-2222-2222

Sheet1には名称と電話番号、Sheet2には別所から抽出した電話番号のみのデータがあります。
Sheet1のデータの中からSheet2に電話番号があるものだけを知りたいのですが、たとえばSheet1の 各行のC列 に Sheet2に一致する番号があった場合は●等付けるにはどうすればよいでしょうか。

よろしくお願いします

Aベストアンサー

シート1のC列に式を入れます。
=IF(ISNA(VLOOKUP(B1,Sheet2!A:A,1,FALSE))=TRUE,"-","●")

【式の説明】
シート1のセルB1の値が、シート2のA列に、存在する場合は●を、存在しない場合は-をセット。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング