- ベストアンサー
EXCEL2010_VBAでCas番号を扱う
- 化合物を特定するCAS番号というものがあり、これを利用したVBAマクロをEXCEL2010で使用したところ、CAS番号が日付と認識されてしまうエラーが発生しています。
- CAS番号は「66-71-7」や「68441-17-8」のように表され、2~5桁の数字-2桁の数字-1桁の数字の形式です。
- EXCEL2010では、CAS番号の最初が2桁の場合に日付と認識されてしまい、正しく取り扱うことができません。どのようにCAS番号を文字列として取り扱うか、解決方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>実は、これはやっていたのですが、記載忘れていました。 2010では、セルの書式で文字列指定しても 「xx-xx-xx」を いれると、「!」でて、日付が文字列になっているぞという警告が出ます。 こちらでもExcel2010で確認してみましたが、「66-71-7」と入力すれば通常の文字列としてエラーオプションは表示されません(もちろん、1-2-3のように日付として認識される文字列データを入れた場合は表示されますが)。 また、確認ですが、最初に文字列設定してから(数値になったデータを後から表示形式を変えても、データは変更されません)マクロを走らせているのですよね。 いずれにしろ、こちらでは、「66-71-7」がシリアル値として認識されるような現象は発生していませんので(シリアル値から判断してもどのような日付変換が行われているのかも不明)、F8キーで1行ずつコードを走らせ、CasN にどのような値が入っているか確認するなどして、なにか思い違いがないか調べてみてください。
その他の回答 (2)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 せっかく回答が出ているのに、水をさすようで恐縮なのですが、書式の仕様は、2010でも、2003でも変わらなかったはずです。 >まっさらなシートで 一から入れなおし...((+_+)) しかないようです。 Dim CasN As String CasN = Cells(4, 6).Offset(0, code - 2).Text Cells(4, 6).Value = "'" & CasN のように、書式はそのまま(デフォルトで可)で、プレフィックス文字(')をつけるのが一般的です。 ただ、見栄えが悪いので嫌う人はいますが、そういうこだわりに対する、マイナス面を受け入れるかどうかにも関わりますが、Microsoft は、書式--文字列には不具合があるにも関わらず、Lotus123の仕様をいつまでも継子にしているようです。 プレフィックス文字(')は、見えるけれども、入力した数字が、文字列になるだけで、検索等には掛かりません。また、書式を文字列にすると、書式文字列を参照したセルが同じく不活性化してしまいますので、できるならしないほうがよいです。
お礼
ご指摘ありがとうございます。 プレフィックスをつけるのは、考えたのですが、 1500件もあったので 躊躇してたのです。(マクロで処理するにも原因が不明だったのもあります) あのとき、 CasN = Cells(4, 6).Offset(0, code - 2).Text の段階で、 CasNに すでにCAS番号としてはいっていなかったのです。 たぶん、ファイル自体が壊れていたのかも? (下に書いた通り、コピペして 新しくシート作ったら治りました) 今後は、プレフィクスをいれて、明示的に区別したほうがいいですね。 ありがとうございました。
- MackyNo1
- ベストアンサー率53% (1521/2850)
そのままのコードで対応するなら、CAS番号を代入するセルの書式を、初めから(あるいはVBAで)文字列に設定しておけばよいと思います。
お礼
ご回答ありがとうございます。 実は、これはやっていたのですが、記載忘れていました。 2010では、セルの書式で文字列指定しても 「xx-xx-xx」を いれると、「!」でて、日付が文字列になっているぞという警告が出ます。 一応、右クリックのメニューで無視するに設定すると、警告はきえるのですが VBAで操作すると 上記のように日付に.... 「.Text」にすれば、入力されたままでとれるはずなのに ある意味バグ? と思っております。
補足
下にも書きましたが、セルは書式設定で 文字列に設定してありますが、 やはり日付と判断します。
お礼
ご回答ありがとうございます。 当該マクロを含むブックは、EXCEL2003で作成したものをEXCEL2010で読み込みダイアログにしたがい、2010のブックに返還されたものです。 そこで、はたと思い、まっさらなブックを作成し、シートにデータ(数値として)とマクロを複製し、走らせてみました。 すると、期待通りに「.Text」プロパティで「66-71-7」、試しに「.Value2」プロパティ(無理やりシリアル値になるかと)でも「66-71-7」(セルの指定を文字列にしてるので当たり前ですが)が得られました。 結論としては、2010に変換した際に何らかの不具合が生じたのか 値が表示と内部で違っている ということと思われます。(値を消して、入れなおしても変わらないので セルの内部でおかしいのかもしれません。) というわけで、まっさらなシートで 一から入れなおし...((+_+)) しかないようです。
補足
入れ直しかと おもったら シートを新しいシートにコピーしなおして、マクロを走らせたら、治りました。(-_-;) この2日間悩みまくったのは... というわけで、MackyNo1のアドバイスのおかげで 好転しました。 ありがとうございます。