重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは
初投稿です。

早速ですが、VBAまたは関数について質問させて頂きたいのですが・・・

一つのセルに複数の数字と文字列がセルのE1混ざっている場合,
(12345abc678cdef9ghijk)と入っている場合

にこの例で行くとセルのA1に12345セルB1に678セルC1に9というように数字で表示させたいのです

が、最初関数で
A1=VALUE(MID(E1,1,5))
B1=VALUE(MID(E1,9,3))
C1=VALUE(MID(E1,16,1))
と言う形で数字だけ抜き出していたのですが

これだと数字の桁数が違ってくる(※正し文字列の長さは一緒 数字だけが桁が違ってきます)
と表示されなくなってしまうため、
出来れば関数をいじらなくても表示されるようにしたいのです。
VBAもしくは関数でこの問題を解決出来る方がいらっしゃるなら
どうぞよろしくお願い致します。

長文失礼致しました。

| A | B | C | D | E |
------------------------------------------------
1 | 12345 | 678 | 9 | | 12345abc678cdef9ghijk |
2 | | | | | |

A 回答 (2件)

 "文字列 数値 分割 vba" でググると、似たような回答が得られるかと存じますが、面白そうですので、ユーザー定義関数 を書いてみました(ただし、Excel 2003 です)。



A1:
=VALUE(cutoutnum($E1,COLUMN(A1)))
と入力し、これを B1:C1 に オートフィル します。

[標準モジュール]
Function cutoutnum(myStr As String, myIdx As Double) As String
 Dim myStart As Long
 Dim myMidStr As String
 Dim myResStr As String
 For myStart = 1 To Len(myStr)
  myMidStr = Mid(myStr, myStart, 1)
  If Not IsNumeric(myMidStr) Then
   myMidStr = " "
  End If
  myResStr = myResStr & myMidStr
 Next
 cutoutnum = Application.WorksheetFunction.Trim(myResStr)
 cutoutnum = Split(" " & cutoutnum)(myIdx)
End Function

この回答への補足

すみません今入力してみたのですが、

12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして同じく
A1に12345と表示させたいのですが、

ご教授お願い出来ませんでしょうか?

お手数ではありますが、よろしくお願い致します。

補足日時:2011/04/23 02:15
    • good
    • 0
この回答へのお礼

早速意見ありがとうございます。

早速こちらのほうで検証してみます!

お礼日時:2011/04/23 01:05

>12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして・・・


 この場合は、
For myStart = 1 To Len(myStr)
の前に
myStr = Replace(myStr, ",", "")
を挿入してください。

 同様に小数点が付いているような場合もあろうかと存じますが、その場合は、
If Not IsNumeric(myMidStr) Then

If myMidStr <> "." And Not IsNumeric(myMidStr) Then
に置き換え、更に、
cutoutnum = Application.WorksheetFunction.Trim(myResStr)
の前に、下記2行を挿入してください。
myResStr = Replace(myResStr, " .", "")
myResStr = Replace(myResStr, ". ", "")

 以上により、「カンマ」及び「小数点」の2つの問題を両方とも回避する場合は、下記のようなことになります。

Function cutoutnum(myStr As String, myIdx As Double) As String
 Dim myStart As Long
 Dim myMidStr As String
 Dim myResStr As String
 myStr = Replace(myStr, ",", "")
 For myStart = 1 To Len(myStr)
  myMidStr = Mid(myStr, myStart, 1)
  If myMidStr <> "." And Not IsNumeric(myMidStr) Then
   myMidStr = " "
  End If
  myResStr = myResStr & myMidStr
 Next
 myResStr = Replace(myResStr, " .", "")
 myResStr = Replace(myResStr, ". ", "")
 cutoutnum = Application.WorksheetFunction.Trim(myResStr)
 cutoutnum = Split(" " & cutoutnum)(myIdx)
End Function
    • good
    • 0

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