みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Functionの使い方が分かりません。

ACCESS 2013環境でVBAを使用しています。

プログラムが長い上、使用する箇所が多くて困っています。

Functionで、使いたい時だけ呼び出したいのですが
うまく行きません。

二つのテキストボックスに入力された、文字を組み合わせて
文字列を生成するプロシージャを作成しています。

 txt1の値が、岡山
 txt2の値が、オカヤマ

の時

先頭の文字列が ア行、続きは _岡山 となるよう
AscW関数で文字コードで一度抽出し,
select文で判別しています。

コードは
---------------------------------------------
Private Sub コマンド1_Click()

Dim kanji As String
Dim katakana As Integer
Dim sento As String
Dim hensuu As String

kanji = Me.txt1
katakana = AscW(Left(Me.txt2,1))

Select Case katakana

Case 12450 To 12458
sento = "ア行"

Case 12459 To 12468
sento = "カ行"

~(中略)~

   Case Else

End Select


hensuu = sento & "_" & kanji

MsgBox hensuu
End Sub
---------------------------------------------
となっています。

Select Case文が長いのと、複数のフォーム上で実行させるボタンごとに
同じコードを記述していて、最近Accessの起動が遅くなってきました。

Select文をFunctionから呼び出し、最終的にはモジュールから呼び出しに
書き換えたいのですが、書き方が良く分かりません。

試したコード
---------------------------------------------
Function moji(ByRef katakana As Integer,sento As String)

Select Case katakana

Case 12450 To 12458
sento = "ア行"

Case 12459 To 12468
sento = "カ行"

~(中略)~

   Case Else

End Select

End Function

Private Sub コマンド1_Click()

Dim kanji As String
Dim katakana As Integer
Dim sento As String
Dim hensuu As String

kanji = Me.txt1
katakana = AscW(Left(Me.txt2,1))

sento = moji(katakana)

hensuu = sento & "_" & kanji

MsgBox hensuu
End Sub
---------------------------------------------
多分、大きく間違っているのではないかと思うのですが
どのように修正したらよいでしょうか

投稿日時 - 2015-01-24 20:28:05

QNo.8902672

困ってます

質問者が選んだベストアンサー

戻り値かえしてないんじゃないかな

その"関数名"に代入する形で、値を返します。
Function moji()
 '~処理~
 moji = "結果" '←戻り値
End function

一応、Subでも引数に代入することで値を返すことはできますが、Functionなら式に組み込めます。違いはそのくらい。

投稿日時 - 2015-01-24 21:04:32

補足

書き換えましたが上手くいきません。
以下、型が一致しません。

Function moji()
Dim katakana As Integer
Dim sento As String
Select Case katakana
Case 12450 To 12458
sento = "ア行"
Case 12459 To 12468
sento = "カ行"
Case Else
End Select
moji = sento
End Function

Private Sub コマンド1_Click()
Dim kanji As String
Dim katakana As String
Dim sento As String
Dim hensuu As String

kanji = Me.txt1
katakana = AscW(Left(Me.txt2, 1))

→ sento = moji(katakana)
hensuu = sento & "_" & kanji

MsgBox hensuu
End Sub

→ sento = moji(katakana)
  sento = moji()にすると、因数を要求されます。
他に試したところ、ボタンクリック後、MSGボックスが反応しなかったり
Functionの計算部分がスキップ?されています。
どうしたらよいでしょうか。

投稿日時 - 2015-01-24 22:02:13

お礼

呼び出しを
Function moji(ByRef katakana As Integer) As String
戻り値を
moji = sento
ボタンの動作を
sento = moji(katakana)
に変えたら動きました。

ありがとうございました。

投稿日時 - 2015-01-25 09:53:54

ANo.1

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

If Then - Else文、Select Case文は次のように論理式に置き換えることもできます。

Public Function GetKanaRow(ByVal S As String) As String
  Dim N As Integer
  
  N = (S Like "[ア-オ]*") * 1
  N = N + (S Like "[カ-ゴ]*") * 2
  N = N + (S Like "[サ-ゾ]*") * 3
  N = N + (S Like "[タ-ド]*") * 4
  N = N + (S Like "[ナ-ノ]*") * 5
  N = N + (S Like "[ハ-ポ]*") * 6
  N = N + (S Like "[マ-モ]*") * 7
  N = N + (S Like "[ヤ-ヨ]*") * 8
  N = N + (S Like "[ラ-ロ]*") * 9
  N = N + (S Like "ワ*") * 10
    
  GetKanaRow = Mid(Chr(0) & "アカサタナハマヤラワ", Abs(N) + 1, 1)
End Function

【お願い】Like文の対応は確認されて下さい!

投稿日時 - 2015-01-25 00:14:31

ANo.2

日本語で先頭の一文字目が拗音、促音、撥音は無いでしょうから
hatena さんの
http://hatenachips.blog34.fc2.com/blog-entry-262.html
でオッケーかと思います。
※旧仮名遣いの「ゐゑ」がちと心配。

投稿日時 - 2015-01-24 22:12:05

補足

「ゐ、ゑ」は無いのですが、拗音、促音、撥音には対応する形を取っています。
例えば後藤さん→カ行_後藤、パトリック→ハ行_パトリックなど。
問題になっているところなんですが、戻り値の設定の仕方が分かりません。
いろいろな事例がネットに出ているのですが、どのように使っているのか
理解が追いつかないのです。

投稿日時 - 2015-01-25 09:24:02

あなたにオススメの質問