EXCEL 2010 VBAまたは関数で複数の数字と文字列を分割表示する方法

このQ&Aのポイント
  • EXCEL 2010 VBAまたは関数を使用して、セルに複数の数字と文字列が混ざっている場合に分割して表示する方法を教えてください。
  • VALUE関数とMID関数を組み合わせて、数字だけを抜き出して表示する方法を試しましたが、数字の桁数が違うと表示ができなくなります。そこで、関数を変更せずに表示する方法があれば知りたいです。
  • VBAまたは関数を使用して、セルのE1に入力された値から数字だけを抜き出して、A1に表示する方法、B1に表示する方法、C1に表示する方法を教えてください。
回答を見る
  • ベストアンサー

EXCEL 2010 VBAまたは関数について

こんにちは 初投稿です。 早速ですが、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 | | | | | |

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 "文字列 数値 分割 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

hirpon2038
質問者

お礼

早速意見ありがとうございます。 早速こちらのほうで検証してみます!

hirpon2038
質問者

補足

すみません今入力してみたのですが、 12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして同じく A1に12345と表示させたいのですが、 ご教授お願い出来ませんでしょうか? お手数ではありますが、よろしくお願い致します。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

>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

関連するQ&A

  • Excel VBA   %の入ったセル

    困りました、、、 VBAを使って A×30%+15000 これが入ったセルB2と たとえば250000が入ったセルB2を掛け算したいのですが (B2の数字は固定ではなくいろいろな数字が入ります) 文字列が入っていることにより うまくいきません 今は仕方なくMid関数で数字を抜き出して使っているのですが なにかよい方法はないでしょうか よろしくお願いします<m(__)m>

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

  • エクセル関数、またはVBA

    どなたか教えてください。 B列に半角数字か空セルがあります。 A列にB列の一定の行数(下記だと4行)の数字の和があります。 ---------- A B C 3 1     1     1         4 0     1     3     0   3 0           2     1   ---------- これを以下のようにA列の数字を対応する4行中のB列がゼロでも空セルでもない行に移動させたいのです。 ---------- A B C 3 1     1     1           0   4 1     3     0     0         3 2     1   ---------- 実は経理の帳簿の貸借なのですが、関数かマクロでできないでしょうか? 自分なりに考えてみたのですが、頭がパンクしました・・・ どうかお助け下さい。

  • エクセル2007関数

         A   B    C     D E 1   15  20  300 2   21  22  400 3   34  31  452 D1に、A列の数字のいずれかを入力すると、 E1に、A列のいずれかの数字を入力した行のC列の数字を表示させたい。 たとえば、 D1に、21と入れると、E1に400と D1に、34と入れると、E1に452と 表示させたいのですが、 関数は、ありますでしょうか?

  • Excelの関数またはVBAについて

    A1-B1の結果がC1に出るような表を作りました。C1の結果が自動でA1に表示され、ループするようにしたいのですが VBAになるのでしょうか?VBAは全くわからないので、できれば列を挿入するなどして関数で出来たら。。。と思ってます。すいませんが、ご教授ください。お願いします

  • エクセル MID関数

    MID関数で表示した文字列が、数字として認識されません。 MID関数で表示された数字が10とします。セルはA1とします。 その後、IF式で =if(A1<5,10,0) とすると、結果は0になるはずなのに、常に真の値、10になってしまいます。 原因は、MID関数で表示された数字が文字列として認識しているからと考えられますが、対象方法をご存知の方がおりましたら教えてください。 よろしくお願いします。

  • エクセルの関数

    A列に数字が数字が入っています  B列にもA列に近い数字が入っています たとえば A2に51 B2に50  の場合 C2には51と表示 A3に32 B3に34  の場合 C3には34と表示 したいのです。 ようするに 同じ横の数字で C列に関数を入れて A列とB列を比べて 大きな数字の方を入どんな関数をいれたらいいでしょうか?

  • Excel VBAで組んだ自作関数が認識されない

    お世話になります。お教えください。 Excel2000や2003において、自作関数を作成。 (B(C3,D2,E2,F2,F3,$E$6,$E$7,$I$5)-A(C4,D4,E4,F4,$E$6,$E$7,$I$5)のように、セルの数値を読み込み、ある計算を2回(A関数とB関数)させ 最後に差を求める。) 計算させると値が出るのですが、VBAを盛り込んだExcelファイルを保存させるとエラーを表示します。("=VALUE"?などと出る) 自作関数のセル位置でEnterを押すと再認識して値が出るのですが・・・。 対処法をご存知の方がいらっしゃったらお教えください。 お願いします。

  • Excelの関数について

    Excelの関数について 今表を作っていて 1日数回データを取って それを1ヶ月ぐらい続ける予定で その結果をExcelの表に入力したいと思っています。 A列に現在値 B列に増加分 C列にA+Bの値を入れたいと思っています。 なので、C列には、C1には=SUM(A1,B1)として セルの右下にポインタを合わせて十字で下まで引っ張って関数をコピーしています。 で、そうするとC列に0が表示されてしまい それはなんとか、ツール→オプション→表示→ゼロ値のチェックを外して解決したのですが C列の合計値は次の行のAのセルに表示したくて 例えば C3の数値はそのままA4に C7の数値はそのままA8にといった感じで で、A2のセルに=C1とかA5のセルに=C4とかしたのですが いちいち関数を埋め込むのは面倒くさいので 下のほうまで関数をコピーしたところ 関数が埋め込まれているので A列とB列にしたの方まで同じ数字が表示されています。 これって消すことはできないのでしょうか? 現在は 最初のA1セルだけに数値を入れたのですが関数を埋め込んだことにより A列とB列すべてにA1セルの数値が表示されています。 まだデータを取っていないのでB列は空白です。 ただ、できれば、下の方に数値が表示されないようにしたいんです。 言葉で説明すると A列とB列に数値が入力されない限り、C列の合計値は表示されない設定にできれば 私の言っているような状況になると思うのですが、そういう事はできないのでしょうか… 教えてください。

  • エクセル関数:文字の抜き出し方について

    どなたかお力添えください。 セルA1に「1234:567:89abc:de」があります。ここからセルB1に「1234」だけを、セルC1に「567」だけをセルD1に「89abc」だけをセルE1に「de」だけを抜き出したいと思っています。「FIND」関数では1番左の「:」しかカウントしてくれないため、苦労しています。 やはり「LEFT(FIND)」で左から「1234」を抜き出し、残り「567:89abc:de」を別の列のセル(たとえばセルAA1)に表示し、また「LEFT(FIND)」で左から「567」を抜き出し、・・・を繰り返すしかないでしょうか。 セルC1・D1・E1とも、1式でセルA1から直接抜き出す方法はないでしょうか。 ご存じの方、お力添えください!!

専門家に質問してみよう