個人事業主の方必見!確定申告のお悩み解決

A列,C列,E列の数値の入ったセルの末尾に、「%」をつける
VBAを教えていただけないでしょうか

A 回答 (7件)

#5、6、cjです。

連投すみません。

何故か【 A列,C列,E列の数値の入ったセル 】
が整数値、という思い込みで書いてしまっていました。
もし、そもそも整数値で良かったなら、
#5、6で答えていますから、以下、読まなくていいです。

追加で2例です。

整数、小数点数、が混ざっているなら、
これまでのやり方に修正が必要です。
以下の方法には注意点があります。
数値として小数点数に"%"を付加したものを返す場合、
数式バーに表示される実際の値は正しく
 6.5 → 6.5%
 13.57 → 13.57%
 0.519 → 0.519%
となるのですが、実行後のセルの表示は、そのままでは
 6.5 → 6.50%
 13.57 → 13.57%
 0.519 → 0.52%
のように小数点数なら、余分な0を挟んだり、小数点以下2桁で丸めたり
表示されてしまいます。
無論、
セルの書式設定・表示形式で、パーセンテージ、小数点以下の桁数
を指定してやればいいのですが、
実行後の表示については【 の末尾に、「%」をつける 】
ことが完全には出来ません。
整数値、なら単純に"%"を末尾に付加するように問題なくできるので
前出と同じ結果になります。

一応、文字列値で返すようにした場合だけは
忠実に【 の末尾に、「%」をつける 】ように、値も表示も整います。

どう運用するか、考えてみてください。

' ' ―――――――――――――――――――――――――――――――――――――――

Sub Re8198414()
  Dim rTarget As Range
  Dim rArea As Range

  On Error GoTo ErrOut_
' ' 【 A列,C列,E列の数値の入ったセル 】取得
  Set rTarget = Range("A:A,C:C,E:E").SpecialCells(xlCellTypeConstants, xlNumbers)
  On Error GoTo 0

' ' A列,C列,E列の数値の入ったセル【 の末尾に、「%」をつける 】
  For Each rArea In rTarget.Areas
    rArea.Value = Application.Text(rArea.Value, "General""%""") ' ★
  Next

  Exit Sub
ErrOut_:
  MsgBox "数値セルがない!"
End Sub

' ' ―――――――――――――――――――――――――――――――――――――――

文字列値として返したい場合、は、' ★の行を以下に差し替え
    rArea.Value = Application.Text(rArea.Value, "'General""%""")
です。

' ' ―――――――――――――――――――――――――――――――――――――――

' ' ―――――――――――――――――――――――――――――――――――――――

考え直して、ひとつずつマメにやる方法を考えてみたら、昔書いたのを思い出しました。
内容的には基本通りと呼べるでしょう。
以下は、不揃いの小数点数であっても、
数式バーに表示される実際の値と、セルの表示がすべて一致します。

' ' ―――――――――――――――――――――――――――――――――――――――

Sub Re8198414r()
  Dim vV As Variant
  Dim rTarget As Range
  Dim r As Range
  Dim sFormat As String
  Dim nDPPos As Long

  On Error GoTo ErrOut_
' ' 【 A列,C列,E列の数値の入ったセル 】取得
  Set rTarget = Range("A:A,C:C,E:E").SpecialCells(xlCellTypeConstants, xlNumbers)
  On Error GoTo 0

' ' A列,C列,E列の数値の入ったセル【 の末尾に、「%」をつける 】
' ' 元の値に合わせて表示上の小数点以下の桁数を指定する
  For Each r In rTarget
    vV = r.Value
' ' 小数点の位置
    nDPPos = InStr(vV, ".")
    If nDPPos Then
' ' 小数点数ならば・・・ "0.0%" | "0.00%" | "0.000%" | ・・・
      sFormat = "0." & String(Len(vV) - nDPPos, "0") & "%"
    Else
' ' 整数ならば・・・ "0%"
      sFormat = "0%"
    End If
' ' 値
    r.Value = vV & "%"
