Access上のVBAにてTransferSpreadsheetを利用してExcelを読み込む方法に関する質問

このQ&Aのポイント
  • Access上のVBAにてTransferSpreadsheetを利用してExcelを読み込む際、数値の丸めが正しく行われない問題が発生しています。
  • 特定の条件下で数値の丸めが行われず、正確な数値が取り込まれる方法を求めています。
  • 取り込み元のExcelの書式設定が数値と文字列が混在している場合に、正確な数値を取り込む方法を教えてください。
回答を見る
  • ベストアンサー

TransferSpreadsheetでの数値丸め

前回の質問と関連がありますのでご参考下さい TransferSpreadsheetでの指数表記 https://okwave.jp/qa/q10095442.html Access上のVBAにてTransferSpreadsheetを利用して Excelを読み込みテーブルに表示させているのですが、 以下書式条件だと何故か数値が丸められ正しくない値が読み込まれます。 例1 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:文字列) 結果1 2行目の値が丸められてAccessのテーブルに取り込まれます。 例2 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:数値) 結果2 この場合はどちらも丸められず、正しい数値が取り込まれます。 Excelの書式で文字列と数値が混在した時限定の挙動の様です。 取り込み元のExcelは編集不可になります。 数値を丸められず正しく読み込む方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.3

> 123456789015678 > 123456789020000 > と言う値で読み込まれます。 エクセルで該当ファイルを開いていないでしょうか。 開いている場合下4桁が0になったり、数値のデータがまるめられたりします。 申し訳ありませんが、対処方法はファイルを閉じてから実行するくらいしかわかりません。

popepon
質問者

お礼

ご指摘いただいた事項ですが開いてました。 なるほどこういう事だったんですね・・・ 開いている必要はないので閉じて走らせようと思います。 有難うございました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.2

訂正です。 15桁以上 ↓ 15桁を超える

  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.1

もしかして15桁以上あるのではないでしょうか。 数値は15桁までしか対応していないと思いますので、結果としてまるめられるのだと思います。

popepon
質問者

お礼

ご回答有難う御座います。 ちょうど15桁です。 例えばExcel上で 123456789015678(文字列書式) 123456789015678(数値書式) を同時に読み込んだ場合、 123456789015678 123456789020000 と言う値で読み込まれます。

