Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6607 / 13644 ツリー ←次へ | 前へ→

【44211】数字は指定してるひらがなに変更 イチゴ 06/11/9(木) 19:48 質問[未読]
【44212】Re:数字は指定してるひらがなに変更 ichinose 06/11/9(木) 20:29 発言[未読]
【44214】Re:数字は指定してるひらがなに変更 イチゴ 06/11/9(木) 21:06 質問[未読]
【44216】Re:数字は指定してるひらがなに変更 ichinose 06/11/9(木) 22:14 発言[未読]
【44217】Re:数字は指定してるひらがなに変更 awu 06/11/9(木) 22:53 回答[未読]
【44219】Re:数字は指定してるひらがなに変更 イチゴ 06/11/10(金) 9:46 発言[未読]
【44254】Re:数字は指定してるひらがなに変更 awu 06/11/10(金) 22:18 発言[未読]
【44257】Re:数字は指定してるひらがなに変更 イチゴ 06/11/10(金) 23:11 発言[未読]
【44258】Re:数字は指定してるひらがなに変更 06/11/11(土) 0:21 発言[未読]
【44260】Re:数字は指定してるひらがなに変更 awu 06/11/11(土) 1:10 回答[未読]
【44264】Re:数字は指定してるひらがなに変更 イチゴ 06/11/11(土) 13:44 お礼[未読]
【44226】Re:数字は指定してるひらがなに変更 りん 06/11/10(金) 12:29 回答[未読]

【44211】数字は指定してるひらがなに変更
質問  イチゴ  - 06/11/9(木) 19:48 -

引用なし
パスワード
   誰が教えていただけませんか?
いろいろ調べたけど、やはり、自分の力で出来ませんので、
分かっている人は教えてください。お願い致します。
早速ですが
例えば
   1=あ 2=い 3=う 重複ならSになる。
   A1に”1”を入力するばB1に”あ”というひらがなになる。
   A2に”21”を入力すればB2に”いあ”
   A3に”22”を入力すればB3に”いS”になる
   式はどうゆうふうに書いたら、こんな事になるの?

【44212】Re:数字は指定してるひらがなに変更
発言  ichinose  - 06/11/9(木) 20:29 -

引用なし
パスワード
   ▼イチゴ さん:
こんばんは。


>いろいろ調べたけど、やはり、自分の力で出来ませんので、
このいろいろのいろだけでも記述してください。

>早速ですが
>例えば
>   1=あ 2=い 3=う 重複ならSになる。
>   A1に”1”を入力するばB1に”あ”というひらがなになる。
>   A2に”21”を入力すればB2に”いあ”
>   A3に”22”を入力すればB3に”いS”になる
>   式はどうゆうふうに書いたら、こんな事になるの?
   では、セルA4に222と入力した場合は?
   以下のコードでは いSいと出力するようにしています。
標準モジュールに
'=====================================================
Function cnvnum(ByVal myvalue As Variant)
  Dim x0 As Long
  Dim f_str As String
  Dim myarray As Variant
  myarray = Array("あ", "い", "う")
  cnvnum = ""
  f_str = ""
  For x0 = 1 To Len(myvalue)
   If Mid(myvalue, x0, 1) = f_str Then
     cnvnum = cnvnum & "S"
     f_str = ""
   Else
     f_str = Mid(myvalue, x0, 1)
     cnvnum = cnvnum & myarray(Val(f_str) - 1)
     End If
   Next
End Function

として、

セルA1に 12と指定してみてください。
次いでセルB1には =cnvnum(a1) という数式を指定して下さい。
セルB1には、あい と表示されるはずです。

尚、セルの書式は標準で試してください。


上記のコードは1,2,3以外を入力するとエラーになります。

【44214】Re:数字は指定してるひらがなに変更
質問  イチゴ  - 06/11/9(木) 21:06 -

引用なし
パスワード
   ▼ichinose さん:
