Excel VBA質問箱 IV

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

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


11782 / 13645 ツリー ←次へ | 前へ→

【14171】文字列判定 じぇじぇ 04/5/22(土) 13:38 発言[未読]
【14175】Re:文字列判定 かみちゃん 04/5/22(土) 14:22 回答[未読]
【14194】Re:文字列判定 じぇじぇ 04/5/23(日) 0:42 発言[未読]

【14171】文字列判定
発言  じぇじぇ  - 04/5/22(土) 13:38 -

引用なし
パスワード
   こんにちは。

初めて投稿します。
シートのC列に漢字で名前が入っています
名前をカタカナにしてその文字を判定したいのですが、少し困ってます。
例えば、「山田太郎」は「ヤマダタロウ」になります。これは簡単にできるのですが、
ここからが肝心なところで、その一文字一文字の画数を判定し、加算したいと思ってます。
ヤなら画数は2、ダなら画数は5ということになります。
文字に対する画数は別にシートなりコード内に定義し対応表を作成しておくとします。

考え方としては、
1、データの入っている行数を調べる
2、カナにした文字の長さを調べる
3、一文字目を判定用変数に取り込む
4、取り込んだ文字を対応表と照らし合わす
5、加算結果用変数に値を渡す
6、結果をC列からオフセットした列のセルに出力する
7、次(下)の行を判定
8、終わり

で、1−8のループの中に2−7と3−6のループが入る形になると思うのですが、
文字列を順に一文字づつ取り込む処理がイマイチ判りません。
具体的にアドバイスをお願いできませんでしょうか。
よろしくお願いします。

【14175】Re:文字列判定
回答  かみちゃん  - 04/5/22(土) 14:22 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>文字列を順に一文字づつ取り込む処理がイマイチ判りません。

For 〜 Next と Mid関数で取得することができます。
For i=1 To Len(文字列)
 文字=Mid(文字列 , i, 1)
 文字に対する処理
Next

> ここからが肝心なところで、その一文字一文字の画数を判定し、加算したいと思ってます。
> ヤなら画数は2、ダなら画数は5ということになります。

これは、次のようなコードでできると思います。

Sub Test()
 Dim Str1, Str2, Str2_Tmp As String
 Dim KaKuSu As Integer
 
 Str1 = "ヤマダタロウ"
 'Str1を半角変換する。
 Str2 = StrConv(Str1, vbNarrow)
 '画数の合計用変数をクリア
 KaKuSu = 0
 '文字列を1文字ずつ取り出す
 For i = 1 To Len(Str2)
  Str2_Tmp = Mid(Str2, i, 1)
  '画数を取得する。
  'Str2_Tmpの文字コードを取得する。
  'たとえば、半角のアは、177が返る。
  'Choose関数を使って、各文字の画数を取得する。
  'Choose(文字コード-176,A,B,C,D....)
  'Aはアの画数2、Bはイの画数2、Cはウの画数3、Dはエの画数3....
  'Choose関数の引数は、すみませんが記述してください。
  KaKuSu = KaKuSu + Choose(Asc(Str2_Tmp) - 176, 2, 2, 3, 3...)
 Next
 MsgBox KaKuSu
End Sub

【14194】Re:文字列判定
発言  じぇじぇ  - 04/5/23(日) 0:42 -

引用なし
パスワード
   かみちゃんさん

ご回答ありがとうございます。
choose関数ですが、引数の最大は29個ではありませんか?

>Sub Test()
> Dim Str1, Str2, Str2_Tmp As String
> Dim KaKuSu As Integer
> 
> Str1 = "ヤマダタロウ"
> 'Str1を半角変換する。
> Str2 = StrConv(Str1, vbNarrow)
> '画数の合計用変数をクリア
> KaKuSu = 0
> '文字列を1文字ずつ取り出す
> For i = 1 To Len(Str2)
>  Str2_Tmp = Mid(Str2, i, 1)
>  '画数を取得する。
>  'Str2_Tmpの文字コードを取得する。
>  'たとえば、半角のアは、177が返る。
>  'Choose関数を使って、各文字の画数を取得する。
>  'Choose(文字コード-176,A,B,C,D....)
>  'Aはアの画数2、Bはイの画数2、Cはウの画数3、Dはエの画数3....
>  'Choose関数の引数は、すみませんが記述してください。
>  KaKuSu = KaKuSu + Choose(Asc(Str2_Tmp) - 176, 2, 2, 3, 3...)
> Next
> MsgBox KaKuSu
>End Sub

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