アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問です。
ADOでExcel内を検索するコードを書いています。
開発環境:Win XP,Excel2003,VB6.0(SP5)
A列が検索列で,検索でヒットした行を抽出します。
Filterプロパティを使って検索していますが、数値を入れるとOKなのに文字列を入れると"種類が一致しません"というエラーが発生してしまいます。
どんな些細な点でもよろしいのでご教授、ご指摘を宜しくお願い申し上げます。

A 回答 (3件)

検索対象のセルの形式が数値なのでしょう。


対象セルの書式が数値のものになっているか、
標準になっていて値が数値と取れるものではないですか?
書式を文字列にすれば間違いないと思います。

この回答への補足

早速の回答に感謝します。
文字列にしてみましたが
一応コードもご覧ください。
Private Function ExcelSearch(Searchkey as String) as Boolean

Dim Cn As ADODB.Connection
Dim Rst as ADODB.Recordset
Dim HitBookMark() as Variant


On Error Resume Next
'Excelへの接続
Set Cn= New ADODB.Connection
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties") = "Excel 8.0;IMEX=1"
'ブック名
.Properties("Data Source") = "ここにExcelファイル名"
'ブックオープン
.Open
End With

'レコードセットの定義
Set Rst = New ADODB.Recordset
With Rst
'シート名
.Source = "Sheet1" & "$"
'静的カーソルを設定
.CursorType = adOpenStatic
'レコードセットオープン(Read Only)
.Open , ExcelInfo.xlApp, , adLockReadOnly, adCmdTableDirect
End With

If Err <> 0 Then
'オープン失敗
MsgBox "Excelオープン失敗"
Err.Clear
Set Rst = Nothing
Set Cn = Nothing
ExcelSearch = False
Exit Function
End If


Redim HitBookMark(1)
With Rst
'検索
.Filter = Rst(0).Name & "=" & "'" & Number & "'"

Do While Not .EOF
k = k + 1
Redim Preserve HitBookMark(k)
HitBookMark(k - 1) = .BookMark
'次の検索
.MoveNext
Loop
End With
If HitBookMark(0) = "" Then
'検索キーなし
ExcelSearch = False
Else
'検索キーあり
ExcelSearch = True
End If

Set Rst = Nothing
Set Cn = Nothing

End Function

補足日時:2005/02/21 18:40
    • good
    • 0

意見が無いよりマシくらいに聞いていただければ・・。



私はDAOでEXCELを読み込む事をよくやるんですが、型が一致しないエラーが出るのはその列に数値と文字列が混在している場合に出ます。
MicrosoftのHPによれば、上から(?)8個のデータを見てデータ型を数値なのか、文字列なのか、または他の何かなのかを判断するとか。
EXCELの書式設定には依存しないというような事は明記されてたような・・されてないような・・。
調べて解答すればいいんですけどね。すみません不確かな回答で。

私は仕方がないので、数値の行の先頭に「'」を付けて無理矢理全て文字列にしました。
質問者さんの場合は全部明らかに文字列なのでしょうか?
「Number」という変数を使っているところを見ると数値っぽい値なのかな?と思うのですが。

この回答への補足

回答に感謝します。
検索キーはバーコードの数値です。
Numberという変数にしていたのは数字のJANコードのみを検索していた頃の名残です。修正していないのが心苦しいです。
検索対象列はすべて文字列として入力していますし、「'」で囲めば文字列も扱えると思っていたので質問してみました。
でもExcelの書式設定には依存しないんですね。勉強になりました。
極力検索対象列のセルにバーコード以外のデータはいれたくないのです。なんとかできないものでしょうか?

補足日時:2005/02/22 21:20
    • good
    • 0

あれこれ実験していたら不可解な事が起きました。


一応報告しますね。

EXCEL Sheet1のA1の列に、
FLD1
----
1
2
3
と入力します。
普通にやると、1,2,3は右揃えに表示されますよね。
この状態でRS.Filter="FLD1='2'"とすると問題のエラーが起きます。
書式設定を文字列に変えても。

そうではなくて、
先にA1列の書式設定を文字列に変更。
上の通り入力。
(こうすると左揃えになります。)
そして、その後書式を標準に戻します。
するとなぜか左揃えのままになります。

という状態でRS.Filter="FLD1='2'"をしても問題のエラーは起きません。
一体何がなんだか??
データを書く前に書式を文字列にしておく必要がある・・??という事なんですかね。

あと、参考URLのページにあるデータ型というところにEXCELの場合のデータ型の扱いがかかれてます。
書式設定がどうって事は書いてなかったですが、データ型を指定する方法は無いって書いてあります。

参考URL:http://support.microsoft.com/default.aspx?scid=k …

この回答への補足

少し探しておりましたら、以下のようなサイトが見つかりました。ご参考にしてください。
この度は本当にありがとうございました。
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …

補足日時:2005/02/24 09:50
    • good
    • 0
この回答へのお礼

付き合ってくださり感謝します。
その通りでしたね。
また、参考URL先のサンプルのExcelADO.exe内のExcelもそうなっていました。
データ型を指定する方法は無く、最初の何行かでフィールドのデータ型が推測されると書いてありました。
よくわかりました。ありがとうございました。バーコードデータの入力(Excelデータベースの更新)はパソコンのパの字もしらないようなユーザーが対象になっており、なるべくスマート(?)に更新させたかったのですが、このような仕様でしたら、仕方ないでしょうね。

お礼日時:2005/02/23 14:42

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

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