はじめての親子ハイキングに挑戦!! >>

現在、Excel(インターフェース用)⇔(社内LAN経由)⇔Excel(マスターファイル×4)間で
ADOを使用して、データ処理を行おうとしております。
(なお、今までは、画面更新OFFにしてファイルを素直にOPENして
各ファイルデータを格納して処理を行っていたのですが、
業務人員&量の拡大に伴い、Excelの競合が激しくなり、ADOによる処理へと
対応変更を考えております)

マスターファイル×4はAccessのように、主キーが振ってあり、連結しております。
インターフェース用のExcelから各マスターファイルをADOで読み込み、
インターフェース用のExcelへとデータを転記する処理を作成中ですが、
なぜか、マスターファイル(A・B・C・D)のうち、Cのファイルのみ、データを10件ほど認識しておらず、
A=B=D≠Cとなってしまいます。

マスターファイルを直接開いて確認しますが、データ数は間違いなく一致しておりますが、
VBA上では認識しておりません。

自分なりに解析したところ、Cのファイルだけ、
"RS.MoveNext"の部分でデータが10件ほど飛んでいると思っております。

以下がそのソースですが、
どこが問題なのか?または、考えうる原因が他にあれば、ご教授いただきたいです。
本当に困っています。宜しくお願い致します。

---------------------------------------------------------------------
Sub StorageData()
'Frag初期値
SW_OK = True
On Error GoTo ErrADO
'取引先詳細
'ADO定型分
Set CN = New ADODB.Connection
CN.Provider = "Microsoft.Jet.OLEDB.4.0"
CN.Properties("Extended Properties") = "Excel 8.0"
CN.Open Path00 & "反響データ\" & FileName01
Set RS = New ADODB.Recordset
RS.Open SQL, CN, adOpenStatic, adLockReadOnly
ReDim Data00(RS.RecordCount, 20)
Ctr = 1
Do
For i = 0 To 20
If Not RS.BOF Then
Data00(Ctr, i) = RS.Fields(i)
End If
Next i
i = 0
RS.MoveNext
Ctr = Ctr + 1
Loop Until RS.EOF
Ctr = Ctr - 1
' ReDim Preserve Data00(Ctr, 20)
Ctr = 0
Set RS = Nothing
CN.Close
'お客さま詳細
'ADO定型分
Set CN = New ADODB.Connection
CN.Provider = "Microsoft.Jet.OLEDB.4.0"
CN.Properties("Extended Properties") = "Excel 8.0"
CN.Open Path00 & "反響データ\" & FileNam

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

A 回答 (2件)

みたところ問題は無さそうな気がしますけどね。


エラールーチンがどうなっているか少し気になります。
素直に考えれば認識できないレコードセットがある。。
のではないでしょうか?
『主キー』が振ってあるとのことなので
欠落したレコードの特定は出来ますよね。
まずは、調べられては?

※ADOで接続した場合に競合やファイルの破損が避けられるかどうかは
未経験なのでなんともいえませんが、
私なら、SQL Server Express Edition で・・・と考えます。
無償版SQL Serverの制限と限界を知る
http://www.atmarkit.co.jp/fwin2k/tutor/sqlexplmt …

SQL Server 2008 R2 Express Edition のインストール
http://awoni.net/fc/sql-server-2008-express
    • good
    • 0
この回答へのお礼

>『主キー』が振ってあるとのことなので
> 欠落したレコードの特定は出来ますよね。
> まずは、調べられては?
→ご回答ありがとうございました。
 確かにその通りでございました。

Cのファイルには、顧客対応履歴のフィールドがあるのですが、
1つのセルにテキストデータが膨大な長文データが入っているセルが10件ほどあり、
その該当レコード部分がエラーを起こしていることが分かりました。

まずは、大元データをどうにかして対応することに致しました。
ありがとうございます。

あと、SQLサーバーについても検討したいと思います。
ありがとうございました。

お礼日時:2011/03/23 22:38

読者には社内事情はわからないのに、質問が難しい書き方になっていて、言いたいことが判りにくいと思うが、問題にしているのは


(1)エクセルの在るブック(Cといっているもの)
(2)その中のある1つのシートで
(3)ADOで扱う(読む)と、エクセルで読んで画面に現れる、エクセルでいう行数が違うということかな
普通にはありえないことだが、無駄だとは思うが、念のため
原因までは良くわからないが、質問に書いてあるコードと変わらんが、下記でやってみて、エクセルで開いてシートで見える
データ行数と比べて違いの特徴を把握するようにしては。
Microsoft ActiveX Data Objects X Library を参照設定して
Sub test01()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=C:\Documents and Settings\XXXX\My Documents\YYYY.xls;" & _
"Extended Properties=Excel 8.0;"
.Open
End With
Dim rs As New ADODB.Recordset
ShtName = "Sheet1"
ssql = "SELECT * FROM [" & ShtName & "$]"
rs.Open ssql, cn, adOpenStatic, adLockReadOnly
i = 1
Do Until rs.EOF
For j = 1 To rs.Fields.Count
ActiveSheet.Cells(i, j) = rs(j - 1)
Next j
i = i + 1
rs.MoveNext
Loop
End Sub
ーー
ファイルのパス
ファイル名
シート名ShtName
の部分は実情に変えてください。
    • good
    • 0
この回答へのお礼

申しわけございません。確かに、関係者以外に分かりづらい表現となっておりました。
上記のソースを流用し、データ検証してみたところ、原因が分かりました。

Cのファイルには、顧客対応履歴のフィールドがあるのですが、
1つのセルにテキストデータが膨大な長文データが入っているセルが10件ほどあり、
その該当レコード部分がエラーを起こしていることが分かりました。

まずは、大元データをどうにかして対応することに致しました。
ありがとうございます。

お礼日時:2011/03/23 22:35

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

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


人気Q&Aランキング