>▼イチゴ さん:
>こんばんは。
>
>
>>いろいろ調べたけど、やはり、自分の力で出来ませんので、
>このいろいろのいろだけでも記述してください。
>
>>早速ですが
>>例えば
>>   1=あ 2=い 3=う 重複ならSになる。
>>   A1に”1”を入力するばB1に”あ”というひらがなになる。
>>   A2に”21”を入力すればB2に”いあ”
>>   A3に”22”を入力すればB3に”いS”になる
>>   式はどうゆうふうに書いたら、こんな事になるの?
>   では、セルA4に222と入力した場合は?
>   以下のコードでは いSいと出力するようにしています。
>標準モジュールに
>'=====================================================
>Function cnvnum(ByVal myvalue As Variant)
>  Dim x0 As Long
>  Dim f_str As String
>  Dim myarray As Variant
>  myarray = Array("あ", "い", "う")
>  cnvnum = ""
>  f_str = ""
>  For x0 = 1 To Len(myvalue)
>   If Mid(myvalue, x0, 1) = f_str Then
>     cnvnum = cnvnum & "S"
>     f_str = ""
>   Else
>     f_str = Mid(myvalue, x0, 1)
>     cnvnum = cnvnum & myarray(Val(f_str) - 1)
>     End If
>   Next
>End Function
>
>として、
>
>セルA1に 12と指定してみてください。
>次いでセルB1には =cnvnum(a1) という数式を指定して下さい。
>セルB1には、あい と表示されるはずです。
>
>尚、セルの書式は標準で試してください。
>
>
>上記のコードは1,2,3以外を入力するとエラーになります。

本当に有難うございました。
でも、私はこの式を見ても全然分からないので、
しかもどこにセルを指定するの?
そして、A1の数値は5桁になる可能性は大きいです
あと、222を入力したら、いSSになりたいけど
これはどこに変ったらいいの?

【44216】Re:数字は指定してるひらがなに変更
発言  ichinose  - 06/11/9(木) 22:14 -

引用なし
パスワード
   ▼イチゴ さん:
>>標準モジュールに
>>'=====================================================
>>Function cnvnum(ByVal myvalue As Variant)
>>  Dim x0 As Long
>>  Dim f_str As String
>>  Dim myarray As Variant
>>  myarray = Array("あ", "い", "う")
>>  cnvnum = ""
>>  f_str = ""
>>  For x0 = 1 To Len(myvalue)
>>   If Mid(myvalue, x0, 1) = f_str Then
>>     cnvnum = cnvnum & "S"
>>     f_str = ""
>>   Else
>>     f_str = Mid(myvalue, x0, 1)
>>     cnvnum = cnvnum & myarray(Val(f_str) - 1)
>>     End If
>>   Next
>>End Function
>>
>>として、
>>
>>セルA1に 12と指定してみてください。
>>次いでセルB1には =cnvnum(a1) という数式を指定して下さい。
>>セルB1には、あい と表示されるはずです。
>>
>>尚、セルの書式は標準で試してください。
>>
>>
>>上記のコードは1,2,3以外を入力するとエラーになります。
>


>でも、私はこの式を見ても全然分からないので、
ひとつひとつ分からないことを段階を踏んで解決していってください。
でないと全て説明しないとなりませんよね!!

例えば、投稿したVBAコードをどこに貼り付けたらよいか
分からないのか・・・?

もしそうなら、

「VBAの記述方法」という語句でGoogleで検索すれば、

www.bunsugi.ed.jp/vba4graduate/vba_gaisetsu.htm

このようなサイトで説明を見ることが出来ます。


>しかもどこにセルを指定するの?
ん?数値をひらがなに変換して表示させたいセルに記述したような数式を指定するのです。


>そして、A1の数値は5桁になる可能性は大きいです
>あと、222を入力したら、いSSになりたいけど

これは、投稿したコードのどこか一行を削除すれば実現できます。
どこを削除すればよいか? 現状コードを分析して見つけてください。

その前にまず、上記コードの運用の仕方を調べて取り合えず動作させることを
考えてみてください。

【44217】Re:数字は指定してるひらがなに変更
回答  awu  - 06/11/9(木) 22:53 -

引用なし
パスワード
   次の手順でテストしてみてください。

