目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
72 / 118 ツリー ←次へ | 前へ→

【152】97で2000以降に追加された関数を使う Red 06/9/9(土) 2:55 Excel[未読]
【153】Split関数 Red 06/9/9(土) 2:58 Excel[未読]
【154】InStrRev関数 Red 06/9/9(土) 3:00 Excel[未読]

【152】97で2000以降に追加された関数を使う
Excel  Red  - 06/9/9(土) 2:55 -

引用なし
パスワード
   Split関数やInStrRev関数など、
「97にはない便利な関数と同等の処理が可能な、97で使える関数を組み合わせて
作った自作関数」
を考えてみませんか?

あらかじめこういうものを作っておけば、「97の人は目安箱を参照」とすることで、
質問者のバージョンを気にする必要もなくなりますし、考え方(アルゴリズム)や
コーディングのテクニックの勉強にもなると思い、議題として取り上げてみました。

ExcelだけじゃなくAccessでも使えるかな?

【153】Split関数
Excel  Red  - 06/9/9(土) 2:58 -

引用なし
パスワード
   '=========================================================================================
'
' Split関数(各要素ごとに区切られた文字列から1次元配列を作成し、返します。)
'
'-----------------------------------------------------------------------------------------
'指定項目  説明
'expression 必ず指定します。文字列と区切り文字を含んだ文字列式を指定します。
'      引数 expression が長さ 0 の文字列 ("") である場合、Split関数は、要素も
'      データもない空の配列を返します。
'delimiter  省略可能です。文字列の区切りを識別する文字を指定します。
'      引数 delimiter を省略すると、区切り文字にスペース (" ") が使用されます。
'      引数 delimiter が長さ 0 の文字列 ("") である場合は、引数 expression 全体の
'      文字列を含む単一の要素の配列を返します。
'limit    省略可能です。返す配列の要素数を指定します。-1 を指定すると、すべての文字列を
'      含んだ配列を返します。
'compare   省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を
'      指定します。設定する値については、次の「設定値」を参照してください。
'
'引数 compare の設定値は次のとおりです。
'
'定数 値 説明
'VbUseCompareOption  -1  Option Compare ステートメントの設定を使用して比較を行います。
'vbBinaryCompare    0  バイナリ モードで比較を行います。
'vbTextCompare     1  テキスト モードで比較を行います。
'=========================================================================================
Public Function Split _
    (Expression As String, Optional Delimiter, Optional ByVal Limit As Long = -1, _
    Optional Compare As VbCompareMethod = vbBinaryCompare)
    
'-- 変数の設定 --
Dim Result() As String
Dim Pos As Long
Dim Start As Long
Dim DelimStr As String

'-- 戻り値初期化 --
  Split = Array() '空の配列を生成します。
  
'-- 引数確認 --
  If Expression = "" Then Exit Function
  If Limit = 0 Then Exit Function
  
'-- 初期設定 --
  DelimStr = IIf(IsMissing(Delimiter), " ", Delimiter)
  ReDim Result(0)
  Start = 1
  Pos = IIf(DelimStr = "", 0, InStr(Start, Expression, DelimStr, Compare))
  
'-- 配列要素の設定 --
  Do Until Pos = 0
    If UBound(Result) = Limit - 1 Then Exit Do
    Result(UBound(Result)) = Mid$(Expression, Start, Pos - Start)
    ReDim Preserve Result(UBound(Result) + 1)
    Start = Pos + Len(DelimStr)
    Pos = InStr(Start, Expression, DelimStr, Compare)
  Loop
  
'-- 配列最終要素の設定 --
  Result(UBound(Result)) = Mid$(Expression, Start)

  Split = Result
  Erase Result
  
End Function

【154】InStrRev関数
Excel  Red  - 06/9/9(土) 3:00 -

引用なし
パスワード
   '=========================================================================================
'
' InStrRev関数(ある文字列 (string1) の中から指定された文字列 (string2) を最後の文字位置
'        から検索を開始し、最初に見つかった文字位置 (先頭からその位置までの文字数)
'        を返す文字列処理関数です。)
'
'-----------------------------------------------------------------------------------------
'指定項目  説明
'stringcheck 必ず指定します。検索先の文字列式を指定します。
'stringmatch 必ず指定します。検索する文字列式を指定します。
'start    省略可能です。各検索の開始位置を設定する数式を指定します。
'      引数 start を省略すると -1 が使用され、最後の文字位置から検索を開始します。
'      引数 start に Null 値が含まれると、エラーになります。
'compare   省略可能です。文字列式を評価するときに使用する文字列比較のモードを表す数値を
'      指定します。引数 compare を省略すると、バイナリ モードで比較が行われます。
'      設定する値については、次の「設定値」を参照してください。
'
'引数 compare の設定値は次のとおりです。
'
'定数 値 説明
'VbUseCompareOption  -1  Option Compare ステートメントの設定を使用して比較を行います。
'vbBinaryCompare    0  バイナリ モードで比較を行います。
'vbTextCompare     1  テキスト モードで比較を行います。
'=========================================================================================
Public Function InStrRev _
    (StringCheck As String, StringMatch As String, Optional Start As Long = -1, _
    Optional Compare As VbCompareMethod = vbBinaryCompare) As Long
    
Dim Pos As Long
Dim StrChk As String

'-- 戻り値初期化 --
  InStrRev = 0
  StrChk = Left(StringCheck, IIf(Start = -1, Len(StringCheck), Start))
  
'-- 引数確認 --
  Select Case True
  Case Start > Len(StrChk)
    Exit Function
  Case StringCheck = ""
    Exit Function
  Case StringMatch = ""
    InStrRev = Len(StrChk): Exit Function
  End Select

'-- 戻り値の文字位置取得 --
  Do
    Pos = InStr(InStrRev + 1, StrChk, StringMatch, Compare)
    If Pos > 0 Then InStrRev = Pos
  Loop Until Pos = 0

End Function

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
72 / 118 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free