【EXCEL VBA 文字列の抜き出し】
文字列の抜き出しをVBAで行いたいのですが行き詰ってしまいました。
処理としては、下記のようにA1セルに値が入っており
1) 12345678 OOOOOOOO apple and 〜
前から2つ目の空欄以降から3つ目の空欄以降までの文字を抜き出したいです
OOOOOOOOが8文字で固定であれば、Mid関数を使いコードが書けたのですが、抜き出したい文字が8文字の時もあれば10文字の時もあり、どちらにも対応できるようにしようと思うと、どのように関数を組み合わせてVBAを書けばいいのか全くわかりません。
大変お手数ですがどなたかお助けいただけませんでしょうか?
No.4ベストアンサー
- 回答日時:
No.2 に対する回答が無いので
☆ A列に上書きする場合
--------------------------------------------------------------------------------
Sub Sample1()
Dim 行 As Long
Dim 作業 As Variant
For 行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
作業 = Split(Cells(行, 1).Value, " ")
If UBound(作業) >= 2 Then
Cells(行, 1).Value = 作業(1)
End If
Next
End Sub
--------------------------------------------------------------------------------
☆ B列に結果を書き出す場合
--------------------------------------------------------------------------------
Sub Sample2()
Dim 行 As Long
Dim 作業 As Variant
For 行 = 1 To Cells(Rows.Count, 1).End(xlUp).Row
作業 = Split(Cells(行, 1).Value, " ")
If UBound(作業) >= 2 Then
Cells(行, 2).Value = 作業(1)
End If
Next
End Sub
--------------------------------------------------------------------------------
☆ No.1 の修正版(スペースが2つ未満で「#VALUE!」にならないように修正した物)
--------------------------------------------------------------------------------
Function IntermediateString(文字列 As String)
Dim Tmp As Variant
Tmp = Split(文字列, " ")
If UBound(Tmp) >= 2 Then
IntermediateString = Tmp(1)
Else
IntermediateString = ""
End If
End Function
--------------------------------------------------------------------------------
No.3
- 回答日時:
こんにちは。
数式の場合は、スペースが2つあると正しく出ませんから、一旦置換しないといけません。
これは、データに信頼できる場合です。
=MID(A1,FIND("^",SUBSTITUTE(A1," ","^",2))+1,FIND("^",SUBSTITUTE(A1," ","^",3))-FIND("^",SUBSTITUTE(A1," ","^",2)))
上記は、エラー処理されていません。
'//標準モジュール
Sub Main() '実行するプログラム
Dim c As Range
For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp)) '最後尾を探す
If c.Value <> "" Then
c.Offset(, 2).Value = MidWord(c.Value, 2) 'オフセット- Aから右に2-C列
End If
Next
End Sub
Function MidWord(ByVal myTxt As String, ini As Long)
'引数1(myTxt):文字列,引数2(ini):空白の数
Dim i As Long, j As Long, k As Long
Dim m As Long, n As Long
If Len(myTxt) = 0 Then Exit Function
If InStr(1, myTxt, Space(1), vbTextCompare) = 0 Then Exit Function
Do
myTxt = Replace(myTxt, Space(2), Space(1), , , vbTextCompare)
Loop Until InStr(1, myTxt, Space(2), vbTextCompare) = 0
i = 1
Do
j = InStr(i, myTxt, Space(1), vbTextCompare)
If k = ini - 1 Then m = j + 1
If k = ini Then n = j
i = j + 1: k = k + 1
Loop Until j = 0 Or k = ini + 1
If n = 0 Then n = Len(myTxt)
MidWord = Mid(myTxt, m, n - m + 1)
End Function
No.2
- 回答日時:
ユーザー定義関数にした理由の1つですが、結果はどこに書き出すのでしょうか?
① 上書きしてしまう(スペースが2つ未満の時はどうするのですか?)
② 隣の列などに結果を書き出す。(どの列にするのか指示してください)
③ その他(具体的に説明してください)
No.1
- 回答日時:
ユーザー定義関数を作ってみました。
以下を標準モジュールに書き込んでください。--------------------------------------------------------------------------------
Function IntermediateString(文字列 As String)
Dim Tmp As Variant
Tmp = Split(文字列, " ")
IntermediateString = Tmp(1)
End Function
--------------------------------------------------------------------------------
使い方は普通の関数と同じです。
たとえば A1セルに「12345678 OOOOOOOO apple and 〜」とあったら、取り出したいセルに「=IntermediateString(A1)」と式を入れてください。
ご回答ありがとうございます。
データがA1セルにのみあればよかったのですが、A1〜最終行(毎回変化)まで続きます。その場合もVBAの標準モジュール内にご教授頂いた関数を入力すれば良いのでしょうか?
知識がなく質問してばかりですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- PHP カラーミーショップのSmartyでの文字列抜き出し 2 2022/05/06 11:51
- Visual Basic(VBA) 列を指定して値を左から5文字にそろえる 1 2022/06/10 20:28
- Visual Basic(VBA) Excel VBA 書式変更で困ってます。 オートフィルターの日付フィルターを用いて データの絞り込 2 2022/07/26 22:16
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Excelで指数表現しないようにす...
-
VBの「As String * 128」とは?
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列をtxtファイル...
-
ORCLEでの小数の表示方法の変更...
-
Left関数とRight関数を合わせた...
-
Pro c/c++ でホスト変数の後に....
-
VBscriptからバッチに変数を渡...
-
Excelはなんで先頭の0を消すん...
-
16進数を10進数に簡単に変換す...
-
【COBOL】文字列から数値項目に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報