1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
3.コードウィンドウに下記コードをコピーして貼り付けます。
4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
 「中」にして[OK]します。

任意シートのセルB1に =NumtoStr(A1) の計算式を入力します。

これで、セルA1にいろいろ入力してみてください。

・数字以外が混じっても、数字のみを有効とし、他は無視します。
・半角/全角 とも機能します。
・数字は、「文字列」も有効とします。 '123 等。

こんな感じで如何でしょうか。

Function NumtoStr(S As Variant) As String
Dim StrRe As String
Dim N As Integer
Dim Num As Integer
Dim W As Variant
If Len(S) = 0 Then
  NumtoStr = vbNullString
  Exit Function
End If
For N = 1 To Len(S)
  If IsNumeric(Mid(S, N, 1)) Then
    Num = Val(StrConv(Mid(S, N, 1), vbNarrow))
    W = Choose(Num, "あ", "い", "う")
    If Not IsNull(W) Then
      If InStr(StrRe, W) = 0 Then
        StrRe = StrRe & W
      Else
        StrRe = StrRe & "S"
      End If
    End If
  End If
Next N
NumtoStr = StrRe
End Function

【44219】Re:数字は指定してるひらがなに変更
発言  イチゴ  - 06/11/10(金) 9:46 -

引用なし
パスワード
   本当に有難うございました。
いろいろ試したけど、
すごく使いやすかったです。
でも、40入れたら、0の数値が反応しないです。
その式の中に数値が変ったけど、やはり、無理でした。
どこの辺の式変ったら、0の数値を入れたら、反応できるでしょうか?
又教えてください、お願い致します。

▼awu さん:
>次の手順でテストしてみてください。
>
>1.Alt + F11 で VBE(Visual Basic Editor)を開きます。
>2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。
>3.コードウィンドウに下記コードをコピーして貼り付けます。
>4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。
>5.メニューから[ツール]-->[マクロ]-->[セキュリティ]で「セキュリティレベル」を
> 「中」にして[OK]します。
>
>任意シートのセルB1に =NumtoStr(A1) の計算式を入力します。
>
>これで、セルA1にいろいろ入力してみてください。
>
>・数字以外が混じっても、数字のみを有効とし、他は無視します。
>・半角/全角 とも機能します。
>・数字は、「文字列」も有効とします。 '123 等。
>
>こんな感じで如何でしょうか。
>
>Function NumtoStr(S As Variant) As String
>Dim StrRe As String
>Dim N As Integer
>Dim Num As Integer
>Dim W As Variant
>If Len(S) = 0 Then
>  NumtoStr = vbNullString
>  Exit Function
>End If
>For N = 1 To Len(S)
>  If IsNumeric(Mid(S, N, 1)) Then
>    Num = Val(StrConv(Mid(S, N, 1), vbNarrow))
>    W = Choose(Num, "あ", "い", "う")
>    If Not IsNull(W) Then
>      If InStr(StrRe, W) = 0 Then
>        StrRe = StrRe & W
>      Else
>        StrRe = StrRe & "S"
>      End If
>    End If
>  End If
>Next N
>NumtoStr = StrRe
>End Function

【44226】Re:数字は指定してるひらがなに変更
回答  りん E-MAIL  - 06/11/10(金) 12:29 -

引用なし
パスワード
   イチゴ さん、こんにちわ。

>例えば
>   1=あ 2=い 3=う 重複ならSになる。
>   A1に”1”を入力するばB1に”あ”というひらがなになる。
>   A2に”21”を入力すればB2に”いあ”
>   A3に”22”を入力すればB3に”いS”になる
関数名はTestです。