関連するQ&A

  • TransferSpreadsheetでの指数表記

    VBAにてTransferSpreadsheetを利用してExcelを読み込み テーブルに表示させているのですが、 以下書式条件だと何故か指数表記として読み込んでしまいます。 Access上では表記だけでなく中身も省略されており、 恐らく指数表記自体を文字列として読み込んでいる様で困っています。 例1 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:文字列) 結果1 2行目が指数表記として読み込まれます。 例2 1行目(ヘッダ)文字列 2行目 数値(書式:数値) 3行目 数値(書式:数値) 結果2 この場合は指数表記にならないので書式混在ケースのみの様です。 書式混在でも指数表記による取り込みを回避したいのですが、 何か方法はありますでしょうか? 元のExcelファイルを訂正するのは不可になります。

  • access2000 クエリで文字列を数値に変換

    access2000 クエリで文字列を数値に変換 商品の管理DBをaccessで入力し、テーブルをexcelにエクスポートして並び替えやその他の編集をしています。 テーブルに「数量」というフィールドがあり、数字入力が主ですが、商品によっては「無制限」や「-」のように文字列を入力しなければならない為、「数量」は「数値型」ではなく「テキスト型」になっています。 excelへエクスポートした時に、「10」などは数値として認識させ、「無制限」などはそのままの文字列にしたいです。 クエリの式に「Val([数量])」としてみたところ、「10」は数値として変換されましたが、数値ではない文字列は全て「0」になりました。 また、「15,000」は「15」になりました。(カンマが文字列な為) これを 「10」→「10」(数値) 「無制限」→「無制限」(文字列) 「15,000」→「15000」(数値) にするような関数はありませんでしょうか。 excel2007のエラー処理(セルを選択した時に出る「!」で「数値に変換する」)と同じような挙動にしたいです。 宜しくお願いします。

  • 指定範囲の条件に合致する順位

    EXCELのVBAで以下のことをやりたいのですが、分かりません。 アドバイス頂けますでしょうか。 例として、1から40行固定の表があります。A、B、C、D列とあり、 A列は数値が必ず入っているセル(1~40)、 B列は時間のシリアル値で、値が入っているセルと入っていないセルの混在、 C列は文字列で値が必ず入っているセル、 D列は数値で、、値が入っているセルと入っていないセルの混在、という表があるとします。 この時に、 「”Bに値が入っていて、かつ、Dに値が入っていない行”の、”B列のトップ3”の、AとBのデータ」が 欲しいのですがどのようにしたらいいか分かりません。 お願いいたします

  • エクセルで数値によるデータ並べ替え

    エクセルについて質問です。 ネットから競馬の出馬表をエクセルにコピーしました。 その表には馬毎にある指数が表示されています。 表は上から馬番順に並んでいますが、指数の大きい順に上から行を並べ替えたいのです。 その時に指数のある列だけでなく、行単位で指数順に並び替えたいのです。 指数の表示されてるセルの中には、数値だけでなく文字(アルファベット、日本語)も記入されています。 指数のある列をデータから並び替えを選んで実行すると、 表が崩れてバラバラになってしまいます。 出来る方法はありますか? よろしくお願いします。

  • 数値をワイルドカードでフィルタしたい

    ●質問: Excelの表に記入された入力値に誤りが無いか、フィルタ機能で確認を試みています。 添付の画像のように入力されており、日付や名前はうまくフィルタ出来たのですが、「現場コード」(数値)がどうしてもうまくフィルタ出来ません。 桁数が多い、桁数が少ない、極端に数値が大きいor小さい、入力忘れ(空欄)など、明らかに入力ミスである項目を見つけるため、今までは「5?????」に等しくない値をフィルタしていました。 例では、4行目と6行目が引っかかることになりますが、どのようにすればフィルタ出来るでしょうか? ●経緯: 何故か今まではこの現場コードの欄が文字列になっているExcelデータが回ってきていたのですが、最近この現場コード欄が数値の状態のExcelが回ってくるようになり、それ以来「5?????」ではフィルタ出来なくなりました。(「等しくない」にすると、全行表示されたままです。) そもそも、フィルタする際に[▼]ボタンを押したとき、[テキストフィルター]ではなく [数値フィルター]と言う項目があるのが原因ではないかと思います。 ネットで調べてみると、隣のセルに「=""&C2」のような式を入れてオートフィルし、その式を入力した列をフィルタすると言う方法はありましたが、現場コード欄が文字列で届いていたときはそのままフィルタ出来たのが不可解です。 C列の [セルの書式設定] にて、分類を「文字列」にしても、上述のフィルタに引っかかりません。 フィルタの[▼]ボタンを押した後に「5?????」を検索すれば該当行を導き出すことはできますが、試しにこの動作をマクロ記録機能にかけてみると、下記のように、検索で出てきた結果の値を直接指定したことになっています。 ActiveSheet.Range("$A$1:$C$6").AutoFilter Field:=3, Criteria1:=Array( _ "512013", "513572", "513842"), Operator:=xlFilterValues 最終的に、このフィルタの動作をマクロに組み込むことも考えているため、どのようにフィルタしようか判断に困っています。 どのような操作でフィルタをかければ、該当行(4行目と6行目)を見つけ出せるでしょうか? ●利用環境: OS:Windows7 Excel2010 *画像の表は例です。記入している数値は実際に業務で使用したものではありません。

  • セルの書式が標準なのに文字列にできるのはなぜ?

    会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。

  • エクセルのデータをアクセスにインポートすると?

    エクセルで文字列書式で数字が入力されているのですが、それをアクセスにインポートした際に、数件だけ正しくインポートされません。指数書式になってしまします。例えば 431122→4.311E+05になってしまします。エクセルの書式は全て文字列になっています。何が原因なんでしょうか?

  • Excelで数値→文字列変換で指数表示になったものをいっぺんに直したい

    Excelについての質問です。 他のシートからコピー&ペーストした13桁の数字の羅列データ(JANコードまがいのものです)をまた別のシートの同様のデータと文字列としてマッチングをしようとしています。 ただ、コピペ元のデータが数値と文字列が混在していてコピペ後にセルの書式設定で列を一括で文字列に設定すると「2.01E+12」のように指数表示になってしまうものがありました。 一つずつダブルクリックすれば元の数字に戻るのですが、なにしろ数が多く面倒なものでなんとかいっぺんに指数表示から元の数字に変換することができないものでしょうか。 ちなみにOSはWin2000、Excelも2000を使用しています。 今回はコピペしてしまった後の対処方法をお尋ねしていますが、コピペ時にこうすれば良いというような回避方法もありましたら併せてご回答頂ければ幸いです。

  • Excelで特定の数値が入った行の別列の数値を集計

    ExcelのA列にそれぞれ空白 or 1、2、3いずれかの値が入っています。 B列には行ごとに異なる数値(1、2、3、4)が入っています。 A列とB列の行数は同じです。 それぞれの数値を下記の通りにまとめたいと考えています。 ・A列に「1」が入っている行のB列の数値を集計し、その数をA100に入れる ・A列に「2」が入っている行のB列の数値を集計し、その数に1.5を掛けた値をA101に入れる ・A列に「3」が入っている行のB列の数値を集計し、その数に2を掛けた値をA102に入れる 上記はどのような計算式で実現できるでしょうか? よろしくお願いします。

  • Access2007へのデータインポート

    Excel2007で作った、2列だけの40,000行にわたるデータがあります。この1列目には数値が入っていて、複数の行に同じ数値が入っています。2列目は文字列です。 これをAccess2007で作ったデータベースに取り込みたいのです。 データベースにはIDフィールド(固有数値)とメモ型に規定されたフィールドがあり、Excelの1列目の数値がAccessのIDフィールドと一致したら、Excelの2列目の文字列を、メモ型に規定されたAccessのフィールドにインポートする作業を目指しています。 結果的に、メモ型に規定されたAccessのフィールドにはたくさんの文字列が連なるようにしたいのですが、方法がわかりません。 教えていただける方がおられましたらうれしいのですが・・・。どうぞよろしくお願いいたします。

専門家に質問してみよう