'    r.Value = Format(vV / 100, sFormat)
' ' 表示
    r.NumberFormat = sFormat
  Next

  Exit Sub
ErrOut_:
  MsgBox "数値セルがない!"
End Sub

' ' ―――――――――――――――――――――――――――――――――――――――


長すみません、以上です。
    • good
    • 0
この回答へのお礼

おお!!できました!コードをしっかり熟読して読めるようにがんばりたいです。

お礼日時:2013/07/31 09:40

#5、cjです。


念の為、補足しておきます。

【 A列,C列,E列の数値の入ったセル 】
は数式の結果として数値が返されたセルではなく、定数(直接値を設定した)セル、
という前提で#5を書きました。
ひょっとして、
数式の戻り値を、定数に直しつつ、【 の末尾に、「%」をつける 】
ということだった場合は、
 xlCellTypeConstants

 xlCellTypeFormulas
に差し換えてください。

また、
【 A列,C列,E列の数値の入ったセル 】
について、
「A列,C列,E列には空白セル(データが飛ぶこと)は絶対にない」
ならば、
SpecialCellsメソッドを使う必要はなく、
ひと手間省いて書けそうですが、
記述の文字数は大差なく、より堅実な方法を選んでいることになります。
「A列,C列,E列の【うち】数値の入ったセル」という解釈です。
数値セルの塊り(Area)毎に纏めて置換することで処理を速めていますが、
間に空白セルが混ざった状態で置換した値をセルに返そうとすると
空白の筈なのに「0%」と返してしまうので、
先に数値セルだけを切り分けておく必要があります。

以上、補足と補足説明でした、
    • good
    • 0

こんにちは。

お邪魔します。

質問文の言葉通りに(私の解釈で)書いてみました。
元の値が
 37
ならば
実行後のセルの表示は
 37%
数式バーに表示される実際の値、も
 37%
です。

' ' ――――――――――――――――――――――――――――――――――――――――

Sub Re8198414()
  Dim rTarget As Range
  Dim rArea As Range

  On Error GoTo ErrOut_
' ' 【 A列,C列,E列の数値の入ったセル 】取得
  Set rTarget = Range("A:A,C:C,E:E").SpecialCells(xlCellTypeConstants, xlNumbers)
  On Error GoTo 0

' ' A列,C列,E列の数値の入ったセル【 の末尾に、「%」をつける 】
  For Each rArea In rTarget.Areas
    rArea.Value = Application.Text(rArea.Value, "0""%""") ' ★
  Next

  Exit Sub
ErrOut_:
  MsgBox "数値セルがない!"
End Sub

' ' ――――――――――――――――――――――――――――――――――――――――

もしかして、文字列値として返したい場合、は、' ★の行を以下に差し替え
    rArea.Value = Application.Text(rArea.Value, "'0""%""")
です。
    • good
    • 0

>%書式ではなく、セルの値自体に、「%」付加したいのです。

。。

はて? そのように回答済みですが、いったいどういう事でしょうか?説明願います。
    • good
    • 0

>数値の入ったセルの末尾に、「%」をつける



%を付けるのと%書式にするのでは違うので,何をしたいのか間違えないように気をつけます。

sub macro1()
range("A:A,C:C,E:E").numberformatlocal = "G/標準""%"""
end sub

この回答への補足

%書式ではなく、セルの値自体に、「%」付加したいのです。。。

補足日時:2013/07/30 17:40
    • good
    • 0

マクロの記録をすれば次のようになりますね。



Sub Macro1()

Range("A:A,C:C,E:E").Select
Range("E1").Activate
Selection.NumberFormatLocal = "0%"
Range("F1").Select
End Sub

この回答への補足

もとの数が変わってしまいました・・・

50 → 5000%

補足日時:2013/07/30 18:04
    • good
    • 0

A、C、E列のセルの書式設定を


#,##0"%"
とすればいいのでは。

因みにVBAなら
Range("A:A,C:C,E:E").NumberFormatLocal = "#,##0""%"""
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング