
いつもお世話になっております。
現在、Accessに、10テーブル、合計100カラム、データ数20万件程度入っております。
その中から、半角カナが含まれるテーブル名、カラム名を抽出したいのですが、このようなことは可能でしょうか。
条件として、1文字でも含まれておれば抽出対象としていただきたいです。
現在は、ひとつひとつEXCELに抽出し、半角カナを全角カナに変換してEXACT関数でFALSEのものを探しています。
今回、Accessをもっと有効に使いたいと思い投稿をさせていただきました。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
解決されていましたら、スルーしてください。
抽出するだけでOKなのですか?
Access のバージョンが2000以降(2000含む)での一例となります。
mdbの全てのテーブルに対して、半角カナを含むレコードを抽出するクエリをテーブル単位で作成します。
クエリを作成し、メッセージ表示後、クエリ単位でExcel出力します。
(実行性能:結構時間かかります)
(出来上がったクエリの抽出条件が何個か、レコード数がいくつかで左右されます)
(以下関数 KCNT が何回呼び出されるかに、左右されます)
手順)
・mdbのバックアップを取ります(必須)
・mdbを起動します
・Visual Basic Editorを起動します
・参照設定で「Microsoft DAO 3.6 Object Library」が参照されていることを確認します
・標準モジュールを挿入します
・先頭1行を削除し、以下を貼り付けます
Option Compare Binary
Option Explicit
Public Function KCNT(sMoji As Variant) As Long
Dim iRet As Long
iRet = 0
If (Not IsNull(sMoji)) Then
If (sMoji Like "*[" & ChrW(&HFF61) & "-" & ChrW(&HFF9F) & "]*") Then
iRet = 1
End If
End If
KCNT = iRet
End Function
Private Function SumField(sFieldName As String) As String
SumField = "SUM(KCNT([" & sFieldName & "])) AS '_" & sFieldName & "'"
End Function
Private Function RetFieldName(sFieldName As String) As String
RetFieldName = Mid(Replace(sFieldName, "'", ""), 2)
End Function
Public Sub Sample1()
Dim tdf As DAO.TableDef
Dim clm As DAO.Field
Dim rs As DAO.Recordset
Dim rsField As DAO.Field
Const Q_H As String = "Q_HKANA_"
Dim qdf As DAO.QueryDef
Dim sMes As String
Dim sSql As String
Dim sTmp As String
On Error Resume Next
sMes = ""
CurrentDb.TableDefs.Refresh
For Each tdf In CurrentDb.TableDefs
If ((Not tdf.Name Like "MSys*") And (Not tdf.Name Like "~TMP*")) Then
sTmp = ""
For Each clm In tdf.Fields
If (clm.Type = dbText) Then
sTmp = sTmp & ", " & SumField(clm.Name)
End If
Next
If (Len(sTmp) > 0) Then
sSql = "SELECT " & Mid(sTmp, 3) & " FROM [" & tdf.Name & "];"
Set rs = CurrentDb.OpenRecordset(sSql, dbOpenForwardOnly)
If (Not rs.EOF) Then
sTmp = ""
For Each rsField In rs.Fields
If (Nz(rsField.Value, 0) > 0) Then
sMes = sMes & tdf.Name & ", " & RetFieldName(rsField.Name) & ", " & rsField.Value & "個" & vbCrLf
sTmp = sTmp & " OR (KCNT([" & RetFieldName(rsField.Name) & "]) = 1)"
End If
Next
If (Len(sTmp) > 0) Then
sSql = "SELECT * FROM [" & tdf.Name & "] WHERE (" & Mid(sTmp, 5) & ");"
sTmp = Q_H & tdf.Name
CurrentDb.QueryDefs.Refresh
CurrentDb.QueryDefs.Delete sTmp
CurrentDb.CreateQueryDef sTmp, sSql
End If
End If
rs.Close
Set rs = Nothing
End If
End If
Next
MsgBox sMes
CurrentDb.QueryDefs.Refresh
For Each qdf In CurrentDb.QueryDefs
If (qdf.Name Like Q_H & "*") Then
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, qdf.Name, qdf.Name & ".xls", True
End If
Next
End Sub
手順続き)
・Sub/ユーザーフォームの実行(再生ボタンみたいなボタン表示をクリック)で「Sample1」を選択し、実行します。
(カーソルが Sample1 内にあれば、即実行されます)
処理概要)
テーブルのテキスト型フィールドに対して、半角カナが何レコードあるか調べます。
テーブル名:tbl テキスト型フィールド名:F1 , F2 の場合
SELECT SUM(KCNT([F1])) AS '_F1', SUM(KCNT([F2])) AS '_F2' FROM tbl;
関数 KCNT は、半角カナがあれば=1、なければ=0
上記抽出結果が >0 の場合、作るクエリの抽出条件として
(KCNT([フィールド名]) = 1) を作り込み
複数ある場合には、OR で連結
半角カナがないフィールドは、抽出条件に入れません
クエリを作成(テーブル名先頭に "Q_HKANA_" を付加した名前で)
メッセージボックスで、テーブル名、フィールド名、半角カナが何レコードあったか表示します。
各クエリの内容でExcel出力します。
(Excelファイル名は、クエリ名.xls)
(場所は、mdbと同じフォルダか、オプション内全般「既定のデータベースフォルダ」の所になります)
(既に同名のExcelファイルがある時、DoCmd.TransferSpreadsheet の動作の通り)
※ 作成したクエリを実行する(開く)際には、VBEは終了させておいてください。
(VBEを起動したままでは、かなり時間がかかります)

