はじめまして。みやっちです。
MID関数とMID$関数の違いがわかりません。
どちらを使っても同じ処理をするような気がするんですが・・・
↓サンプルソースです。
'***************************************************************
'* 関数名:文字列置換(ReplaceStr)
'* 引 数:置換対象文字列(ByVal w_objstr As String)
'* 置換前文字列(ByVal w_findstr As String)
'* 置換後文字列(ByVal w_repstr As String)
'* 戻り値:置換後文字列(String)
'* 機 能:置換対象文字列の置換前文字列を置換後文字列に置換する
'***************************************************************
Public Function ReplaceStr(ByVal w_objstr As String, ByVal w_findstr _
As String, ByVal w_repstr As String) As String
Dim w_ins As Long '検索位置
' 戻り値に置換対象文字列をセットする
ReplaceStr = w_objstr
' 検索位置を初期化する
w_ins = 1
' ループを開始する
Do
' 置換前文字列を検索する
w_ins = InStr(w_ins, ReplaceStr, w_findstr)
' 置換前文字列が見つからない場合
If w_ins = 0 Then Exit Do
' 置換前文字列を置換後文字列に置換する
ReplaceStr = Mid(ReplaceStr, 1, w_ins - 1) & w_repstr & Mid( _
ReplaceStr, w_ins + Len(w_findstr), Len(ReplaceStr) - w_ins + _
Len(w_findstr) - 1)
' 次の検索位置を設定する
w_ins = w_ins + Len(w_repstr)
Loop
End Function
↑このソースでMID$関数を使っても同じように動きます。
違いがわかりません。
分かる方、教えて下さい。
よろしくお願いします。
違いは,ずばり帰ってくる形式が違うんです.
MIDではバリアントで、MID$では文字列型(String)で帰ってきます.
もちろんMID$の方がメモリを食わないんで,
でかいアプリ作成の時は,MID$を使ってます.
ヘルプにちゃんと載っていたと思います.
「関数からの文字列の取得」だったかな?
ありがとうございます。
ヘルプにはこれ↓しか書いていなかったのでよくわかりませんでした。
型宣言文字などを使って、明示的にデータ型を指定しなかったときは、
変数のデータ型は、既定のバリアント型 (Variant) になります。
ただし、Deftype ステートメントの対象となっているときはその既定のデータ型になります。
MID$を使うと文字列型(String)になるんですね。
ついでにメモリを食わないんですか勉強になりました。
ところでDeftype ステートメントの対象になっているというのは
AS 〜
で宣言されている関数や変数という解釈でいいんでしょうか?
よろしくお願いします。
>ところでDeftype ステートメントの対象になっているというのは
> AS 〜
>で宣言されている関数や変数という解釈でいいんでしょうか?
自分でテストしてみてはいかがですか?
Option Explicit
DefInt A
Private Function aa1()
End Function
Private Function aa2#()
End Function
Private Function aa3() As Long
End Function
Private Function bb1()
End Function
Private Sub Command1_Click()
Dim a1
Dim a2#
Dim a3 As Long
Dim b1
Dim strMsg As String
strMsg = "a1 = " & VarType(a1) & vbCrLf
strMsg = strMsg & "a2 = " & VarType(a2) & vbCrLf
strMsg = strMsg & "a3 = " & VarType(a3) & vbCrLf
strMsg = strMsg & "b1 = " & VarType(b1) & vbCrLf
strMsg = strMsg & "aa1 = " & VarType(aa1) & vbCrLf
strMsg = strMsg & "aa2 = " & VarType(aa2) & vbCrLf
strMsg = strMsg & "aa3 = " & VarType(aa3) & vbCrLf
strMsg = strMsg & "bb1 = " & VarType(bb1)
MsgBox strMsg
End Sub
Sayさんわかりやすいソースありがとうございます。
早速テストしてみました。
>ところでDeftype ステートメントの対象になっているというのは
> AS 〜
>で宣言されている関数や変数という解釈でいいんでしょうか?
私の考え方は違っていましたね。
Def〜と言うのがいくつかあるなんて知りませんでした。
かなり勉強になりました。
でも、これを使うメリットってあるんでしょうか?
普通に関数、変数の型宣言をしておけば良いような気がするんですが?
分かる方教えて下さい。
> でも、これを使うメリットってあるんでしょうか?
基本的にないでしょうね。
Integer型を多用している場合とかに,Dim foo As IntegerのAs Integerを省略できる程度で……。
基本的にはN88-Basicとか,その頃からの名残だと思います。
#DEF FNは消えたのにね。
ありがとうございます。
メリットは無いんですね。
わかりました。
ツイート | ![]() |