• ベストアンサー

VBAでシート書式の自動変換を作動させない方法

エクセル2002使用です。 VBAで、表などの転記をしていると、転記された数字がエクセルの書式の自動変換によって想定しない書式の表示になります。 例えば、 10 → 1000% (%への表示変換が一番多いです) これをとめる方法はありますか? または、VBAで書式を設定する必要があるのでしょうか? よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 #1さんのところの補足で書いたのは、「値の代入」です。転記するなら、Copy メソッドを使うか、NumberFormatLocalで、書式を設定するかコピーしてください。 >先程の補足は例ではなく、実際のコードです。 >ActiveSheet.Range("AA3").Value = 1 >ActiveSheet.Range("AA4").Value = 2 >ActiveSheet.Range("AA5").Value = 3 >ActiveSheet.Range("AA6").Value = 4 >ActiveSheet.Range("AA7").Value = 5     ↓ Sub TestSample1() Dim LastRow As Long Dim i As Long With ActiveSheet LastRow = 5 For i = 1 To LastRow   .Range("AA3").Offset(i - 1).Value = i Next i   .Range("AA3").Resize(LastRow).NumberFormat = "General" '英語表記 End With End Sub '(NumberFormatは、NumberFormatLocalよりもむつかしいので注意してください) P.S 書式の自動変換など、型の変換を、「自動キャスト」と呼びます。例えば、日付のテキスト値の一部は、ワークシートのセルの書式にもっとも合うものに変換されますが、この場合は、元の書式を変えているわけではありません。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

値だけを扱うエクセル関数はもちろん、VBAの値(Value)をセットするだけで、書式が変わることはありません。それ以前に設定されている書式が、値を得て、見えるような形になったのだと思いいます。 どうしても気になるのなら、VBAでセルの書式NumberFormatプロパティを設定すれば、今までの書式にかかわらず、そのように書式が設定されます 。 気になるなら 範囲を指定して Sub test01() Dim cl As Range For Each cl In Selection MsgBox cl.NumberFormat Next End Sub を実行すると、範囲指定したセルに現在セットされているセルの書式が確かめられ、判ります。

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.2

えーと 例じゃなくて、実際に書いているコードを見せてほしいんですが・・・ 実際には具体的な値ではなくて、どこかのセルから引っ張ってきた値(変数)を入力しているんですよね。持ってきかたによっては書式ごと持ってきちゃうことも考えられるので言ってます。 補足に書いてあるようなコードをそのまま(文字通りそのままです)書いて、かつAA3:AA7の書式が標準で、ご指摘のような内容になるのであれば、ごめんなさい。私の出る幕ではなかったです。

ken123
質問者

お礼

banker_U 様ありがとうございます。 先程の補足は例ではなく、実際のコードです。 AA3:AA7に1から順番に数字を代入してます。 代入した数字の表示形式がいろいろとなります。 もし何かわかれば、またよろしくお願いします。

  • banker_U
  • ベストアンサー率21% (17/78)
回答No.1

こんにちは ちょっと今の情報だけでは状況が判明しません。 具体的にどんなコードを書いていますか? コピー部分とペースト部分を教えてください。 多分省略しているプロパティをきちんと書けばいいと思います。 あと、シートの方の書式設定(コピー元、コピー先とも)も問題かもしれません。

ken123
質問者

補足

banker_U 様早速のご回答ありがとございます。 ActiveSheet.Range("AA3").Value = 1 ActiveSheet.Range("AA4").Value = 2 ActiveSheet.Range("AA5").Value = 3 ActiveSheet.Range("AA6").Value = 4 ActiveSheet.Range("AA7").Value = 5 コードは上記のように代入しています。1が100%になったり、ならなかったりします。 シートの方の書式は、標準に設定しなおしても、VBAで再書き込みすると同じようになります。 よろしくお願いします。

