
こんにちは
初投稿です。
早速ですが、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 | | | | | |
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
この回答への補足
すみません今入力してみたのですが、
12,345abc678cdef9ghijkとカンマがついてる場合カンマは飛び抜かして同じく
A1に12345と表示させたいのですが、
ご教授お願い出来ませんでしょうか?
お手数ではありますが、よろしくお願い致します。
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
任意フォルダから画像をすべて...
-
エクセルvba:自己セルの情報取...
-
13箇所の株価をエクセルにRSSで...
-
Excel VBAで、 ヘッダーへのセ...
-
i=cells(Rows.Count, 1)とi=cel...
-
VBA実行後に元のセルに戻りたい
-
Excel VBA マクロ 画像の貼り付け
-
特定行の色を変えたい(FlexGrid)
-
エクセルvbaで、別シートの最下...
-
EXCELのVBA-フィルタ抽出後の...
-
Excelで指定した日付から過去の...
-
ExcelVBA データを消去すると罫...
-
エクセルVBAで結合セルの真ん中...
-
DataGridViewの各セル幅を自由...
-
Application.Matchで特定行の検索
-
エクセルVBAでコピーして順...
-
特定のセルが空白だったら、そ...
-
vb.netによるEXCEL値取得
-
エクセルVBAで、シート上で結合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
i=cells(Rows.Count, 1)とi=cel...
-
エクセルvbaで、別シートの最下...
-
任意フォルダから画像をすべて...
-
VBA実行後に元のセルに戻りたい
-
Application.Matchで特定行の検索
-
Excel vbaで特定の文字以外が入...
-
【Excel VBA】指定行以降をクリ...
-
”戻り値”が変化したときに、マ...
-
【Excel】指定したセルの名前で...
-
VBAでセル同士を比較して色付け
-
Excelのプルダウンで2列分の情...
-
VBAでセルをクリックする回...
-
Excel VBAで、 ヘッダーへのセ...
-
DataGridViewのセル編集完了後...
-
VBA初心者です。結合セルを保持...
-
【VBA】シート上の複数のチェッ...
-
ExcelのVBAで数字と文字列をマ...
おすすめ情報