プロが教えるわが家の防犯対策術!

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

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

A 回答 (5件)

こんにちは。



たぶん、何かの製作の途中だと思います。ですが、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/10 21:03

VBA使わなくても関数でよいのではないでしょうか?


セル1をA1として

B1に
=LEN(A1)

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

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

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

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

こっちの方がいいかな?



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

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



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

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

関数で表示された列をコピーして、形式を選択して貼り付けで「値」を選択して貼り付けすれば数値に変換できます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/10 20:58

関数ではだめですか?



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

VBAの場合も考え方は同じです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/10 20:56

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