[[20031218105056]] 『続いてる文字列の間にスペースを空けたい』(りんご) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『続いてる文字列の間にスペースを空けたい』(りんご)

関数では無理ですよね。
たとえば、「田中一郎」という名前が1つのセルに入っているとします。
それを「田 中 一 郎」にしたいのです。
文字列は何文字かはわかりません。
VBA・・ちょっとはわかるんですけど・・・。


 私もちょっと・・・なのですが、ユーザー定義関数を作ってみました。
 Function inst(ByVal data As String) As String
 Dim n As Integer
 Dim mydata As String
    For n = 1 To Len(data)
        mydata = Mid(data, n, 1)
        inst = inst & mydata & " "
    Next n
 End Function
これで良いと思うのでが・・・(ケン)


 いじわる[爺さん]登場。
 昨夜中華料理を食って精算しようとしたら『お客さんは60才以上なので1割引』
 おいおいまだそんな年じゃないって、55ですよ。結局得しましたが。

 [ケン]さんのコードでOKです、

 [りんご]さんこのまま使ってください。

 以下はプログラミングの勉強なので無視してください。

 ="#"&inst("隣の客はよく柿食う客だ")&"#"で使ってみるとわかりますが
 最後にスペースが入ります。

 #隣 の 客 は よ く 柿 食 う 客 だ #

 もしこれは困るといわれたらどう対策しますか?

(kazu)


 ぷっ、いじわる爺さん・・ぷっ
最後にスペースが入るのは分かっていました・・・
くるしまぎれのifで
 Function inst(ByVal data As String) As String
  Dim n As Integer
  Dim mydata As String
    For n = 1 To Len(data)
        mydata = Mid(data, n, 1)
        If n = Len(data) Then
            inst = inst & mydata
        Else
            inst = inst & mydata & " "
        End If
    Next n
 End Function
と対処しましたがkazuさんならどうしますか?教えてください。
もう一つ質問ですがForの前にinst = "" と定義する方がいいのでしょうか?(ケン)

 ほんならわたしゃケンさんの向こうを張って現在のデータにスペースを挟みます。
 データの最上行にポインターをセットしてください。 
 その前に
 >『お客さんは60才以上なので1割引』
 私は未だにそんな目に遭うてまへん。へへ、何となく愉快。
   ほな、(弥太郎)  

 Sub spas()
    Dim Rtn As Integer, t As Integer, i As Integer, j As Integer
    Dim data_a As String, data_b As String

    Rtn = MsgBox("スペースを挿入セルにセット出来ていますか?", vbYesNo)
    If Rtn = vbNo Then Exit Sub
    If ActiveCell.Value = "" Then Exit Sub
    t = ActiveCell.Column
    max_row = ActiveCell.End(xlDown).Row
    For i = ActiveCell.Row To max_row
        For j = 1 To Len(Cells(i, t)) - 1
           data_b = Mid(Cells(i, t), j, 1) + " "
           data_a = data_a + data_b
        Next j
        Cells(i, t) = data_a + Right(Cells(i, t), 1)
        data_a = ""
    Next i
 End Sub

 弥太郎さん、まいど〜有難う御座います。
>私は未だにそんな目に遭うてまへん
そのうち・・・・ですよ。
ところで、お部屋にビールが届いていましたよ。無用心やな〜
(ケン)

みなさん、本当にありがとうございました。
ユーザー定義関数は、私・・わかりません。
それで、弥太郎さんのでできました。
参考までに、ユーザー定義関数は、どのようにstringという関数に結びつけたらいいのですか?
それから、逆にスペースがランダムにあいている、文字列のスペースを削除したいのですが、これはどうしたらよいのでしょうか。

例  「山田 太   郎」を「山田太郎」にする。

すみません、まだまだ初心者なもので・・。
(りんご)


 ユーザー関数は普通の関数と同じく=inst(A1)の様に使って下さい。
それからスペースの削除は「置換え」機能を使い「検索する文字列」にスペースを
いれ置換えで出来ます。(ケン)


 [りんご]さんすみません、順番が狂ってしまって。

 [ケン]さんの質問への答え。

 最近の若いもんはこれだから困るんじゃ。←なぜか急に老人調に。
 この程度のものにifなんか使ってはだめです。
 [弥太郎]さんのがだいぶ近いです。

 Function inst(ByVal data As String) As String
  Dim n As Integer
    data = data & " "
    For n = 1 To Len(data)-2
        inst = inst & Mid(data, n, 1) & " "
    Next n
 End Function

 (kazu)

 ↑これkazuさんですよね?有難う御座います。but
最後の1文字が消えてしまいます。1週回るのが少ないような気が・・(ケン)


 なんと、ニックネームも長さの計算もポカしました。
 いよいよご老体ですね。
 [訂正版]↓

 Function inst(ByVal data As String) As String
  Dim n As Integer
    data = data & " "
    For n = 1 To Len(data)-1
        inst = inst & Mid(data, n, 1) & " "
    Next n
 End Function

 (kazu)


 誤:一週回る
 正:一周回る
 (kazu)


できましたできました。全部、出来ました。

ユーザー定義関数って便利なんですね。
 
kazuさん、ケンさん、弥太郎さん、本当にありがとうございました。(リンゴ)


 字を間違えた〜。取りあえず、リンゴさんが解決出来たようなので、めでたしめでたし。
(ケン)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.