人に聞けない痔の悩み、これでスッキリ >>

EXCEL2000のマクロ(ADO)にてCSVデータ取得しようとしたら取得出来ないデータがあります。

前にも質問させていただいたのですが、

CSVデータを取得しようとした時に取得出来ないデータ(文字列)があります。

初めはADOのデータ取得部分のマクロが間違えていると思っていましたが、

特に間違えている事もありませんでした。

悩んでいる内に私の端末ではいつの間にか取得出来ていなかったデータが取得出来るように

なっていました。
(この間にマクロをいじったりはしていません。しかし何かしらの設定を触ってしまった
可能性はあります。)

おかしいと思い、他の端末で同じマクロとCSVデータにて検証を行ってみると、

やはりデータの取得は出来ていませんでした。

なぜ私の端末だけうまくいくようになったのかがまったく検討もつきません。

OFFICEの再インストールも行ってみましたが、やはり自分の端末ではうまくいって、

他の端末ではデータは取得出来ないようでした。

情報が少なすぎる&あいまいな表現になってしまいましたが、
この原因はどのようなことが考えられるか、どなたかご教授いただけないでしょうか?

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

A 回答 (5件)

>どうしてもADOで読み込む必要があるなら


>VBAコード内でCSVファイルにダミーデータを挿入した上で読み込み、
>読み込み後ダミーデータを削除するなどの対処になります。
...失礼orz
これだと面倒ですよね。

[test.csv]
ColNameHeader=false
Format=CSVDelimited
MaxScanRows=0
CharacterSet=OEM
Col1=F1 Memo
Col2=F2 Memo


こんな感じのschema.iniファイルを作成して対処したほうが良いかと思います。
256文字以上の文字列を含む列をMemo型で指定します。
    • good
    • 0

http://oshiete.goo.ne.jp/qa/5995389.html
重複投稿後の対処の仕方がまずいです。
情報が錯綜して回答・閲覧側が混乱します。
どちらかでまとめてください。



ついでに。
原因にはもうあたりがついてるので言及しませんでしたが
>最低限、実行コードとテストデータ、貴方の環境情報の提示が必要でしょう。
>#提示可能ならこちらでテストしてみても良いですが。
と書きましたけど、提示がなかったので、
後は質問者さんご自身で確認して解決されるのだろうなあと推測しています。
遠慮もあったのでしょうけど。

でもExcel系のQ&A掲示板では、実際の数式やVBAコード、
データサンプルの提示があるほうが早く解決に結びつきやすいです。
OSやExcelのバージョン情報などもあったほうが良いです。
次回からはそんな事も検討してみてください。



そして本要件の対策ですが、
>911文字のダミーデータを置いて読み込んでみてください。
これで他端末でも読み込めるなら文字列長の問題です。
どうしてもADOで読み込む必要があるなら
VBAコード内でCSVファイルにダミーデータを挿入した上で読み込み、
読み込み後ダミーデータを削除するなどの対処になります。

ただ、本番データも500件程度なら普通に開いてコピー処理しても
良いのではないかと思いますけども。
    • good
    • 0

#1です。



> ・出力されているExcelでのデータをみてみると、、
> そのセルをクリックするまでは"#########"で文字化け?している。
>  (正しく出力されているデータでも"########"で表示されているデータが存在する。)
セルをクリック「するまでは」ということは、クリック「することで」正しいデータが表示されるんですね?

それはEXCELの表示の問題ではありませんかね?
CSVファイル自体は正しいが、「EXCELで表示するとおかしい」ということ。
よくある「住所を日付と勘違いされてしまう」みたいな、ビュアーとして振舞うEXCELの「勘違い」のような気がする。

CSVファイルの「その症状がある」行・列にあたりを付けてテキストエディタで開いて見れば良いでしょう。


元データが アルファベット"E"と数字で構成されていて、「指数表現と解釈されて表示桁が足りない」に行き着くように思います。
(例:[11A0123]は正しく表示されるが、[04E0123]だと化ける、みたいな)
    • good
    • 0

情報がやや曖昧で見当がつきません・


> CSVデータを取得しようとした時に取得出来ないデータ(文字列)があります
☆ CSVファイルによって、データが取得できたりできなかったりする状況が違うのでしょうか。
  どのファイルでも同様に、データが取得できたりできなかったりする状況が違うのでしょうか。
  どのファイルのデータでも、一切データが取得できないのでしょうか。
  (特定ファイル)だけ、あるいは(特定ファイル中の、特定部分のデータ)だけが問題なのでしょうか。

