【excel VBA】

ユーザー定義関数の見本をつくってください。

convert(”あ1いうえお”)
結果
あ 1 い う え お

仕様:一文字毎に半角スペースを入れる
文字の中に全角数字があれば半角にする

渡ってくるものは文字列のみです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/07/16 21:27:24
  • 終了:--

回答(2件)

id:tko777 No.1

tko777回答回数38ベストアンサー獲得回数02004/07/16 21:51:55

ポイント20pt

こんな感じでどうでしょう。

全角数値の判定部分はもっとスマートな方法があると思いますが・・・、最低でもCase文にすべきですかね。

Function convert(moji As String) As String

Dim i, tmp

convert = ””

For i = 1 To Len(moji)

tmp = Mid(moji, i, 1)

If tmp = ”0” Then tmp = ”0”

If tmp = ”1” Then tmp = ”1”

If tmp = ”2” Then tmp = ”2”

If tmp = ”3” Then tmp = ”3”

If tmp = ”4” Then tmp = ”4”

If tmp = ”5” Then tmp = ”5”

If tmp = ”6” Then tmp = ”6”

If tmp = ”7” Then tmp = ”7”

If tmp = ”8” Then tmp = ”8”

If tmp = ”9” Then tmp = ”9”

If i = 1 Then

convert = tmp

Else

convert = convert & ” ” & tmp

End If

Next i

End Function

id:cx20 No.2

cx20回答回数607ベストアンサー獲得回数1082004/07/16 21:53:08

ポイント50pt

あまりテストしていませんが、こんな感じでしょうか。

StrConv() という関数が VBA に用意されているので、それを利用すると簡単に変換ができます。

Sub Main()

Dim strData As String

Dim strConverted As String

strData = ”あ1いうえお”

strConverted = Convert(strData)

Debug.Print strConverted

End Sub

Function Convert(ByVal strSrc As String) As String

Dim strResult As String

Dim c As String

Dim i As Integer

For i = 1 To Len(strSrc)

c = Mid(strSrc, i, 1)

strResult = strResult & StrConv(c, vbNarrow) & ” ”

Next

Convert = strResult

End Function

id:nankichi

ありがとうございます。ぐるぐる回してスペースを入れていく、っていうのがどうやってかけるのかと思っていました。

2004/07/16 22:01:49
  • id:aki73ix
    あらら・・・

    Private Sub Cnv(ABC)
    ZENNUM$ = ”0123456789”
    C$ = ””
    For I = 1 To Len(ABC)
    If C$ <> ”” Then C$ = C$ + ” ”
    B$ = Mid$(ABC$, I, 1)
    X = InStr(ZENNUM$, B$)
    If X = 0 Then
    C$ = C$ + Mid$(ABC$, I, 1)
    Else
    C$ = C$ + Chr(X + 47)
    End If
    Next
    End Sub
  • id:mina_blue
    むむむ・・・

    Function convert(moji As String) As String
    strResult = ””
    strLen = Len(strSrc)
    For i = 1 To strLen - 1
    c = Mid(strSrc, i, 1)
    v = AscW(c)
    If (v >= AscW(”0”)) AND (v <= AscW(”9”)) Then
    strResult = strResult & CStr(v - AscW(”0”)) & ” ”
    Else
    strResult = strResult & c & ” ”
    End If
    Next i
    If strLen > 0 Then
    strResult = strResult & Mid(strSrc, strLen, 1)
    End If
    Convert = strResult
    End Function
  • id:mina_blue
    おや?

    1行目の”moji”は”strSrc”でした・・・
    やっぱり、部分的に走らせてコピペは、だめですね。
  • id:cx20
    Option Explicit

    ソースコードの先頭に「Option Explicit」という行を書くと、
    宣言していない変数をエラーとしてチェックしてくれます。

    Visual Basic Editor の設定で自動的に「Option Explicit」ステートメントを
    挿入させることが可能なので、あらかじめ設定しておくと便利です。

    <設定方法>
    1. Visual Basic Editor を起動
    2. [ツール] - [オプション] を洗濯
    3. [編集] タブの [変数の宣言を強制する] チェック ボックスをオンにする。

    これで、次回、モジュール追加時に、自動的に「Option Explicit」
    ステートメントがセットされます。

    <エラー検出の例>
    ---------------------------
    Microsoft Visual Basic
    ---------------------------
    コンパイル エラー:

    変数が定義されていません。
    ---------------------------
    OK ヘルプ
    ---------------------------


    http://www.microsoft.com/japan/developer/library/modcore/deconwritingerrorfreecode.htm
  • id:cx20
    Re:Option Explicit

    >2. [ツール] - [オプション] を洗濯

    「洗濯」してどうする・・・(^^A

    >2. [ツール] - [オプション] を選択

    が正しいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません