No.3ベストアンサー
- 回答日時:
#2です。
安直にご希望の機能を実現するには、#1と、#2を組み合わせて、式1: IIf(extractNumeric([フィールド名])="",extnum([フィールド名]),extractnumeric([フィールド名]))
とやってはいかがでしょう。
#1のリンク先のFunction extNumは半角数字にしか対応しておりませんので、
コードの最初で全角数字を半角に変換してしまえば、全角にも対応できると思います。
stNum = StrConv(stNum, vbNarrow)
例によって、「ちょっと」試しただけですが、ご参考まで。
(追伸)
#2で、extractNumericの戻り値がVariantなのは、直し忘れですのでstringに変更願います。
また、借り物のconv2numはPrivateで良いですね。
No.7
- 回答日時:
参考です、補足回答します。
字名なので、郵便で使うカスタマバーコードか名寄と思います。千代田区の千は考えなくてよいはず。というならカスタマバーコードをキーワードに検索してもテクニックは見つかると思います。
単に全角数字見つけて半角というなら、クエリ上だけでなくVBAで汎用的に使う関数にしたらと思います。それができたら番地だろうが部屋番号だろうが、要は応用。フォーム、レポート、いろんな場面でも使えるはずです。
ご回答、ありがとうございます。
"郵便で使うカスタマバーコード"、調べてみます。
他にもみなさまからご回答いただいたことを、応用できるようチャレンジしてみます。
非常に助かりました。
No.6
- 回答日時:
エクセルでなくアクセスでした。
すみません。まずは、
漢数字だけ見つけ、漢数字のままででも取り出す、を考えたらと思います。
INSTR関数で文字位置を返しますから、全角数字があるかどうかはこれで判断します。
漢字コードが決まっているので範囲判定で、というのもあります。
漢数字1文字を半角数字にするのは変換テーブルつくればクエリでも出来るので。
「丁目」や「番地」を文字削除したらすっきりします、問題なければ最初にこれでもいいでしょう。
再度ご回答いただき、ありがとうございました。
INSTR関数、他にも使えるシチュエーションがありそうです。
たいへん参考になります。
実は"丁目"や"番地"、"号"といった住所ではお決まりの文言だけでなく、
地名も入ってくるのでReplace関数では難しいと思い、質問させていただいた次第です。
非常に助かりました。
No.5
- 回答日時:
質問文が説明不十分な感じをうけた。
アクセスの質問の場合、
>数字だけを半角にして取り出したいのです、
がどういうように行うのかやVBAが使えるのかなど、決めないと、やり方で回答が大幅に変わり、そっちのほうがずっと難易を決定するとおもう。
この質問の場合、それらの説明が明確でない。
(1)テーブルで隣列にーー直接は難しいと思うが
(2)フォームを使うことになろうが
・ 新しいフィールドを作る
操作だけで隣のフィールドに
関数で隣のフィールドに
VBAで隣のフィールドに
マクロで隣のフィールドに
・ 表示時に見せるだけ
フォームのフィールドに作成
ーー
>半角数字のみを取得したいのですが
これも一読して誤解した。
全角数字を取り出し(半角)数字化したい。数字だけを抜き出すのか、
また半角数字化して元の文字列の位置にもとした戻した文字列をほしいのか。
>半角数字のみを取得したいのですが
こういう場合は全角数字を取得したいというと思う。何処にあるか位置を取得。
置換なら位置は念頭になくて良い場合が多いが。
丁目・番地以外に町字名に漢字数字がある場合があると思うが(例 三番町)これも半角数字化するのか。
これも町字名では少ないので、巻き添えを辛抱しないと、ややこしくなる。
ーー
>取得
求まった文字列を隣のフィールドに全レコードセットしたいのか、テキストボックスなどに表示だけで良いのか。
ーーー
結局、漢数字10文字(壱など無いとして)を置換で半角に指定するのが、一番易しいのでは。
ーー
もし時間があれば質問と外れるが、考えてみてください。
私のやったフォームのテキストボックスに半角数字部分を抜き出すのを挙げておく。
例データ テーブル 町名
IDフィールド2フィールド1
1南町1丁目
21条町北
3新町23
4北野456
51番町15軒家16
ーー
フォームにテキストボックスを2つ設ける。
テキスト4とテキスト6
テキスト4のプロパティのデータのコントロールソース フィールド1
フォームのイベントに
Private Sub Form_Current()
Dim a As String
テキスト4.SetFocus
a = テキスト4.Text
テキスト6.SetFocus
テキスト6.Text = Module1.IsKanji_hankaku(a)
End Sub
ーー
module1に
WEBに記事あり、一部誤りらしいところ修正して
Public Function IsKanji_hankaku(Myword As String)
'全角と半角文字が混在したフィールドから半角文字を抽出する関数
'2個所に出てくると両者結合されてしまう(小生の注)
Dim pos As Integer
Dim Tempword As String
Dim strANSI As String
Dim lchar As Integer, lbyte As Integer
pos = Len(Myword)
Do Until Len(Myword) = 0
strANSI = StrConv(Mid(Myword, 1, 1), vbFromUnicode)
lchar = Len(Mid(Myword, 1, 1))
lbyte = LenB(strANSI)
If lchar * 2 <> lbyte Then
Tempword = Tempword & Mid(Myword, 1, 1)
End If
pos = pos - 1
Myword = Right(Myword, pos)
Loop
IsKanji_hankaku = Tempword
End Function
ーーー
フォームを表示して、レコード移動ボタン?や?をクリックするとそのレコードのフィールド1
のなかの半角文字を抜き出して、テキスト6に表示する。
ーーー
言いたいことは、最終の要望形によって複雑になったり、使う仕掛けが変わることを例示している。
ーーー
「半角数字化して元の文字列の位置にもとした戻した文字列」がほしいときは、上記関数は置換の関数などを各レコードにつき10文字分繰り返すのが易しいと思う。
ーーー
VBAはどうも、というなら、質問にそのことを明記しないとならない。
Access常備の関数に全角数字を半角に直す関数が無いので、難しいと思うが、質問してみる手はある。
ーーー
Googleででも「access 全角 半角 変換」で照会すれば記事が多数出てくる。まずこれを済ませて質問しましたか。
ご回答、ありがとうございます。
申し訳ございません、おっしゃる通り。
下調べも不十分な上、質問内容も言葉足らずでした、、、。
VBAは多少書ける程度ですが、なるべくクエリで済まそうと思っていたり。
次回質問させていただくことがあれば、十分に気を付けます。
サンプル、ありがとうございます。
時間を作って試してみます。
No.4
- 回答日時:
名寄せでは、こういうことは良く使われるテクニックです。
掲示板でなくネットで検索するのがサンプル多くわかりやすいです。
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv258.htm …
リンク先のマクロ欄で「漢数字を半角数字」へ等事例があります。
関数というか、
サンプルを元に変換させる処理をVBAで作成し、
クエリで
出力項目:作った関数(変更前の文字列)
とさせます。
数字を見つけて変換させる処理(文字列)
「1」が存在したら「1」へ置換
「2」が存在したら「2」へ置換
「3」が存在したら「3」へ置換
・・・・
これくらいなら、単純に10行書いた処理でも問題ないと思います。
No.2
- 回答日時:
申し訳ありませんが、偏った回答です。
漢数字にしか対応していません。「八十八号」とかは無いのかなと気になったもので。
標準モジュールに、下記の関数を入力します。
クエリで下記に定義するextractNumeric関数を使うと、
新宿区千二百三十四番地は1234を戻しますが、
千代田区千二百三十四番地は頭の1000になってしまって工夫の余地ありですね(^^;)
なお、Access2000で「ちょっと」試験しております。
Function extractNumeric(targetString As String) As Variant
Dim buf As String
buf = subMatchWord(targetString, "([一二三四五六七八九十百千]+)")
extractNumeric = conv2num(buf, Len(buf), 0)
End Function
Private Function subMatchWord(targetString As String, matchString As String) As String
Dim regEX As Variant
Dim Matches As Variant
Dim match As Variant
Set regEX = CreateObject("VBScript.RegExp")
regEX.MultiLine = False
regEX.Pattern = matchString
regEX.ignorecase = True
regEX.Global = False
On Error GoTo errorHandle
Set Matches = regEX.Execute(targetString)
If Matches(0).subMatches.Count > 0 Then
subMatchWord = Matches(0).subMatches.Item(0)
Else
subMatchWord = ""
End If
Set Matches = Nothing
Set regEX = Nothing
Exit Function
errorHandle:
subMatchWord = ""
End Function
Function conv2num(skan As String, ileng, op) As String
’下記から借用します。Word用の関数ですが、Accessでも大丈夫でした。
'by洋々亭さん。
’http://www.hi-ho.ne.jp/tomita/tips/tips_wd_001.h …
End Function
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) exel 漢字・英数字混在セルの入力規則 5 2022/04/03 11:08
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- その他(Microsoft Office) 英数字のみ全角から半角に変換 4 2023/07/28 14:48
- Excel(エクセル) エクセルの数式で教えてください。 3 2022/10/25 10:52
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/04/01 09:10
- デスクトップパソコン 40年間の悩み キーボードにおいて初期値として漢字ローマ字変換に設定する方法 8 2023/05/08 14:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テプラは半角数字が使えますか?
-
半角の『°(単位の度)』
-
半角スペース
-
半角の×(かける)は?
-
℃の半角表示
-
Excel2016 検索の窓を常時表示...
-
関数を使わずに一括で全角を半...
-
契約書や 公文書・私文書などに...
-
メールアドレスの上ハイフン入...
-
EXCELで、セル内の半角カ...
-
エクセル関数で文字列の中のス...
-
お名前(姓)」には「カタカナ(...
-
半角の漢字の入力方法
-
EXCELの文字列操作で文字数不足...
-
ギリシャ文字 μの出し方
-
EXCEL95 VLOOKUP関数で半角と全角
-
ワードで論文を書こうと思うの...
-
エクセルでひらがな・漢字はそ...
-
ネームランドで二桁数字を打つには
-
ビジネスの文書における、数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テプラは半角数字が使えますか?
-
契約書や 公文書・私文書などに...
-
メールアドレスの上ハイフン入...
-
半角スペース
-
半角の『°(単位の度)』
-
半角の×(かける)は?
-
℃の半角表示
-
EXCELの文字列操作で文字数不足...
-
EXCEL95 VLOOKUP関数で半角と全角
-
関数を使わずに一括で全角を半...
-
エクセル関数で文字列の中のス...
-
【VBA】ファイルパスに半角スペ...
-
半角の漢字の入力方法
-
EXCELで、セル内の半角カ...
-
Excel 文字列の中から数字だけ...
-
ビジネスの文書における、数字...
-
1, (1),(1)の使い分け
-
Excel2016 検索の窓を常時表示...
-
Excel セル内の文字と数字をわ...
-
エクセルで、JIS関数、ASC関数...
おすすめ情報