関連するQ&A

  • VBAで入力した数字の書式が上手くいきません

    VBAの学習を始めました。使用EXCELのVersionは2000です。 フォーム上のTextBoxへ数字を入力し、それをSheetのセルに代入したのですが、セルの左側に寄ってしまい、3桁のカンマ表示も出来ません。 勿論、表のセルには「数字・カンマ表示」の書式設定は行ってありますので、キーボードから直接入力した場合には正しく表示されます。 (以前同じようなsheetを作った時には上手くいったので理由が解りません) どこが間違っているのでしょうか?アドバイスの程、宜しくお願い申し上げます。 

  •  エクセルで数字から名前に変換できる方法を教えて下さい。

     エクセルで数字から名前に変換できる方法を教えて下さい。  例として、     セルに、1と打ち込むと 名前が表示される。  【セルの書式設定】で試してみたのですが、うまく出来ません。  パソコン初心者なので、よろしくお願いします。

  • VBAを使用し、自動でシートごとに連番を入れる方法

    Excel2003のVBAを使用し、自動でシートごとに連番を入れる方法を教えて下さい。 P0911~ P0950までとか番号が自由に設定出来て、尚且つ、最初の番号に入っているエクセルデータが最後の番号まで同じ内容で導入されているのが望ましいです。 どなたか、ご教示頂けると大変助かります。

  • VBAによる数値変換がうまくいきません

    仕事で必要なIDの変換ツールを、EXCELを使って作っています。 いつもは手動で変換しているのですが、頻繁に作業を行わなければならないのと、作業が煩雑で入力ミスも多いため、それを防ぐためにプログラムで自動化してしまおうと考えています。 変換前  変換後  1000   1001  1001   1001  1002   1002  1003   1002  1004 → 1001  1005   1001  1006   2002  1007   1003  1008   1001  1009   1004  1010   1099 このような4~5桁の数字を、変換表にしたがってマクロで自動変換するように、ネットで見つけたVBAのプログラム文に手を加え作っているのですが、一部の数字がうまく変換できません。 ・数字の変換に関して、特に法則のようなものはありません。すべて変換表にしたがって変換しています。 ・変換しなければならないIDの数は、100個以上あります。 現在のVBAのプログラムは、以下の通りです。 Sub 変換() Dim ws As Worksheet Dim idx As Long Application.ScreenUpdating = False ActiveSheet.Copy after:=ActiveSheet ActiveSheet.Name = "変換後" Set ws = ActiveSheet With Sheets("変換表") For idx = 1 To .Cells(65536, 1).End(xlUp).Row If .Cells(idx, 1) <> "" Then ws.Cells.Replace What:=.Cells(idx, 1).Value, Replacement:=.Cells(idx, 2).Value, _ LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False End If Next idx End With Application.ScreenUpdating = True End Sub VBAやマクロに関する知識がほとんど無いので、何が原因なのか、どこに原因があるのかが分かりません。 どなたか詳しい方、お力を貸してください。 よろしくお願いします。

  • Excel 2003 セルの書式設定「\」と「,」同時使用の方法

    どなたか教えて下さいお願い致します。 Excel 2003のセルの書式設定で、数字を入力すると「\」マークが自動でついて、 かつ「,」で3桁区切りの表示をさせるようにしたいと考えております。 どちらか一方を設定すると、もう一方の書式設定の効果がなくなってしまいます。 同時に設定する方法はあるのでしょうか? 例) 「2000000」とセルに入力→「\2,000,000」と表示される

  • エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい

    エクセルのVBAマクロで隠れシートを表示させる方法について教えて下さい。 エクセルで”書式→シート→表示しない”を実行するとエクセルのシートを非表示にすることが出来ます。 逆に”書式→シート→表示する”にすると隠れているシートが表示出来ます。 この非表示のシートを表示させるVBAマクロの記載を教えて下さい。 但し、”Sheets(シート名).Visible = True”の様にシート名を記載すれば非表示のシートが表示されるのは知っています。今回知りたいのは、シート名の分からない全ての非表示のシートを表示させるVBAマクロの記載方法を教えて下さい。

  • Excel VBAで自動的にハイパーリンクを設定する方法について教えて

    Excel VBAで自動的にハイパーリンクを設定する方法について教えてください。 VBAについては、ほとんど初心者なので、どうやって良いのか分かりません。 やりたい作業については、あるExcelのブックに一覧表があり、その一覧表のIDと合致したファイルをハイパーリンクさせたいのです。 一覧表は、 ID    項目  ・・・VBA A-0001  aaaa B-0002  bbbb の様になって、VBA列のセルをアクティブにするとID列のセルに自動でハイパーリンクが設定される。 そして、リンクをさせたいファイル名が"A-0001 aaaa・・・"となっているので 頭の6文字が合致したら、そのファイルを選択してくれるようにしたいです。 説明が下手で申し訳ありませんが、皆様のお知恵をお貸しください。 出来れば・・・ボタンを押すとリンクが貼ってないIDは、全てリンクがかかるようにもしたいのですが・・・。 欲張りを言って申し訳ありません。 宜しくお願いいたします。

  • VBAによる時間変換及び時間計算

     勤務表を作成しているのですが、書式変換及び残業計算できません。 (前提) Web勤怠システムの数値をコピー&貼り付けをしてエクセルへ転記しています。なので、書式が文字列になってしまいます。 A1==>19:40 ・・・書式は時刻 A2==>20:02 ・・・書式は文字列 Range("A3") = (TimeValue(Range("A2")) - Range("A1")) / 24 これでは、上手くできません。 他の方法(式)を、教えて下さい。 合わせて、6分未満は切り捨ての式を含めてくれると嬉しいです。

  • 表の書式をスキャンしてエクセル形式に変換

    空欄の表が送られてきたのですが、それをエクセル形式に変換して数値や文字を記入して返送したいのです。 表の書式もサイズもそのままにすべく、一旦スキャナーで画像として、それをエクセルの表形式に変換して表を完成させ、プリントアウト結果は送られてきたのと同じ書式やサイズに保って返送したいのですが、好い方法はないものでしょうか。

  • Wordで、罫線内に入力した数字に、自動的にカンマを入力する方法

    Word2000を使ってます。 罫線を使った表を作成していて、数字を打ち込む列があり、入力した数字を自動的に3桁ずつ,(カンマ)で区切るように設定したいのですが、Wordでは可能でしょうか? Excelでは書式設定みたいな感じでできたと思うんですが、どうなんでしょう。よろしくお願いします。

専門家に質問してみよう