• ベストアンサー

Excelで(1234)を文字として警告なしに登録

Excel2013です。 文字列から"(1234)"というIDを切り出してセルに文字として書き込みたいのですが、 警告(数値が文字列として書かれている)が出てしまいます。 処理は問題ないのですが、全体に挙動が重たくなってしまいます。 ' をつけたり" ~ " でくくったりと試してみましたがうまくいきません。 今は"ID(1234)"と接頭語をつけて回避しています。 できればExcel自体の設定はそのままに、このセル内容は明示的に文字列とする (警告を出さない)方法は有りますでしょうか?

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

  • ベストアンサー
回答No.4

こんにちは。 > 文字列から"(1234)"というIDを切り出してセルに文字として書き込みたいのですが、 > 警告(数値が文字列として書かれている)が出てしまいます。 > 処理は問題ないのですが、全体に挙動が重たくなってしまいます。 "(1234)"を文字列値として書き込むことは出来ている、ということですよね。 その上で、  [エラーチェック]の警告アイコンを非表示にしたい、  但し、Excelの設定は変更したくない ということだとすると、 【文字列書き込み処理後】 のお話でしょうか? [エラーチェック]の対象が 「文字列形式の数値、またはアポストロフィで始まる数値」 である場合は、 手順として、 ●まず、  [エラーチェック](数値文字列)の警告アイコンが表示されている   連続したセル範囲全体を選択   (一連の単矩形範囲を    同種の警告アイコンが表示されているセル以外は含まないように    選択しないとヤバイ(落ちるかも)です)   (行数・列数が多い時は選択後にEnter Shift+Enterの順にキーを押せば    警告アイコンのある先頭セルにスクロールできます。) ●次に、  [エラーチェック](数値文字列)の警告(プップアップ)アイコン   をクリック→ポップアップ(メニュー)が表示されたら ●最後に、  [エラーを無視する]   をクリック のように手当てしておけば、 (Excelのオプション[エラーチェック]を変更せずに) 警告アイコンを消すことが出来ます。 そのまま保存すれば、警告アイコンなしで保存できます。 しかし、再度数値文字列を書き込んだ場合は、 再び、[エラーチェック]に掛かります。 > 全体に挙動が重たくなってしまいます。 この一文の意味する所が、ちょっと気に掛かっているのですが、 【文字列書き込みをVBAで行うループ処理が重たい】 ということを問題にされているのであれば、 For文やFor Each文でセル値を書き換える場合には、 確かにビックリするぐらい重くなります。  [エラーチェック](数値文字列)  Application.ErrorCheckingOptions.NumberAsText = True が設定されている場合は、 単セル毎にXMLソースのNodeを書き直すことになる筈ですから 時間が掛かったりハングするのも避けようがないかな、と思います。 ただ、問題の本質は、表計算アプリで数値文字列を扱うこと であって、[エラーチェック]は福次的なものでしょうね。 "(1234)"というのは、表計算アプリでは数値文字列として扱うよりありませんから、 内部的なエラーを無視することは出来ても、 エラーを消せる訳ではないです。 [エラーチェック]を切ったとしてもそれは、 喩えるならVBAでプロシージャ丸ごと On Error Resume Next で強引に実行するみたいな? 可能なら数値文字列以外のフォーマットを検討なさった方が、 保守の面で安心できるとは思います。 重さ(処理が遅くなる原因)を回避する意味では、 なるべく配列で出力するのが最も効果あります。 後は、上書きする時は、一旦.ClearContentsしてから出力するとか。 以下、テスト用のソース挙げておきます。 ★マークしたところは、遅さを回避する為の工夫です。 Forループ版(数十秒)と配列変数版(コンマ数秒)と 新規のブックで試してみると'重さ'の違いが感じられると思いますので、 参考になることが少しでもあれば、と。 ' ' /// 数値文字列出力 Forループ版 Sub Re9173129a() Dim i As Long Dim t As Single: t = Timer   With Application     .ScreenUpdating = False ' ★     .EnableEvents = False ' ★     .Calculation = xlCalculationManual ' ★   End With   With Range("B2:B65536")     .NumberFormat = "@" ' ★     .ClearContents ' ★     For i = 1 To 65535       .Cells(i, 1) = Format(i, "!(0000!)")     Next i     Call IgnErr(.Cells) ' [エラーチェック](を無視して)アイコンを消す   End With   With Application     .Calculation = xlCalculationAutomatic ' ★     .EnableEvents = True ' ★     .ScreenUpdating = True ' ★   End With Debug.Print "testB:"; Timer - t; ".Sec" End Sub ' ' /// 数値文字列出力 配列版 Sub Re9173129c() Dim v() As String ' ★ Dim i As Long Dim t As Single: t = Timer Dim def As Boolean   def = Application.ErrorCheckingOptions.NumberAsText ' ★   If def Then Application.ErrorCheckingOptions.NumberAsText = False ' ★   With Range("D2:D65536")     ReDim v(1 To .Rows.Count, 1 To 1) ' ★     .NumberFormat = "@" ' ★     .ClearContents ' ★     For i = 1 To 65535       v(i, 1) = Format(i, "!(0000!)") ' ★     Next i     .Value = v ' ★     Call IgnErr(.Cells) ' [エラーチェック](を無視して)アイコンを消す   End With   If def Then Application.ErrorCheckingOptions.NumberAsText = True ' ★ Debug.Print "testD:"; Timer - t; ".Sec" End Sub ' ' /// [エラーチェック](を無視して)アイコンを消す Private Sub IgnErr(Target As Range) Dim c As Range   For Each c In Target     With c.Errors(xlNumberAsText)       If .Value Then .Ignore = True     End With   Next End Sub ' ' ///