Function test(a As String) As String
  Dim LL(0 To 9) As String, NN(0 To 9) As Integer
  Dim bb As String, blen As Integer, md As Integer, ss As String
  Dim II As Integer
  '数字に対応して変更する文字列
  LL(0) = "■"
  LL(1) = "あ": LL(2) = "い": LL(3) = "う"
  LL(4) = "え": LL(5) = "お": LL(6) = "か"
  LL(7) = "き": LL(8) = "く": LL(9) = "け"
  '初期文字列
  bb = a
  blen = Len(bb)
  '
  For II = 0 To 9
   Do
     md = InStr(bb, Format(II, "0"))
     If md = 0 Then Exit Do
     '数をカウント
     NN(II) = NN(II) + 1
     '2回目以降はS
     If NN(II) = 1 Then ss = LL(II) Else ss = "S"
     '文字の置き換え
     If md = 1 Then
      bb = ss & Right(bb, blen - 1) '頭
     ElseIf md = blen Then
      bb = Left(bb, blen - 1) & ss '末尾
     Else
      bb = Left(bb, md - 1) & ss & Right(bb, blen - md) '途中
     End If
   Loop
  Next
  '関数の戻り値
  test = bb
End Function

0とか4とか、最初に書いてなかったのに実行時には指定していたりするみたいなので、0から9までを何に変えるかをリストに持ってチェックしています。

【44254】Re:数字は指定してるひらがなに変更
発言  awu  - 06/11/10(金) 22:18 -

引用なし
パスワード
   ▼イチゴ さん:
>本当に有難うございました。
>いろいろ試したけど、
>すごく使いやすかったです。
>でも、40入れたら、0の数値が反応しないです。
>その式の中に数値が変ったけど、やはり、無理でした。
>どこの辺の式変ったら、0の数値を入れたら、反応できるでしょうか?
>又教えてください、お願い致します。

当初の質問文を読み返してください。

0 や 4 のときについて、触れられていますか?

で、どうなれば、いいのですか?

4 は、"え" としても 0 は・・・?

【44257】Re:数字は指定してるひらがなに変更
発言  イチゴ  - 06/11/10(金) 23:11 -

引用なし
パスワード
   AWUさん
いつも返事してくれて
ありがとうございます。
私はいい足りないかもしれない
本当は0〜9までの数値使いたいです。
数値は10とか222と444とか112244
いろいろなときが出てきますので、
書いてくれたの式はちょっとだけ変わりました。
ですから、今は0だけが反応しないです。
そして、1212と入れたら、なんか”あいSS”になります
これになると数値の意味は1222になっているではないでしょうか?
ですから、くれた式にはどこに書き換えれば、正しい置換できるでしょうか?
また教えてください。お願いいたします。

▼awu さん:
>▼イチゴ さん:
>>本当に有難うございました。
>>いろいろ試したけど、
>>すごく使いやすかったです。
>>でも、40入れたら、0の数値が反応しないです。
>>その式の中に数値が変ったけど、やはり、無理でした。
>>どこの辺の式変ったら、0の数値を入れたら、反応できるでしょうか?
>>又教えてください、お願い致します。
>
>当初の質問文を読み返してください。
>
>0 や 4 のときについて、触れられていますか?
>
>で、どうなれば、いいのですか?
>
>4 は、"え" としても 0 は・・・?

【44258】Re:数字は指定してるひらがなに変更
発言    - 06/11/11(土) 0:21 -

引用なし
パスワード
   >分かっている人は教えてください。

>   式はどうゆうふうに書いたら、こんな事になるの?

>でも、私はこの式を見ても全然分からないので、
>しかもどこにセルを指定するの?

>これはどこに変ったらいいの?

>どこの辺の式変ったら、0の数値を入れたら、反応できるでしょうか?

>私はいい足りないかもしれない

>いろいろなときが出てきますので、
>書いてくれたの式はちょっとだけ変わりました。

>そして、1212と入れたら、なんか”あいSS”になります
>これになると数値の意味は1222になっているではないでしょうか?
>ですから、くれた式にはどこに書き換えれば、正しい置換できるでしょうか?

気になる・・・

【44260】Re:数字は指定してるひらがなに変更
回答  awu  - 06/11/11(土) 1:10 -

引用なし
パスワード
   > ですから、今は0だけが反応しないです。

だから、0 のときは、どうなるのって聞いていたのですが・・・
当初の質問では、例だとしても、1 が "あ" ですから 0 が無いのかと・・・

例えば、0〜9をそれぞれ "あ"〜"こ" の文字に変換とか表現してくれれば・・・

