vbaで、1つの変数(以下では変数Original)に
B社、CC社、DDD社、EE社、FABC社
という文字列*が入っている時、"、"を使って、各文字を、以下のように分割したいです。
- 字数は不規則、文字列は全て"、"で区切られていること以外規則性はなし、各文字列は上記では5つですが、実際はいくつ入っているかわかりません。
A1セル:B社
A2セル:CC社
A3セル:DDD社
A4セル:EE社
A5セル:FABC社
◆現状
"、"の数をカウントし、"、"がcnt個あることがわかり、会社数はcnt+1個あるとわかりました。
◆不明点
分からないのは、Mid関数を使い、i番目の会社の文字列を特定し、抜き出す部分です。
特に、i番目の会社の文字列の開始位置をどのように指定し、プログラムを組むか、というところです。
具体的には、
1番目の会社は1,
2番目の会社は=InStr(Original,Kigou)+1
となるので、
i番目の会社は、
i番目の会社は、
=InStr(InStr(InStr...Instr(Original,Kigou)+1),Original,Kigou)+1),...,Original,Kigou)+1)
この式を自動的に作成するため、
2番目の会社の式の前に、
文字列"InStr("を(i-1)回足し、
2番目の会社の式の後に",Original,Kigou)+1)をi-2回足せばi番目の式になり、それが計算できれば良いと思っているのですが、生成した文字がStringのせいか、何のせいか、計算されません。
急いでいて間違えているかもしれません。
ご教示下さい。
どうぞよろしくお願い致します。
Sub Macro1()
Dim Original As String, Kigou As String
Original = "B社、CC社、DDD社、EE社、FABC社"
Kigou = "、"
Dim FirstCompanyName As String, ithCompanyName As String, LastCompanyName As String
FirstCompanyName = Left(Original, InStr(Original, Kigou) - 1)
'i番目の会社の名前を順番に取得
'Mid関数=Mid(検索対象文字列, 抜き出す文字列の開始位置(数字) [,抜き出す文
字列の長さ(数字)])
'抜き出す文字列の開始位置(数字):i番目の会社の場合、i-1番目の"、"の次の文
字の序数
'抜き出す文字列の長さ(数字):i番目の会社の場合、「i+1番目の"、"の前の文字
の序数」-「i番目の会社の場合、i-1番目の"、"の次の文字の序数」
Dim i As Variant 'i番目の会社
Set i = 0
Dim N As Long, cnt As Long
N = InStr(1, Original, Kigou)
Do While N > 0
cnt = cnt + 1
N = InStr(N + 1, Original, Kigou)
Loop
Dim CompanyNum As Long CompanyNum = cnt + 1
'抜き出す文字列の開始位置(数字)=iStart
Dim iStart As Variant
'(InStrを(i-1)回生成する変数xを作成
x = WorksheetFunction.Rept("InSTr(", i - 1)
y = WorksheetFunction.Rept(",Original,Kigou)+1", i - 2)
iStart = Left(InStr(-1,Original,Kigou)
For i = 0 To CompanyNum
ithCompanyName = Mid(Original, x +(InStr(Original, Kigou) + 1), Len(InStr(i
+1,Original,Kigou))
LastCompanyName = Mid(Original, InStrRev(Original, Kigou) + 1)
End Sub

回答3件
あなたの回答
tips
プレビュー