梅雨ですね……。
こちらは雨降りまくりです。(^^ゞ
毎年恒例(滝汗)ですが、冠水したウチの近所が、ニュースで映ってたらしい……。
ところで、
久々にExcelのセルから値を読み取るコードを作っていて、
そのセルが指示している内容を解釈する必要があるのですが……。
(例: a,b,c,d 4個 : 1,2,3,4,5,6 で6個 等)
この文字の区分けが、個人個人で“フリーダムすぎる”なわけでして……。(^^ゞ
ある方は、「,」。別な方は「、」 ……それくらいなら、まだ、ガマン出来るんだわ。
けれども、思わず声に出して「えええっ!!」と言ってしまったのは、
「x1、x2(セル内改行)
y1、y2」
の4点指示
Split関数でも限界ですぅ……。
「複数パターンで、文字列分解して、指示されている点数を数えたいっっっ!!!」
という叫びにも似た思いで作ってみました。
幸いヒントを出してくださっている、優しいブログさんもありましたし。(Replaceしてから、まとめてSplitして)
関数 Splitarray (VBA版)
意外に使い勝手が良かったので、ついでに、VBScript用も
関数 Splitarray (VBScript版)
VBA用サンプルコード
testプロシージャを実行すると、分割前の文章が表示されます。
その後、分割後の文字列が、次々と表示されます。
サンプルでは「、」「。」「 」の3つのdelimiterで分割しています。
VBScript用サンプルコード
実行すると、分割前の文章が表示されます。
その後、分割後の文字列が、次々と表示されます。
サンプルでは「、」「。」「 」の3つのdelimiterで分割しています。
ではまた。
こちらは雨降りまくりです。(^^ゞ
毎年恒例(滝汗)ですが、冠水したウチの近所が、ニュースで映ってたらしい……。
ところで、
久々にExcelのセルから値を読み取るコードを作っていて、
そのセルが指示している内容を解釈する必要があるのですが……。
(例: a,b,c,d 4個 : 1,2,3,4,5,6 で6個 等)
この文字の区分けが、個人個人で“フリーダムすぎる”なわけでして……。(^^ゞ
ある方は、「,」。別な方は「、」 ……それくらいなら、まだ、ガマン出来るんだわ。
けれども、思わず声に出して「えええっ!!」と言ってしまったのは、
「x1、x2(セル内改行)
y1、y2」
の4点指示
Split関数でも限界ですぅ……。
「複数パターンで、文字列分解して、指示されている点数を数えたいっっっ!!!」
という叫びにも似た思いで作ってみました。
幸いヒントを出してくださっている、優しいブログさんもありましたし。(Replaceしてから、まとめてSplitして)
関数 Splitarray (VBA版)
Function Splitarray(ByVal expression As String, _
Optional ByVal delimiter As Variant = " ", _
Optional ByVal limit As Integer = -1, _
Optional ByVal compare As Integer = 0) As Variant
Dim exp_ As String, del_ As String, x As Variant
exp_ = expression
If IsArray(delimiter) Then
del_ = delimiter(0)
For Each x In delimiter
exp_ = Replace(exp_, x, del_)
Next x
Else
del_ = delimiter
End If
Splitarray = Split(exp_, del_, limit, compare)
End Function
使い方: 引数delimiter部分に Array関数で分割文字配列を作って、格納してください。意外に使い勝手が良かったので、ついでに、VBScript用も
関数 Splitarray (VBScript版)
Function Splitarray(ByVal expression, ByVal delimiter, ByVal limit, ByVal compare)
Dim exp_, del_ , x
exp_ = expression
If Len(limit) = 0 Then limit = -1
If Len(compare) = 0 Then compare = 0
If IsArray(delimiter) Then
del_ = delimiter(0)
For Each x In delimiter
exp_ = Replace(exp_, x, del_)
Next
Else
del_ = delimiter
End If
If IsEmpty(compare) Then compare = Null
Splitarray = Split(exp_, del_, limit, compare)
End Function
VBA用サンプルコード
testプロシージャを実行すると、分割前の文章が表示されます。
その後、分割後の文字列が、次々と表示されます。
サンプルでは「、」「。」「 」の3つのdelimiterで分割しています。
Sub test()
Dim str As Variant
Dim rtn As Variant
Dim x As Variant
str = "今日は、天気が、悪いです。風が、強いです。By Midorityo"
rtn = Splitarray(str, Array("、", " ", "。"))
MsgBox (str)
For Each x In rtn
MsgBox (x)
Next
End Sub
Function Splitarray(ByVal expression As String, _
Optional ByVal delimiter As Variant = " ", _
Optional ByVal limit As Integer = -1, _
Optional ByVal compare As Integer = 0) As Variant
Dim exp_ As String, del_ As String, x As Variant
exp_ = expression
If IsArray(delimiter) Then
del_ = delimiter(0)
For Each x In delimiter
exp_ = Replace(exp_, x, del_)
Next x
Else
del_ = delimiter
End If
Splitarray = Split(exp_, del_, limit, compare)
End Function
VBScript用サンプルコード
実行すると、分割前の文章が表示されます。
その後、分割後の文字列が、次々と表示されます。
サンプルでは「、」「。」「 」の3つのdelimiterで分割しています。
Sub test()
Dim str, rtn, x
str = "今日は、天気が、悪いです。風が、強いです。By Midorityo"
rtn = Splitarray(str, Array("、", " ", "。"),Empty,Empty)
MsgBox (str)
For Each x In rtn
MsgBox (x)
Next
End Sub
Function Splitarray(ByVal expression, ByVal delimiter, ByVal limit, ByVal compare)
Dim exp_, del_ , x
exp_ = expression
If Len(limit) = 0 Then limit = -1
If Len(compare) = 0 Then compare = 0
If IsArray(delimiter) Then
del_ = delimiter(0)
For Each x In delimiter
exp_ = Replace(exp_, x, del_)
Next
Else
del_ = delimiter
End If
If IsEmpty(compare) Then compare = Null
Splitarray = Split(exp_, del_, limit, compare)
End Function
call test
ではまた。