もしも、(すべてのファイルがどれも、一切のデータを取得できない)&(前にダメだったのに自分のPCだけはいつでもできるようになった)&(今も他のPCでは絶対にできない)のであるならば、経験的には、次のようなことがありました。
1) ADOの参照設定をうっかり外した、ADOの参照設定をしないで実行している
2) マクロの読み込み先ファイルのpath指定と異なるディレクトリに、ファイルを移した

やはり、多少は問題が絞れるような情報を提供してくださった方が、回答も考えやすいと思います。
場合によっては、コードを示しても良いのではないでしょうか。

この回答への補足

回答ありがとうございます。

すみません。
完全に情報不足でした。

データが取得できない端末にてそのパターンを調べましたところ、
以下のような状態でした。

・データ約500件中、取得出来ていないデータは一つの列で、約30件ほどあった。

・本来その列に入るデータは文字列で、だいたいどれも800バイト前後。
 (正しく出力されているデータでもだいたい同じくらい)

・出力されているExcelでのデータをみてみると、、
そのセルをクリックするまでは"#########"で文字化け?している。
 (正しく出力されているデータでも"########"で表示されているデータが存在する。)

・その行のみの1行のCSVで取込むと取得される。

と規則性があまり見つからない状態でした。

ご回答にありましたように、ADOの参照設定も正常ですし、pathの指定も
問題ないように思います。

また、もともとデータが取得できていなかった端末で、

マクロを触ったりしていませんので、マクロの問題というより

その他の部分にあるように思えます。

せっかく回答していただいたのにあいまいで申し訳ありません。

補足日時:2010/06/26 22:42
    • good
    • 0

実際に起きた症状・メッセージくらいは書いてください。



> EXCEL2000のマクロ(ADO)にてCSVデータ取得
ODBCのTextドライバー設定を行ったうえでの取得ですか?

ODBC設定しているなら、UDL(ユニバーサルデータリンク)で接続試験しましたか?


うまく行くPCと行かないPCで、データ配置が異なるとか。
CSVデータをデスクトップ上におくと、Pathにユーザ名やスペースを挟むので、
ドライブ直下に配置するとか。

この回答への補足

ご回答ありがとうございます。

接続自体はうまくいっている模様です。

補足日時:2010/06/26 22:43
    • good
    • 0

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

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

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

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

QEXCEL VBAでのCSVファイル読み込み、出力で困っています。

EXCEL VBAでのCSVファイル読み込み、出力で困っています。


データ3件のファイルから3件抽出すると正常にイミディエイトウィンドウへ表示されるのですが
データ約38,000件のファイルから3件抽出すると文字化けする項目があるのです。
文字化けする項目の共通点は256文字以降が、どうやら化けているようです。(長文1、長文2の項目)
教えて!goo でいろいろ探してみましたが、これといった解決策が見つかりませんでした。

また、抽出データをCSVで出力しているのですが
始まりと終わりに " が出力されるので困っています。
" が出力されないようにできるのでしょうか?


当方、COBOLでのコーディング経験は実務で4年ほどありますが
VBAの知識は学校で少し学んだ程度の初心者です。

わかりやすく教えていただけないでしょうか?


sample1.csv データ3件
sample2.csv データ約38,000件(ここにsample1.csvと同じデータが含まれています)


Dim adoCON As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
Dim rec As String


'ADOを使い読み込み専用モードでCSVファイルを扱う準備(オープン)をします
adoCON.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & _
"DBQ=c:\Documents and Settings\デスクトップ\test;" & _
"ReadOnly=1"
Open "C:\Documents and Settings\デスクトップ\test\test.csv" For Output As #1


'SQLを実行し、指定したIDのデータを抽出します
'ID,名前,,,,,,,,,,,長文1,長文2,,,,,,更新日時 ←こんな感じで20項目
Set adoRS = adoCON.Execute("select * from sample1.csv where (ID = 213428) or (ID = 212717) or (ID = 212917)")

'SQLの実行結果をデータが無くなるまでrecへ格納します
Do Until adoRS.EOF = True

rec = rec & adoRS("ID") & "," & adoRS("名前") & "," & adoRS("長文1") & "," & adoRS("長文2") & Chr(10)

'カーソルを次の行へ
adoRS.MoveNext

Loop

'recの内容をイミディエイトウィンドウへ表示
Debug.Print rec

