こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルのVBAで教えたください。セルの文字数が特定の文字数の時のみ下2桁を書き出す方法。

VBA初心者です。仕事での作業で困っています。
大量の数値データが1列にあります。それぞれの数値の文字数を関数で隣のセルに表示しています。その文字数が例えば4文字の時だけ下2桁の数字をさらに隣のセルに書き出したいのですが、どのような式を作ればよいのでしょうか。

こんなイメージです。
セル1  セル2  セル3
1025   4    25
124556  6
12     2
1254   4    54
6587   4    87
よろしくお願いいたします。m(_ _)m

投稿日時 - 2008-08-10 15:11:40

QNo.4241473

困ってます

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

こんにちは。

たぶん、何かの製作の途中だと思います。ですが、VBAで厳密には、「数値の文字数」はないのですが、VB系は、そこらへんが、あいまいなんですね。

曖昧なままで作ると、このようになります。
(小数点を含んだものは排除されます)

Sub Test1()
  Dim c As Variant
  For Each c In Range("A1", Range("A65536").End(xlUp))
    If IsNumeric(c.Value) Then
      If Abs(c.Value) Like "####" Then
        c.Offset(, 1).Value = Right(c.Value, 2)
      End If
    End If
  Next
End Sub


もし、プログラムらしい書き方を望むようでしたら、以下のようにしたらよいと思います。
1,2 とも、負の符号が必要な場合は、Sgn 関数でとってください。こちらは、小数点以下を取り去った数値の下2桁を出します。

Sub Test2()
  Dim c As Variant
  For Each c In Range("A1", Range("A65536").End(xlUp))
    If VarType(c) = vbDouble Then
      If Int(Log(Abs(c.Value)) / Log(10#)) = 3 Then
        c.Offset(, 1).Value = Fix(Abs(c.Value)) - Int(Abs(c.Value) / 100) * 100
      End If
    End If
  Next
End Sub

投稿日時 - 2008-08-10 17:55:31

お礼

お察しの通りデータ加工プログラムを考案中です。VBA初心者のためじっくり勉強させていただきます。ご回答ありがとうございました。

投稿日時 - 2008-08-10 21:03:44

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

VBA使わなくても関数でよいのではないでしょうか?
セル1をA1として

B1に
=LEN(A1)

C1に
=IF(B1=4,RIGHT(A1,2))

これで、B1、C1を下までコピー

また、セル2を省いてB1に
=IF(LEN(A1)=4,RIGHT(A1,2))

で一回で求めることも可能です。

投稿日時 - 2008-08-10 15:28:43

ANo.3

こっちの方がいいかな?

=IF(LEN(A1)=4,TEXT(MOD(A1,100),"00"),"")

投稿日時 - 2008-08-10 15:25:56

ANo.2

別にVBAで行う内容でも無いと思いますが・・・。

A1:1234
B1:=LEN(A1)
C1:=IF(B1=4,RIGHT(A1,2),"")

B1とC1の関数をあわせて
=IF(LEN(A1)=4,RIGHT(A1,2),"")

関数で表示された列をコピーして、形式を選択して貼り付けで「値」を選択して貼り付けすれば数値に変換できます。

投稿日時 - 2008-08-10 15:24:33

お礼

恥ずかしながらRIGHT関数というもの知りませんでした。ありがとうございました。参考にさせていただきます。

投稿日時 - 2008-08-10 20:58:02

ANo.1

関数ではだめですか?

=IF(LEN(A1)=4,MOD(A1,100),"")

VBAの場合も考え方は同じです。

投稿日時 - 2008-08-10 15:22:45

お礼

ご回答ありがとうございました。早速試してみます。

投稿日時 - 2008-08-10 20:56:27

あなたにオススメの質問