> そして、1212と入れたら、なんか”あいSS”になります
> これになると数値の意味は1222になっているではないでしょうか?

これは、左側に既にある数字のときは、S に変換する と解釈したのです。


ということで、今の仕様は、

書式 : =NumtoStr( 数値 )

使用例 : =NumtoStr(A1) A1 に 001233 が入力されているとき、"ASBCDS" を返します。

ただし、先頭に 0 が付加されていますから、書式が文字列にする必要があります。
書式で設定しても補足した 0 は、無視されます。

戻り値は、引数に指定した数値に対して、0〜9 を A〜J にそれぞれ変換します。
ただし、同じ数字が続く限り、その最初だけを上記の変換をし、あとは、S に変換します。

もし、数字以外が含まれている場合は、その文字だけを無視します。

こんな感じで宜しいのでしょうか。


Function NumtoStr(S As Variant) As String
Dim StrRe As String
Dim N As Integer
Dim Num As Integer
Dim W As Variant
If Len(S) = 0 Then
  NumtoStr = vbNullString
  Exit Function
End If
For N = 1 To Len(S)
  If IsNumeric(Mid(S, N, 1)) Then
    Num = Val(StrConv(Mid(S, N, 1), vbNarrow))
         '下の " " の中には、0〜9 に対応する文字を設定する 現在 0→"A"
    W = Choose(Num + 1, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
    If Not IsNull(W) Then
      If Right(Replace(StrRe, "S", ""), 1) = W Then
        StrRe = StrRe & "S"
      Else
        StrRe = StrRe & W
      End If
    End If
  End If
Next N
NumtoStr = StrRe
End Function

【44264】Re:数字は指定してるひらがなに変更
お礼  イチゴ  - 06/11/11(土) 13:44 -

引用なし
パスワード
   有難うございます。
すごく助かりました。
いい足りてない部分はすみませんでした。
これから、この式はうまく使っていきます。
本当に有難うございます。
▼awu さん:
>> ですから、今は0だけが反応しないです。
>
>だから、0 のときは、どうなるのって聞いていたのですが・・・
>当初の質問では、例だとしても、1 が "あ" ですから 0 が無いのかと・・・
>
>例えば、0〜9をそれぞれ "あ"〜"こ" の文字に変換とか表現してくれれば・・・
>
>> そして、1212と入れたら、なんか”あいSS”になります
>> これになると数値の意味は1222になっているではないでしょうか?
>
>これは、左側に既にある数字のときは、S に変換する と解釈したのです。
>
>
>ということで、今の仕様は、
>
>書式 : =NumtoStr( 数値 )
>
>使用例 : =NumtoStr(A1) A1 に 001233 が入力されているとき、"ASBCDS" を返します。
>
>ただし、先頭に 0 が付加されていますから、書式が文字列にする必要があります。
>書式で設定しても補足した 0 は、無視されます。
>
>戻り値は、引数に指定した数値に対して、0〜9 を A〜J にそれぞれ変換します。
>ただし、同じ数字が続く限り、その最初だけを上記の変換をし、あとは、S に変換します。
>
>もし、数字以外が含まれている場合は、その文字だけを無視します。
>
>こんな感じで宜しいのでしょうか。
>
>
>Function NumtoStr(S As Variant) As String
>Dim StrRe As String
>Dim N As Integer
>Dim Num As Integer
>Dim W As Variant
>If Len(S) = 0 Then
>  NumtoStr = vbNullString
>  Exit Function
>End If
>For N = 1 To Len(S)
>  If IsNumeric(Mid(S, N, 1)) Then
>    Num = Val(StrConv(Mid(S, N, 1), vbNarrow))
>         '下の " " の中には、0〜9 に対応する文字を設定する 現在 0→"A"
>    W = Choose(Num + 1, "A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
>    If Not IsNull(W) Then
>      If Right(Replace(StrRe, "S", ""), 1) = W Then
>        StrRe = StrRe & "S"
>      Else
>        StrRe = StrRe & W
>      End If
>    End If
>  End If
>Next N
>NumtoStr = StrRe
>End Function

6607 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free