• ベストアンサー

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

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

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

  • ベストアンサー
  • 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/17069)
回答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