momono14
質問者

お礼

以前からお世話になっていたとは…慌てて掘り起こしてみました。 以前頂いた一気に消すソースは今も元気に動いています。 今回ですが、なんと言いますか、ご賢察の通りです。 というか怖いくらい状況を当てられてます。 当方かなり素人なので、ソースも非常に勉強になりました。 配列の使い方サンプルもかゆいところに手が届いてます。 テスト時に画面非表示しても遅いから本番を思うと途方に暮れてました。 回答6にBAすると変な感じになるのでこちらに返信&BAさせて頂きます。 ありがとうございました。

その他の回答 (5)

回答No.6

回答No.4、訂正です。 誤) ... Format(i, "!(0000!)") 正) ... Format(i, "(0000)") 回答文を書く前に修正済ませていたつもりが漏れていました。 (説明文にもタイプミスありますが)すみません。 以前にも私は回答したことがあるのですが、 過去に見かけた質問者さんのご質問はVBAに関するものが多かったように 私は記憶していたので、VBAのサンプルを挙げてみたのですが、 これも思い違いでしたら、適当に流してやってください。 回答No.4全体としての趣旨は、 [エラーチェック]の[エラーを無視する] を適用することと、それに纏わる説明です。 因みに、[エラーチェック]の警告アイコンが出たり出なかったり、 細かな環境因で異なる結果になるということもありますが、 その違いがどのようなものなのかは、こちらでは特定できていません。 Officeが64ビット/32ビット、Excelで設定するマルチスレッドの多少、 が影響するような気もしていますが、これは、確証のない話です。 [エラーを無視する]に関しては、決定的な対策とは呼べないでしょうけれども、 確かめた限りでは汎用性があるようです。 以上、訂正と補足でした。 失礼しました。

  • m_and_dmp
  • ベストアンサー率54% (974/1797)
回答No.5

NO.1 です。 調べてみましたが、シート上で処理するのではなく、エクセル全体でエラーチャックオプションの設定が可能であることがわかりました。 ファイル→オプション→数式 にエラーチェック関係の設定があります。

momono14
質問者

お礼

ありがとうございます。 前回のレスではよく見ていませんでしたが、改めてみると、 警告時に横に出るオプション設定の画面で、Excel全体設定 だけで無く、個別に警告を抑止する設定も存在することに 気がつきました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 Excel2013では確認しておりませんが、少なくともExcel2010では「'」を付けて '(1234) とする事で文字列になりますし、セルの書式設定の表示形式を[文字列]とする方法も有効でした。  後、別の方法として ="(1234)" と入力するのでは駄目なのでしょうか?

momono14
質問者

補足

文字列項目に「文字として(数字)を書いたら」数値扱いされて警告がでる という状態でして、どうもこれはExcel2013のエラーオプションに そのものずばりの抑止項目があるので規定の挙動っぽいです。 ="(1234)" これも標準項目ではOKですが、文字項目に書き込むとそのまま この文字が出てしまうようです。

  • nananotanu
  • ベストアンサー率31% (714/2263)
回答No.2

手元にエクセルがないのでうろ覚えでごめんなさい。 セルの書式設定⇒表示形式 で当該セルを文字列にしておけば良くなかったでしたっけ?

momono14
質問者

補足

すいません、その状態で出るっぽいので困ってます。

  • m_and_dmp
  • ベストアンサー率54% (974/1797)
回答No.1

警告が出た時、そのセルを選択すると、左側に何かアイコンのようなものがあると思います。その上にマウスポインタを持って行くと、アイコンの右に▼が現れますので、それを押してプルダウンメニューを開いて、エラーチェックオプションの「文字列として入力されている数値」のチェックを外してみてください。 たぶん、以後、警告がでなくなると思います。 次のページにピッタリの記事があります。(Office のバージョンが記述されていませんが、) http://ciao.aoten.jp/ciao/2013/11/post-9b55.html

momono14
質問者

補足

