Access2000で文字列の操作について質問です。
前任者が突然退職してしまったため、やり方が分からず困っています。。。
■文字列の操作について
姓(フリガナ)と名(フリガナ)の文字列を下記仕様に変換したいと思います。
【変換前】
姓(フリガナ) 名(フリガナ)
⇒全角カナで2つの項目に分かれている
【変換後】
姓名(フリガナ)
⇒それぞれ半角カナに変換し、1つの項目に結合する
⇒結合後のバイト長は30バイト、右詰で空白は半角スペースで埋める
■レコードのカウント処理について
・条件に合致したレコード数をカウント
・レコード数を右詰にし、前に0をつける(12バイト)
Accessに詳しい方、ご返答いただけると助かります。
No.9ベストアンサー
- 回答日時:
>一度テーブルに出力して、それをファイルに出力しようと
ワークテーブルを作るのはかなり特殊な場合だけですね
普通はクエリで済ませてしまいます
>上記の4つの結果を一つのファイルに出力するのが最終目的です。
4つのテーブルの関係が分かりませんね
つなげられるフィールドはあるのですか?
>C.トレーラ情報
カウントも合計も集計クエリでできますね
その集計クエリをつなげればいいのでは
ご返答ありがとうございます。
>普通はクエリで済ませてしまいます
ご教示ありがとうございます。
クエリで対応することにします。
>4つのテーブルの関係が分かりませんね
テーブルはそれぞれレコードになっています。
これらのレコードが最終的に
テーブルA
テーブルB
テーブルC
テーブルD
の並び順で一つのファイルにし、流し込みデータを生成します。
>つなげられるフィールドはあるのですか?
一部のフィールドをつないでいます。
>カウントも合計も集計クエリでできますね
集計クエリというものを存じ上げませんでした。
CHRONOS_0さんのご回答により、少しずつ分かってきました。
もう少しで形になりそうです。
No.8
- 回答日時:
>レコードのカウント処理はどのようにやれば良いでしょうか?
普通に考えれば集計クエリですが
どこにどのように出したいのかが分からないと回答できませんね
前0をつけるのは
前の回答のスペースを付加するのと同じことです
ご返答ありがとうございます。
今回の流れについて、詳しくご説明します。
■テーブルの種類
下記の4つのマスタテーブルで構成されています。
A.ヘッダ情報
⇒任意の日付(yymm)を入力。右詰で半角スペースで値をセットする。
B.ユーザ情報
⇒先般ご質問している変換処理を行い、変換後に別テーブルB'に値を格納する。
C.トレーラ情報
⇒レコード件数をカウント、値をセットする。
また、金額の合計を算出、値をセットする。
D.エンド情報
⇒既存の値をそのまま流用する。
■処理について
上記の4つの結果を一つのファイルに出力するのが最終目的です。
一度テーブルに出力して、それをファイルに出力しようと考えていましたが、そこまで至っておりません。。。
No.7
- 回答日時:
>別システムへの流し込みデータを生成するためです。
こういう目的ならクエリでいいんじゃないですか
全角カナ=>半角カナ変換はStrConv関数です
固定長文字にするのは前か後ろにスペースをたっぷりつけてから30文字だけ切り出せばいいのです
[姓名(フリガナ)]:Left(StrCnv([姓(フリガナ)] & [名(フリガナ)],8) & Space(30),30)
ご返答ありがとうございます。
ご教示いただいた内容で実行できました。
仰るようにクエリで生成したいと思います。
レコードのカウント処理はどのようにやれば良いでしょうか?
お手数ですが、ご返答いただけると幸いです。
No.6
- 回答日時:
> ⇒それぞれ半角カナに変換し、1つの項目に結合する
ひとつにする理由は?
別れたままでも表示時などに簡単に結合できますよ
半角カナはコンピュータの世界では異端児です全角のままの方がいいのでは
> ⇒結合後のバイト長は30バイト、右詰で空白は半角スペースで埋める
固定長にする理由は?
可変長の方がメモリー効率もいいですよ
それにAccessでは1文字2バイトです30バイトじゃ15文字
姓名のフリガナ文字数としては足りないんじゃないの
ご返答ありがとうございます。
説明不足で申し訳ありません。
データ変換を行う目的は、別システムへの流し込みデータを生成するためです。
このデータの仕様上、カナは半角カナ、レコードは固定長となっています。
また、フリガナ文字数については、入力時に制限しておりますので、
半角カナで30バイトに収まる仕様になっています。
No.5
- 回答日時:
先ほどに続き連投になりすみません。
■文字列の操作について
上記の例で間違いを見つけました。
StrConvはDo Whileの前に行う必要があります。
すみませんでした。
ご返答ありがとうございます。
前述しましたが、VBが全く分かりません。。。
「クエリ」のフィールドの条件式を少し触れるレベルです。
まずはVBから始めることが大事ですね。
No.4
- 回答日時:
■文字列の操作について
LastName = 姓の項目値
FirstName = 名の項目値
TempKanaName = LastName & FirstName
Do While Len(TempKanaName)<31
TempKanaName = ResultKanaName & " "
End Loop
ResultKanaName = StrConv(TempKanaName ,vbNarrow)
■レコードのカウント処理について
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim RecordCount as Integer
Dim Num_I as Integer
Dim ResultCount as String
Dim ZeroSurpress as String
Set DB = CurrentDb()
Set RS = Db.OpenRecordset("なんとかテーブル",dbopenDynaset)
RecordCount = RS.count
ZeroSurpress = "0"
For Num_I = 1 to 12 - Len(Str(RecordCount))
ResultCount = ResultCount & ZeroSurpress
Next
ResultCount = ResultCount & Str(RecordCount)
VBA は久しぶりなので、細かい記述に間違いがあったときはご容赦ください。
ロジックはこのようなもので実現できるかと思いますが、いかがでしょうか。
基本がJAVAなので、VBAとしては汚いソースですみません。
参考になれば幸いです。
No.2
- 回答日時:
[イミディエイト]
? SetR(StrConv("スズキ イチロウ", 8), "----+----1----+----2----+----3")
----+----1----+----2-スズキ イチロウ
? SetR(1, "----+----1--")
----+----1-1
自宅からの回答なので、Access2000 ではなくExcel2003で検証しただけですが・・・。
このようなことを実現したいのでしょう。
ここでは、次の SetR() を利用しています。
Public Function SetR(ByVal Text1 As String, ByVal Text2 As String) As String
Dim I As Integer
Dim J As Integer
Dim L As Integer
Dim M As Integer
Dim N As Integer
J = Len(Text1)
L = LenH(Text2)
For I = 1 To J
M = LenH(Mid$(Text1, 1, I))
If M > L Then
SetR = Left$(Text2, L - N) & Left$(Text1, I - 1)
Exit Function
Else
N = M
End If
Next I
SetR = Left$(Text2, L - N) & Text1
End Function
Private Function LenH(ByVal Text As String) As Integer
LenH = LenB(StrConv(Text, vbFromUnicode))
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(結婚) 名前変更手続きについてです。 来年に結婚が決まり、相手側の名字になります。 それと共にキラキラ寄りな 1 2023/06/02 03:39
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
Path型をString型へ変換する(Java)
-
int型のゼロ埋め
-
Visual Basic でのコードをASCI...
-
javaの文字コード変換について
-
javascriptで文字列のsjis利用...
-
substring バイト単位でやりたい
-
TEXTAREAからのデータを改行入...
-
ダブルクォーテーションのrepla...
-
すみません。助けてください。 ...
-
byte型のマイナスの扱いについて
-
PerlプログラムをJavaに変換す...
-
DBから取得したデータの文字化け
-
下記問題の答えが"D"になる意味...
-
JavaのObjectからintへの型変換...
-
javaの初歩的な質問です。
-
[Javascript]エンターキー押下...
-
JavaのStringクラスに「外字」...
-
C++で10進数をn進数に…
-
"\\n"を"<br>"にうまく変換でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
カタカナをローマジに変換する。
-
int型のゼロ埋め
-
javascriptで文字列のsjis利用...
-
byte[] を long,float とかに...
-
C言語32bitから64bitの移行につ...
-
JavaのStringクラスに「外字」...
-
javaの初歩的な質問です。
-
UTF-8とUnicodeの互換性
-
Visual Basic でのコードをASCI...
-
文字列の比較
-
下記問題の答えが"D"になる意味...
-
[Javascript]エンターキー押下...
-
エクセルVBAで「〜」が表現でき...
-
byte配列をImageに変換する
-
javaで「全角が含まれているか...
-
IBM漢字コード⇒SJIS変換方法
-
COBOLで半角カナを全角カナに変換
おすすめ情報