No.1
- 回答日時:
Access の VBA で独自の関数を作ってみました。
標準モジュールに下記のように記述して保存。
(行頭のスペースは便宜上全角スペースにしているので、コピペする場合は半角スペースに換えてください)
---- 標準モジュール ここから ----
Option Compare Binary
Option Explicit
Function ContainHankaku(aSource As String) As Boolean
ContainHankaku = False
If aSource Like "*[。-゜]*" Then
ContainHankaku = True
End If
End Function
---- 標準モジュール ここまで ----
次にクエリのデザインビューの下段、"フィールド" のところに
Result: ContainHankaku([テーブル名]![列名])
テーブル名と列名は実際の名前を入れてください。
SQL で書けばこんな感じ。
テーブル名: tbl01
列名: m01ID, m01Name
半角チェックをする列: m01Name
とすると、
SELECT tbl01.m01ID, tbl01.m01Name, ContainHankaku([tbl01]![m01Name]) AS Result
From tbl01
ORDER BY tbl01.m01ID;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Access(アクセス) Access で半角スペースと全角スペースの区別について 3 2022/11/05 23:54
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- PHP Postgresの特定のカラムからスペースを取る方法 1 2023/02/22 13:18
- Excel(エクセル) Excel でマクロ利用しセル内テキストを修正しております(半角カナを全角にするなど)。 ただ、セル 4 2023/06/15 21:29
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS2000 クエリをテーブル化...
-
クロス集計クエリの結果をテー...
-
クエリのデータをテーブルに入...
-
デザインビューにてテーブルが...
-
アクセスのクエリでSplit関数は...
-
ACCESS テーブル作成の日付付与...
-
Access「レコードが削除されま...
-
Access DAOのExecuteメソッドの...
-
access テーブル作成クエリでテ...
-
Accessのクエリで、抽出条件で…...
-
access インポート時、既にある...
-
ACCESSでアンケート調査→回答ごとの...
-
テンポラリファイルのための空...
-
テンポラリファイルの空き容量
-
accessでクエリの結果だけをリ...
-
ACCESSでテーブルの一部だけを...
-
アクセス
-
ACCESSで行数指定(5万行目~8...
-
クロス集計クエリの結果を一時...
-
Accessにてテーブルが異なるデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クロス集計クエリの結果をテー...
-
デザインビューにてテーブルが...
-
accessでクエリの結果だけをリ...
-
アクセスのクエリでSplit関数は...
-
Access「レコードが削除されま...
-
アクセス 項目毎にデータを横...
-
クエリのデータをテーブルに入...
-
アクセス:クエリの結合とリレ...
-
教えてください! アクセスのac...
-
access テーブル作成クエリでテ...
-
access インポート時、既にある...
-
更新不可能なクエリに対して更...
-
ACCESSでテーブルの一部だけを...
-
ACCESSで行数指定(5万行目~8...
-
アクセスで新しいレコードの追...
-
Access2010「クエリが複雑すぎ...
-
Accessのクロス集計→テーブル作...
-
アクセスのクエリとDlookupはど...
-
Access DAOのExecuteメソッドの...
-
Access テーブルを検索し関連性...
おすすめ情報