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
戻り値かえしてないんじゃないかな
その"関数名"に代入する形で、値を返します。
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
このQ&Aは役に立ちましたか?
12人が「このQ&Aが役に立った」と投票しています
回答(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
日本語で先頭の一文字目が拗音、促音、撥音は無いでしょうから
hatena さんの
http://hatenachips.blog34.fc2.com/blog-entry-262.html
でオッケーかと思います。
※旧仮名遣いの「ゐゑ」がちと心配。
投稿日時 - 2015-01-24 22:12:05
「ゐ、ゑ」は無いのですが、拗音、促音、撥音には対応する形を取っています。
例えば後藤さん→カ行_後藤、パトリック→ハ行_パトリックなど。
問題になっているところなんですが、戻り値の設定の仕方が分かりません。
いろいろな事例がネットに出ているのですが、どのように使っているのか
理解が追いつかないのです。
投稿日時 - 2015-01-25 09:24:02