• 締切済み

エクセルで文字を数値に変換したい!

現在、1セルに1文字(あ~ん)が入っている表があるのですが、この文字たちを数字に変換したいのですが、どんな関数を使えばいいのでしょうか?   A B  C D E  1 エ ン ブ レ ム  → 4 5 3 4 3 2 リ フ ト       → 2 3 5 といった具合にあ行 1 い行 2 ウ行 3 エ行 4 お行 5 なのです。 ただし、「ん」だけ前に文字の次の行、前の文字がオ行の場合、1に戻るなのですが。 よろしくお願いします。

みんなの回答

回答No.3

こんにちは。 データテーブルを用いて、ひらがなと対応する数字を定義し、そのデータテーブルから検索するのが手っ取り早いです。 以下ソースです。 '変数宣言 Dim ひらがな一覧 As DataTable = Nothing Dim 検索ひらがな As String = "あ" Dim 検索結果 As DataRow = Nothing Dim 数字 As Integer = 0 'テーブル初期化 ひらがな一覧 = New DataTable 'テーブルにカラムを作成 ひらがな一覧.Columns.Add("段", GetType(String)) ひらがな一覧.Columns.Add("数字", GetType(Integer)) '各段のひらがなと、対応する数字を登録 ひらがな一覧.Rows.Add("あかさたなはまやらわん", 1) ひらがな一覧.Rows.Add("いきしちにひみりゐ", 2) '以下省略 ' ' 'テーブルを検索 検索結果 = ひらがな一覧.Select("段 LIKE '%" & 検索ひらがな & "%'").GetValue(0) 'ひらがなに対応する数字を取得 数字 = 検索結果("数字")

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

遊びで作ってみました。アクティブシートのカタカナを1~5(場合によっては0)の数字に変換します。 もし、ひらがなも対象でしたら、Function fAiueo()内の sOne = StrConv(sTarget, vbNarrow) の上に sTarget = StrConv(sTarget, vbKatakana) を加えてみてください。 また、初めの文字が「ン」の場合は1、「ー」の場合は0に変換します。 Sub Sample()   Dim R As Range   Dim nBefore As Long   Dim nRtn As Long      nBefore = 0   For Each R In ActiveSheet.UsedRange     If R.Value <> "" Then       nRtn = fAiueo(R.Value)       If nRtn > 0 Then          '--- 「ン」         If nRtn = 6 Then           nRtn = nBefore + 1 - 5 * (nBefore = 5)         End If         '--- 「ー」         If nRtn = 7 Then           nRtn = nBefore '前の文字と同じとする         End If                nBefore = nRtn         R.Value = nRtn           End If     End If   Next R End Sub Function fAiueo(sTarget As String) As Long   Dim nCode As Long   Dim sOne As String   Dim nCheck As Long      fAiueo = 0   If sTarget = "" Then Exit Function      '-----半角カタカナにした上で1文字目を取得   sOne = StrConv(sTarget, vbNarrow)   sOne = Left(sOne, 1)   If sOne = "ヮ" Then sOne = Chr(220)   If sOne = "ヴ" Then sOne = Chr(179)     '-----カタカナは文字コード166~221   nCode = Asc(sOne)   If (nCode < 166) Or (nCode > 221) Then Exit Function   '--- 「ン」   If nCode = 221 Then     fAiueo = 6     Exit Function   End If   '--- 「ー」   If nCode = 221 Then     fAiueo = 7     Exit Function   End If   '----- 文字コードの1の位で判別   nCheck = nCode Mod 10   Select Case nCheck     Case 0       fAiueo = 4       If nCode = 220 Then fAiueo = 1         Case 1       fAiueo = 5           Case 2       fAiueo = 1        Case 3       fAiueo = 2       If (nCode = 173) Or (nCode = 213) Then fAiueo = 3           Case 4       fAiueo = 3       If (nCode = 174) Or (nCode = 214) Then fAiueo = 5       If nCode = 9584 Then fAiueo = 2     Case 5       fAiueo = 4       If nCode = 215 Then fAiueo = 1       If nCode = 175 Then fAiueo = 3     Case 6       fAiueo = 5       If nCode = 216 Then fAiueo = 2       Case 7       fAiueo = 1       If nCode = 217 Then fAiueo = 3     Case 8       fAiueo = 2       If nCode = 218 Then fAiueo = 4      Case 9       fAiueo = 3       If nCode = 219 Then fAiueo = 5     Case Else       fAiueo = 0   End Select End Function

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

入っている文字はカタカナだけということよろしいでしょうか? ぱっと思いつくのは文字コードを使うことですが、 カタカナの文字コードと各段との関連性はありませんね。 代わりにこんな方法は、いかがでしょうか。 1.五十音表を用意する。  シート「五十音」を追加し、  A1セル→“アカサタナ…”→つまり、ア段+“ン”(拗音、撥音、濁音、半濁音も忘れずに)  A2セル→イ段  A3セル→ウ段  A4セル→エ段  A5セル→オ段 2.番号を入れたいセルに次の式を入れる。 =IF(ISERROR(FIND(A1,五十音!$A$1,1)),IF(ISERROR(FIND(A1,五十音!$A$2,1)),IF(ISERROR(FIND(A1,五十音!$A$3,1)),IF(ISERROR(FIND(A1,五十音!$A$4,1)),IF(ISERROR(FIND(A1,五十音!$A$5,1)),"",5),4),3),2),1) ↑の式の“A1”は調べたい文字が入っているセルです。 2の式はもっとスマートにできると思いますが、ちょっと私にはわからないです。

関連するQ&A

専門家に質問してみよう