やはりExcel自体の設定で警告を殺すしか無いのでしょうか… 他の所では警告が出て欲しいけど、使用者が意図的に設定している 場合は警告をセル単位で解除できても良さそうなもんですが。

関連するQ&A

  • Excelで数値が文字列になっています

    Excel2010で「このセルにある数値がテキスト形式か、またはアポストロフィで始まっています」という警告が表示されたりして、計算が出来ません。 打ち直ししたり、「エラーチェックルール」で「文字列形式の数値、、またはアポストロフィで 始まる数値」のチェックを外したりして計算は出来るようになります。 「表示形式を変えてもセルの中の値は変化しません。数値データは数値のまま、文字列データは文字列のままです。」とは本当ですか? 本当ならば、数字の保存形式が文字列データかどうかを確かめる方法はありますか? なお、ISNUMBERという関数ではTRUEと出ます。

  • EXCELで文字を数字に変換したい

    お世話になります。 エクセルシート上の見た目数字、実は文字列という値を、数字に変換したいのですが、EXCEL-VBAでどのように処理すればいいのでしょうか? 1.セルから文字列型の見た目数字の値をとってくる。 2.VBAで文字列型から整数型に変換する。 3.元のセルに貼り付ける。 4.セル書式を数字のカンマ形式にする。 リンクではなくこのような処理をしたいのですが、どうすればいいのでしょうか?

  • EXCELで文字検索&置換え

    下記のような処理がEXCELの機能で可能かどうか教えてください。 2つのシートがあります。 1つめのシートには数値のみ(例:1,2,3・・・・)、 2つめのシートには数値とそれに対応する文字列(例:1,2,3・・・・と太郎、次郎、三郎・・・)をテーブルのように持っています。 行いたい処理は、 (1)1つめと2つめのシートの数値を比較して (2)同じ数値であれば2つめのシートから数値に対応している文字列を持って来て、 (3)1つめのシートに表示させる(数値の横の列) ことです。 このような処理がEXCELの機能のみで処理可能かご存知の方がいらっしゃいましたら教えてください。 (可能でないならばVBAで行うことを検討しています)

  • エクセル 数値を決まった文字で表示したい

    よろしくおねがいします。 excel2003 または excel2007 です。 数値を決まった文字列であらわしたいのです。できれば VBA を使わずに。 たとえば 1・・・あ 2・・・い 3・・・う などとして  123(数値)を あいう(文字列)で表示したいのです。 数値の桁数は最高で7桁です。 よろしくおねがいします。  

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • Excelに詳しい方、お願いします。文字列…

    Excel2007のセル内の文字列を数値に換える術を教えてください。 Windows 7 です。

  • Excelで数値が左揃えになって中央揃えできない

    他人が作成したExcelシートに記入しているのですが、特定セルのみ、数値を入力すると左揃えになってしまい、中央揃えできません。 当該セルの書式設定は標準、中央揃えになっており、かなや漢字等の文字を入力すれば中央揃えで表示されます。 また、数値を入力して表示形式を標準から文字列に変えても左揃えのままですが、数値の前に「'」を付けて文字列と明示して入力すれば、表示形式を標準にしていても中央揃えされます。 そのセルに何かが設定されているのだと思いますが、それが見つけられません。 どのような場合に、そのような挙動になるか御存じの方がおられましたら御教示お願い致します。

  • 【エクセル】文字列置換について

    エクセルでの文字列置換についてお教えください。 一部の文字列が含まれていたら、置換するという処理は可能ですか? 例えば、 ”ああああいいいい”  ”ああああうううう” ”ああああええええ” セルに、上記の文字列が、あったとして、 ”ああああ”が、含まれていたら、 すべてのセルを、”おおおお” に、置き換える(差し替える)という処理を想定しています。 よろしくお願いいたします。

  • excelで13桁のJANコードを数値から文字列に

    仕事柄、excelで13桁のJANコードを入力することが多いのですが、セルの表示が標準の設定のままだと例えば「4.12345E+12」と表示されます。実は文字列として扱いたいのですが、この入力後のセルの表示形式を文字列に変えても、表示は変わりません。このセル自体をダブルクリックすれば13桁の文字列表示になるのですが、大量のデータを数値のまま受け取る事があるため、できれば一括で処理してしまいたいのです。何か方法はありますでしょうか?

  • エクセルについて

    Windows Xp Excel 2003を使用しています。 エクセルでグラフを作成したのですが、表に数値が入力されているのにデータマーカーが表示されません。 表内の数値が文字列として扱われている可能性があります。 数値を入力した後にセルの結合をしました。 セルを結合すると数値が文字列扱いになってしまうのでしょうか? セルの結合後の値を数値扱いにしたいのですが、方法はありますか? データマーカが表示されない理由は他にありますか? 宜しくお願いします。

専門家に質問してみよう