
AccessクエリーでのLeft$関数について教えてください。
半角英数字と漢字文字列が混在したフィールドから
Left$関数で17バイト抽出したいのですが、
漢字を一文字=1バイトで換算した結果がかえってしまいます。
例)
1001-500本aaa-GG-りんご ⇒ 1001-500本aaa-GG-り
1002-500mLaaa-GG-みかん ⇒ 1002_500mLaa-GG
※[本]が漢字で[mL]は半角英数です。
後で抽出が自由にできるように、
[GG]以前の文字列のバイト数を固定にしていたのですが
全角・半角が混在していると抽出にずれがでてしまうことを知りませんでした。
※[4バイト]+"-"+[8バイト]+"-"+[GG]+"-"としていました。
GGを含むGGより以前の文字列を抽出するにはどうすればよいでしょうか?
(漢字1文字を2バイトと換算しながらLeft$で抽出するには?)
よろしくおねがいいたします。
No.3ベストアンサー
- 回答日時:
>Left$関数で17バイト抽出したいのですが漢字を一文字=1バイトで換算した結果がかえってしまいます
Left関数で指定するlengthの数値はバイト換算ではありません。文字数です。そのため漢字1文字を2バイトとはしません。
Access2000以降(?確か)はテキスト型のフィールドはバイトではなく文字数で管理しています。そのため「全角・半角が混在していると抽出にずれがでてしまう」ではなく「文字数管理を知らなかった」という事になります。
そういう事なので 1001-500本aaa-GG-りんご は 1001-500本aaa -GG-りんご と500本aaaの後にスペースでも1つ入れなくてはAccessでは固定とならなかったのです。
>GGを含むGGより以前の文字列を抽出するにはどうすればよいでしょうか
クエリで抽出するなら("GG"の前にGが入るレコードはないとすれば)
Mid([フィールド名],1,(InStr(1,[フィールド名],"G")+1))
かLeft関数を使用するなら
Left([フィールド名],(InStr(1,[フィールド名],"G")+1))
で簡単に抽出出来ます。
大変わかりやすい解説をありがとうございました。
バイト換算ではなく文字数換算というのがポイントなのですね。
本当に助かりました。
No.2
- 回答日時:
s_husky です。
補足しておきます。
Access クエリーでは、
SELECT CutStr(Table1!Item,"GG",1) AS LeftData FROM Table1;
という組み込み方をします。
No.1
- 回答日時:
Public Function CutStr(ByVal Text As String, _
ByVal Separator As String, _
ByVal N As Integer) As String
Dim strDatas() As String
strDatas = Split("" & Separator & Text, Separator, , 0)
CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
? CutStr("1002-500mLaaa-GG-みかん", "GG", 1)
1002-500mLaaa-
と、上記 CutStr関数を利用すればGGより以前の文字列を抽出できます。
なお、バイト数は、次の関数を利用すると良いでしょう。
Public Function LenH(ByVal Text As String) As Integer
LenH = LenB(StrConv(Text, vbFromUnicode))
End Function
色々とご丁寧に解説していただき本当にありがとうございました。
こちらの方法も一度試してみて、スキルアップさせていただきます。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) exel 漢字・英数字混在セルの入力規則 5 2022/04/03 11:08
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) Excel 文字を抽出したい 4 2022/06/22 11:43
- Access(アクセス) Access で半角スペースと全角スペースの区別について 3 2022/11/05 23:54
このQ&Aを見た人はこんなQ&Aも見ています
-
クエリーで、全角混じりデータの抽出[access95]
Access(アクセス)
-
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
Accessで文字列のバイト数読み込み
Ruby
-
-
4
ACCESS2000,2003テキストエクスポートで全角が半角になってしまう
その他(データベース)
-
5
アルファベットの入った文字列の抽出の仕方について。
Excel(エクセル)
-
6
Accessで、1つの項目に複数の置換えを1度でするには?
Access(アクセス)
-
7
Access_フィールドの文字列に日本語があるかを識別
Access(アクセス)
-
8
Access→Excelへエクスポートすると日付の表示形式が変化する
Excel(エクセル)
-
9
accessで項目内の文字を自動改行させたいと思っています。
その他(データベース)
-
10
アクセスクエリで英数字のみ半角にすることは可能?
Access(アクセス)
-
11
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access2007でSQLの複数列副問い...
-
Accessのクエリーのゼロデータ...
-
Accessクエリで特定の行を削除...
-
Access クエリで連結する文字...
-
access2019 チェックボックスと...
-
Access Left$関数で全角半角が...
-
AccessのテーブルのIDを検索す...
-
access(アクセス):パラメータ...
-
Accessのクエリで1フィールドの...
-
更新クエリでフィールドの値を...
-
Accessのデータの一部を削除す...
-
SQLのLIKE検索で清音と濁音/半...
-
「#エラー」の回避
-
accessのフィールドに10桁の数...
-
アクセスのレポートを印刷する...
-
Accessのレポート上のテキスト...
-
ACCESSのフォームで次のレコー...
-
MS-WORDで、あるフィールドに入...
-
差込印刷で顧客別に複数行のデ...
-
アクセスで入力したデータの順...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリーのゼロデータ...
-
Accessクエリで特定の行を削除...
-
access2019 チェックボックスと...
-
Access2007でSQLの複数列副問い...
-
Access クエリで連結する文字...
-
アクセスのフィルタ nullにつ...
-
Accessのデータの一部を削除す...
-
Accessクエリで年月フィールド...
-
Access Left$関数で全角半角が...
-
Accessのクエリで1フィールドの...
-
Access:固定長文字列ファイル...
-
ACCESS クエリ 抽出条件が多い場合
-
アクセスで任意の件数を抽出す...
-
accessで空白の時の抽出
-
Access2003 削除クエリで式1フ...
-
AccessからExcelへの条件付エク...
-
SQLのLIKE検索で清音と濁音/半...
-
access(アクセス):パラメータ...
-
sqlserverで書式チェックしたい
-
access2000での抽出条件
おすすめ情報