- 締切済み
ACCESSで改行コードを削除する方法
アクセスでテーブル内の全セルに入っている改行コードを削除したいのですが、ネット上を検索しても中々解決に至らないので質問させてください。 例えば【http://q.hatena.ne.jp/1156520575】の様なスクリプトは様々な物が検索にヒットするのですが、このコードをVBエディターの標準モジュールに入力した後、どのように実行すればいいのでしょうか。 エクセルであれば分かるのですがアクセスは初めてまだ1ヶ月足らずのため、なかなか理解できません。 クエリを使う方法【http://www.accessclub.jp/bbs3/0038/superbeg15657.html】も参考にしたのですが、この方法は対象とするフィールドが少なければ実効に成功しましたが、私の扱っているテーブル(40以上のフィールドが存在し2万行近いデータがある)では検索結果に何もヒットせず実行できませんでした。 この他にもいろいろな方法を検索し検証してみましたが、やはり解決には至りませんでした。 上記の方法の補足をお願いしたいのですが、他によい方法があれば教えて頂きたいです。 理想はテキストエディタの様に置換で解決できれば簡単で良いのですが^^;どうも無理のようです・・・ 環境は ACCESSバージョン:ACCESS 2002(10.2627.2625) Windowsバージョン:WindowsXP Proffessional Version2002 Service Pack 2 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- bonaron
- ベストアンサー率64% (482/745)
ADO,DAO を全く知らなければ、No1さんの回答では辛いでしょうから 比較的、簡単な方法で。 (1)フォーム、新規作成で、元になるテーブルを選択し オートフォーム:表形式でフォームを作成します。 使い捨てですから、デザインは気にせずに。 (2)デザインビューにして フォームフッターまたはフォームヘッダーに ラベルを追加(コマンドボタンのように使いますが、 (フォーカスの関係でラベルにするのがポイントです。) 表示する文字は何でも良い。 (3)ラベルのクリック時のイベントプロシージャに ------------------------------------------------------------- Private Sub ラベル1_Click() Dim fld As String Dim pos As Long Do While True DoCmd.FindRecord Chr(13) & Chr(10), acAnywhere, False, , False, acAll, False If Me.ActiveControl.Name = fld And Me.Recordset.AbsolutePosition = pos Then Exit Do Else Me.ActiveControl = Replace(Me.ActiveControl, vbNewLine, "") fld = Me.ActiveControl.Name pos = Me.Recordset.AbsolutePosition End If Loop MsgBox "終了しました" End Sub -------------------------------------------------------------- のように。 Private Sub ラベル1_Click() の「ラベル1」の部分は実際のラベルの名前で。 (4)一応、保存してから、フォームを開き、 1行目の左端のフィールドにカーソルがある状態で ラベルをクリック。 クリックしても、ボタンと違って見た目は無反応ですが 正常にできれば、終了メッセージが表示されます。
- t-ka
- ベストアンサー率28% (14/50)
あーすいませんbugありました。・・英語でテストしてたもので 日本語にすると文字化けします。 ac = Asc(Mid(st, i, 1))の部分を ac = AscW(Mid(st, i, 1)) に変更してください。 どうぞ宜しく!!
- t-ka
- ベストアンサー率28% (14/50)
一例ですが変換関数を書いてみました参考にどうぞ。 Public Function mozihennkann(mozi As String) As String 'Sub test() Dim st As String Dim ac As String Dim bc As String Dim i As Integer For i = 1 To 1000 st = CStr(mozi) ac = Asc(Mid(st, i, 1)) If ac = (ac = 13) Or (ac = 10) Then Else bc = bc & ChrW(ac) End If On Error GoTo kill: 'Debug.Print ac Next i kill: 'Debug.Print "結果" & bc mozihennkann = bc End Function
- imogasi
- ベストアンサー率27% (4737/17069)
SQLを使うとか高等な方法でなく、一番小回りが効く、ADOに戻って考えれば、なんと言うこともない問題では無いでしょうか。 アクセスのモジュールに Sub ADO001() Dim cn As ADODB.Connection Set cn = CurrentProject.Connection MsgBox cn.Version strPass = CurrentProject.Path strname = CurrentProject.Name MsgBox strPass & "\" & strname Set rs = New ADODB.Recordset rs.Open "社員2", cn fn = rs.Fields.Count Do Until rs.EOF ' MsgBox rs!氏名 & "-" & rs!住所 & "-" & rs!電話番号 For i = 0 To fn - 1 MsgBox Nz(rs.Fields(i)) Next rs.MoveNext Loop rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub を張り付け 例データ テーブル名 社員2 ID 氏名 住所 電話番号 重複 1 山田 三郎 東京都大田区 03-2345-6543 a 2 大島 義男 東京都品川区 042-2345-2345 3 下田 茂 仙台市青葉区 0720-34-3456 a 4 小出 健二 名古屋市緑区 042-345-2345 5 中田 卓 福岡市北区 07523-23456 a に対し実行すると、全てフィールド(フィールド数は上記例にある)はを捉えられました。 後は、Mgboxの行に 各フィールドで、削除のためのReplceを行い、Edit、Updateでレコードを更新すれば良いのでは。処理時間はかかるかも知れないが。 ーー ADOが初耳なら http://www.accessclub.jp/ado/ など読んでください。