'recの内容を出力
Write #1, rec

'CSVファイルをクローズします
Close #1

'レコードセットをクローズします
adoRS.Close

'データベースのクローズ
adoCON.Close

EXCEL VBAでのCSVファイル読み込み、出力で困っています。


データ3件のファイルから3件抽出すると正常にイミディエイトウィンドウへ表示されるのですが
データ約38,000件のファイルから3件抽出すると文字化けする項目があるのです。
文字化けする項目の共通点は256文字以降が、どうやら化けているようです。(長文1、長文2の項目)
教えて!goo でいろいろ探してみましたが、これといった解決策が見つかりませんでした。

また、抽出データをCSVで出力しているのですが
始まりと終わりに " が出力さ...続きを読む

Aベストアンサー

フィールドの型が自動判定されるため、
テキスト型で256文字以上が切り捨てられているのでしょう。
http://oshiete.goo.ne.jp/qa/5996792.html
>..schema.iniファイルを作成して対処したほうが良いかと思います。
>256文字以上の文字列を含む列をMemo型で指定します。

>始まりと終わりに " が出力されるので困っています。
[Write#ステートメント]を使ってるからでしょう。
ヘルプで確認してみてください。
>..文字列は、ダブル クォーテーション ("") で囲んで出力します。
提示内容であれば、[Print#ステートメント]で良さそうですが。

QVBAで文字を反映させると255文字の制限になってしまいます。

VBAで文字を反映させると255文字制限に引っかかってしまいます。
最大で700文字程度反映できるようにしたいのですが、どのように設定すればよろしいでしょうか?
現在、
Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1
とこのように設定しています。
コードを区切ってしまえばきちんと表示させることができるのですが、変数を使って繰り返し表示させようと思っているので区切らないほうが理想です。

すべてのコードは長めです。
教えてください。

Aベストアンサー

私の問題認識に誤りがあるのかもしれませんので、下記を実行しても 255
文字になるのか確認して下さい。

下記のテストコードは Sheet1 の A1 セルに 700 文字の文字をセットし、
Copy メソッド、FormulaR1C1 プロパティーのそれぞれで、Sheet2 の A 列
へ転記しています。

きちんと転記が成功したかを確認するために、Sheet2 の B 列には LEN
関数で文字数を数えています。

なお、当方( WindowsXP + Excel2002 )では、どちらも255文字といった
現象はありません。

Sub TestMacro()
  
  Dim strBuf As String
  
  With Worksheets("Sheet1").Cells(1, "A")
    ' セルの書式を「標準」にする
    .NumberFormat = "General"
    ' 700文字のテストデータを A1 セルにセット
    .Value = String$(700, "A")
    ' コピーテスト
    .Copy
    ' 式の転記テスト
    strBuf = .FormulaR1C1
  End With
  
  With Worksheets("sheet2")
    ' ワークシート Sheet2 の A1 セルにペーストテスト
    .Cells(1, "A").PasteSpecial
    .Cells(1, "B").Formula = "=LEN(A1)"
    ' ワークシート Sheet2 の A2 セルに式を転記
    .Cells(2, "A").FormulaR1C1 = strBuf
    .Cells(2, "B").Formula = "=LEN(A2)"
  End With
  
End Sub


あるいは文字列の固定長変数を使ってるとか...

Sub Sample()

  Dim strBuf As String * 255 '255 Byte
  
  With Worksheets("Sheet1").Cells(1, "A")
    .Value = String$(700, "A")
    strBuf = .Value
  End With
  Worksheets("sheet2").Cells(1, "A").Value = strBuf

End Sub

この Sample プロシージャの場合、700文字のデータを変数 strBuf に
代入しようとしてますが、実際には先頭の 255 バイトしか代入されません。

私の問題認識に誤りがあるのかもしれませんので、下記を実行しても 255
文字になるのか確認して下さい。

下記のテストコードは Sheet1 の A1 セルに 700 文字の文字をセットし、
Copy メソッド、FormulaR1C1 プロパティーのそれぞれで、Sheet2 の A 列
へ転記しています。

きちんと転記が成功したかを確認するために、Sheet2 の B 列には LEN
関数で文字数を数えています。

なお、当方( WindowsXP + Excel2002 )では、どちらも255文字といった
現象はありません。

Sub TestMacro()
  
 ...続きを読む

QExcel VBA ADOでのCSV取込みについて

下記は、Excel VBAでADOを使って、CSVデータを取り出すソースです。ソースは、とあるサイトからほぼ丸写しです。

Sub main()
  Const DRIVER As String = "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ="
  Const PROVIDER As String = "Provider=MSDASQL;Extended Properties="""
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim idx As Integer
  Dim strSQL As String

  cn.ConnectionString = PROVIDER & DRIVER & "C:\"""
  cn.Open

  '全件数取得
  strSQL = "SELECT * FROM Sample.csv"

  'CSVファイルの内容を取得
  Set rs = cn.Execute(strSQL)

  rs.MoveFirst

  Do Until rs.EOF
    For idx = 0 To rs.Fields.Count - 1
      Debug.Print rs.Fields(idx).Value '←ここ
    Next idx
    rs.MoveNext
  Loop

  Set rs = Nothing
  cn.Close
  Set cn = Nothing
End Sub


ここで、「'←ここ」と示した行のrs.Fields(idx).Valueって、実際には「001」と書かれた値は、ダブルクォーテーションでも入ってない限りは「1」と変換されちゃいますよね?これをちゃんと、実際の値「001」のまま取得することって出来ないのでしょうか?

下記は、Excel VBAでADOを使って、CSVデータを取り出すソースです。ソースは、とあるサイトからほぼ丸写しです。

Sub main()
  Const DRIVER As String = "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ="
  Const PROVIDER As String = "Provider=MSDASQL;Extended Properties="""
  Dim cn As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim idx As Integer
  Dim strSQL As String

  cn.ConnectionString = PROVIDER & DRIVER & "C:\"""
  cn.Open

  '全件数取得
 ...続きを読む

Aベストアンサー

schema.ini ファイル(データ型定義)を作ってやれば安心かと。
http://www.ken3.org/cgi-bin/test/test102-1.asp

http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips118.htm

PS.
CopyFromRecordset についても調べると、吉かも?

QExcelVBAにて外部データ(*.csv)をSQL文を使って抽出する方法

こんにちは

VBAインポート問題で日々悩んでいるものです。

CSV形式のデータをODBCのシステムDSNに登録し、それをDAOでSQL要求しデータを抽出する方法がよくわかりません。

(1)データベースの定義記述内容
(2)レコードセットにSQL命令をかける記述
(3)抽出された内容をワークシートに貼る記述

等がよくわかりません。

DAOの場合、レコードセットを定義するのに
set DB=DBEngine.OpenDatabase("******")があったり、なかったりする理由がわかりません。

突然、set rs = CurrentDb.OpenRecordset("*****")
しているのはなぜでしょうか。

Aベストアンサー

田吾作7@38.6度の風邪引きです。。。
返事が遅くなってすいません。昨日ほとんど寝てました。。。


作りなおしました。

質問の仕様が
1.ODBC
2.EXCELに貼り付け

とあったので、すでにODBCは無視してますが、EXCELに貼り付けは忠実に守ろうとしていました。
今回のは、完全に仕様を無視したつくりになってます。(スピード重視のため)

作りとしては
1.CSVのデータをAccessにテーブルとして取り込む
2.EXCEL形式でエクスポート&ワークブックを開く

もしこれでもいいのであれば、こちらの方が処理が早いと思います。


Sub Main2()
  'CSVファイルのフルパス
  Const csvFullPath  As String = "c:\Folder1\dmy\test.csv"
  'EXCELファイルのパス
  Const excelFullPath As String = "c:\test.xls"
  'CSVファイルを取り込むテーブル名
  Const DmyTbl    As String = "DmyTbl"
  
  
  'CSVファイルを取り込む
  Call inCsv(csvFullPath, DmyTbl)
  
  'EXCEL形式でエクスポート
  Call outExcel(DmyTbl, excelFullPath)
End Sub

Private Sub outExcel(inTblName As String, inXlsFile As String)
  Dim xlsApp   As Excel.Application
  Dim xlsBook   As Excel.Workbook
  
  'エクセル形式でエクスポート
  DoCmd.TransferSpreadsheet acExport, 8, inTblName, inXlsFile, True
  
  
  'エクセル起動をしてエクスポートされたかを確認
  Set xlsApp = New Excel.Application
  Set xlsBook = xlsApp.Workbooks.Open(inXlsFile)
  
  xlsBook.Worksheets(inTblName).Select
  
  xlsApp.Visible = True

  Set xlsBook = Nothing
  Set xlsApp = Nothing
End Sub
Private Sub inCsv(inFileName As String, inTblName As String)
  Dim Db   As DAO.Database
  Dim strSQL As String
  
  Dim strFile As String
  Dim strPath As String
  
  Dim wkVal  As Variant
  
  Set Db = CurrentDb
  
  'とりあえずダミーを削除
  On Error Resume Next
  Db.TableDefs.Delete inTblName
  On Error GoTo 0
  
  'パスとファイル名に分解
  wkVal = Split(inFileName, "\")
  strFile = wkVal(UBound(wkVal))
  strPath = Left(inFileName, Len(inFileName) - Len(strFile))
  
  'SQL文(テーブル作成用)を作成
  strSQL = "select * into " & inTblName & _
      " from " & "[Text;DATABASE=" & strPath & "].[" & strFile & "]"
  Db.Execute strSQL
  
  Set Db = Nothing
End Sub

田吾作7@38.6度の風邪引きです。。。
返事が遅くなってすいません。昨日ほとんど寝てました。。。


作りなおしました。

質問の仕様が
1.ODBC
2.EXCELに貼り付け

とあったので、すでにODBCは無視してますが、EXCELに貼り付けは忠実に守ろうとしていました。
今回のは、完全に仕様を無視したつくりになってます。(スピード重視のため)

作りとしては
1.CSVのデータをAccessにテーブルとして取り込む
2.EXCEL形式でエクスポート&ワークブックを開く

もしこれでもいいのであれ...続きを読む

Q[Excel]ADODBでNull変換されてしまう

お世話になります。
今、Office2003で次のようなマクロを作成しています。
マクロが保存されているブックM、
参照するデータが保存されているブックD、
出力先のブックOがあり、
ブックMにてADODBをつかって、ブックDからSQLによる条件でブックOへ出力します。

このとき、ブックDのセルではちゃんとデータがセットさせているのに
出力したブックOでは空になってしまうという現象が発生して困っています。

デバッグ等して確認してみたところ、
書式が標準のセルで、文字列型の数値(文字列型のセルから値コピーした場所)が入っていると
RecordSetにとれた段階でNullに変換されてしまてしまっているように見えました。

この問題を解決するために何かよい方法はありますでしょうか?

ソースコードの詳細は確認できないのですが
こんな感じだったと思います。
※ rs.Requeryにて、rsの中身を確認した時点でNullだったので QueryTablesによる取り込みは関係ないと考えています。

Set conn = CreateObject("ADODB.Connection")
conn.Open ConnectString

Set sql = CreateObject("ADODB.Command")
sql.CommandType = 1
sql.ActiveConnection = conn
sql.CommandText = SQL文(? とUNION含む)
sql(0) = パラメータ設定
...

Set rs = CreateObject("ADODB.RecordSet")
Set rs = sql.Execute
With Sheet1.QueryTables.Add(rs, "A1")
.AdjustColumnWidth = False
.FieldNames = True
.BackgroundQuery = False
.Refresh False
.Delete
End With
...

お世話になります。
今、Office2003で次のようなマクロを作成しています。
マクロが保存されているブックM、
参照するデータが保存されているブックD、
出力先のブックOがあり、
ブックMにてADODBをつかって、ブックDからSQLによる条件でブックOへ出力します。

このとき、ブックDのセルではちゃんとデータがセットさせているのに
出力したブックOでは空になってしまうという現象が発生して困っています。

デバッグ等して確認してみたところ、
書式が標準のセルで、文字列型の数値(文字列型のセルから値コピーし...続きを読む

Aベストアンサー

度々失礼。
http://support.microsoft.com/kb/194124/ja
全てが強制的に文字列に変わるようですが

With conn
  .Provider = "Microsoft.Jet.OLEDB.4.0"
  .Properties("Extended Properties").Value = "Excel 8.0;IMEX=1" '■
  .Properties("Data Source") = "c:\temp\data.xls"
  .Open
End With
..『オプション IMEX=1;』を追加する方法でもいいかもしれません。

さっきのSub try()のQueryTableオブジェクトだけで使う場合はConnectionを以下に変更です。

wkCON = "OLEDB;" & _
    "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\temp\data.xls;" & _
    "Extended Properties=""Excel 8.0;IMEX=1;"""

度々失礼。
http://support.microsoft.com/kb/194124/ja
全てが強制的に文字列に変わるようですが

With conn
  .Provider = "Microsoft.Jet.OLEDB.4.0"
  .Properties("Extended Properties").Value = "Excel 8.0;IMEX=1" '■
  .Properties("Data Source") = "c:\temp\data.xls"
  .Open
End With
..『オプション IMEX=1;』を追加する方法でもいいかもしれません。

さっきのSub try()のQueryTableオブジェクトだけで使う場合はConnectionを以下に変更です。

wkCON = "OLEDB;" & _
    "Provider=Mi...続きを読む

QAccess schema.ini使用方法について

テキストファイルをAccess2003を使用しVBAでインポートする為に、schema.iniを作成しましたがエラーが発生してしまいます。

テキストファイルとschema.iniを同じフォルダ内に置いて解決すると思っておりましたが、何か他に指定する事などあったのでしょうか?

ファイルは省略してますが次のようになります。

▼テキストファイル
A100000B5400ファンデーション
A200000K3800化粧水

▼schema.ini
[商品マスタ.txt]
ColNameHeader=False
MaxScanRows=0
CharacterSet=932
Format=TabDelimited
Col1=商品番号 Text
Col2=販売価格 Currency
Col3=商品名 Text

▼VBA該当箇所
DoCmd.TransferText acImportDelim, , "商品マスタ", "C:\商品マスタ.txt", True

上記設定でインポートを試みたところ、実行時エラー '2391':が発生しうまく処理できませんでした。

因みに、インポートウィザードを使用した場合と、第二引数にインポート定義を指定した場合は問題なくインポートできます。

色々検索はしたものの解決策が見つからない為質問しました。
ご存知の方がいらっしゃいましたらご教示いただければ幸いです。

テキストファイルをAccess2003を使用しVBAでインポートする為に、schema.iniを作成しましたがエラーが発生してしまいます。

テキストファイルとschema.iniを同じフォルダ内に置いて解決すると思っておりましたが、何か他に指定する事などあったのでしょうか?

ファイルは省略してますが次のようになります。

▼テキストファイル
A100000B5400ファンデーション
A200000K3800化粧水

▼schema.ini
[商品マスタ.txt]
ColNameHeader=False
MaxScanRows=0
CharacterSet=932
Format=TabDelimited
Col1=商品番号 Text
Co...続きを読む

Aベストアンサー

今回の課題は、テキストファイルの短縮だったのですが、
直接の回答が出来なかったですが、回答をよく理解下さったようで
答えに力が入り、自分も色々勉強させていただきました。

QACCESSのSQLで数値型に変換するには

こんにちわ。今SQLの書き方が分からなくて大変困っております。
ACCESS2000で、テーブルが一つあるとします。
テーブルの内容は、氏名・点数の2項目だとします。

点数が50点より大きい人を抽出したいのですが、
項目は全てSTRING型にしないといけないため、
単純に比較できません。抽出した項目を数値型に
変換して、比較したいのですが、どのように書いたらいいのでしょうか。

SELECT  Shimei , CAST(Tensuu AS NUMERIC)
FROM   Table1
WHERE   Tensuu > 50;

このようなクエリを書いてみましたがエラーが出てしまいます。
ORACLEではTO_NUMBERなどの関数があると思うのですが、
ACCESSではどのようにしたらいいのでしょうか??
よろしくお願いします。

Aベストアンサー

この程度か?

SELECT テーブル1.Shimei, CInt([Tensuu]) AS 得点
FROM テーブル1
WHERE (((CInt([Tensuu]))>50));

それではヘルプでCIntでも確認してね。

QVBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。

マクロを含むエクセル(EXCEL2000)をHTMLのページからハイパーリンクで呼び出しています。そのエクセルでボタン操作に従い罫線やセルの着色を行っています。しかし、着色結果が更新されません。スクロールバー等で画面を移動すると正しく着色されています。このエクセルを通常に起動した場合は、問題なく動作するのですが、シート全体を更新する方法を教えて下さい。
各関数では、以下のスクリーンアップデータの処理を入れています。
Application.ScreenUpdating = False
    (処理)
Application.ScreenUpdating = False

Aベストアンサー

たぶん、EXCEL独特の問題だと思うのですが、HTML の場合、すでに色の部分を表面上で使用しているので、それでメモリが占有させているのではないかと私は思っています。

他にも、

 ActiveWorkbook.HTMLProject.RefreshDocument True

というのがありますね。
ホスト アプリケーション内のブックに含まれる HTML プロジェクトを更新する、というのがありますね。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

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....続きを読む


人気Q&Aランキング