メモ型データ内にあるデータの中から、ある特定の文字を検索して、それを所定の文字に置換すると共に、改行をするという処理をフォームのコマンドボタンのクリックイベントに割り当てたいのですが、どのようにすればよいでしょうか?
 具体的にいうと、1のデータを、2のデータに置き換えたいということです。
 1.30 米,麦;40 ビデオ,テレビ
 2.【30】 米,麦
   【40】 ビデオ,テレビ

このQ&Aに関連する最新のQ&A

A 回答 (1件)

非連結のテキストボックス<テキスト0>に元の文があれば、コマンドボタン<コマンド2>で<テキスト0>を書き換えます。



質問の改行の位置らしき『;』や数字と文字を分けるスペースが全角か半角かはっきりしないので、下記では最初に半角に置き換えて判定しています。参考にして下さい。理屈では何行にでもなります。

Private Sub コマンド2_Click()
  Dim moji As String
  Dim potLF As Integer '改行を行う文字の位置
  Dim potSpc As Integer '数字と文字の区分け位置
  Dim elm As String '1行分の文字
  Dim mojiWork As String 'ワーク変数

  moji = テキスト0
  moji = Replace(moji, ";", ";", , , vbTextCompare)
  moji = moji & ";"
  potLF = InStr(moji, ";")
  While potLF > 0
    elm = Left(moji, potLF - 1)
    potSpc = InStr(Replace(elm, " ", " ", , , vbTextCompare), " ")
    '文字の整形
    elm = "【" & Left(elm, potSpc - 1) & "】 " & Right(elm, Len(elm) - potSpc)
    mojiWork = mojiWork & elm & vbCrLf

    moji = Right(moji, Len(moji) - potLF)
    potLF = InStr(moji, ";")
  Wend
  テキスト0 = Left(mojiWork, Len(mojiWork) - 2)
End Sub
    • good
    • 0
この回答へのお礼

できました。本当にありがとうございました。

お礼日時:2001/08/08 03:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QAccess97でデータを置き換えたい

テーブルにある文字列の一部を違う言葉に置き換えたいのですが・・・
同じテーブルに置き換えるか、別テーブルを作るかできればよいのですが。
全てのデータに入っているフィールドと、入っていないフィールドがあります。
できればVBAなどは使わずにできないものでしょうか?

Aベストアンサー

 Accessには、「編集メニュー」に「置換」というものがあります。
 これを使うと、任意のフィールド内の任意の文字列を別の文字列に置換できます。
 ポイントとしては、置換するフィールドクリックしてから、メニュー操作を行ないます。置換のダイアログでは、検索条件として「フィールドの一部分」「フィールド全体」「フィールドの先頭」を選べます。
 ご質問では、Accessのバージョンも書かれていないので、詳しい条件などは、ヘルプをご覧ください。

QSUMIF文で所定の複数の数字があったら足し合わせる場合

SUMIF(A1:A9,"1",A1:A9)

だとA1:A9の範囲に1があったら足し合わせる
のですが、
1か2か3があったら足し合わせたいものです。どうしたらいいでしょうか?

現状では
SUMIF(A1:A9,"1",A1:A9)
+
SUMIF(A1:A9,"2",A1:A9)
+
SUMIF(A1:A9,"3",A1:A9)
でしのいでいます。

Aベストアンサー

こんにちは~

別解です。

=SUM(SUMIF(A1:A9,{1,2,3}))

と入れて、フツーに Enterで確定してください。
*
SUMIF(A1:A9,{1,2,3})
で、条件 1、2、3 のそれぞれの合計値の配列データをつくります。

数式バーで、(SUMIF(A1:A9,{1,2,3})) の部分だけをマウスでドラッグして、F9キーを押せば配列データがわかります。( 元に戻すのは ESCキー )
例ですが、
=SUM{3,6,9}

のようになれば、3→条件 1の合計値、6→条件 2の合計値、9→条件 3の合計値です。
それを SUM関数で合計すれば、条件が 1 または 2 または 3の場合の合計値が出ます。
*
それと、ちょっと気になったことを・・
SUMIF関数の書式は、
SUMIF(範囲, 検索条件, 合計範囲)

ですが、範囲と合計範囲が同じ場合、合計範囲は省略できます。

また、1、2、3 のように数値データでは、"1" のようにダブルクォーテーションで囲む必要はありません。

ですから、条件が 1だけなら、
=SUMIF(A1:A9,1)

のようになります。

こんにちは~

別解です。

=SUM(SUMIF(A1:A9,{1,2,3}))

と入れて、フツーに Enterで確定してください。
*
SUMIF(A1:A9,{1,2,3})
で、条件 1、2、3 のそれぞれの合計値の配列データをつくります。

数式バーで、(SUMIF(A1:A9,{1,2,3})) の部分だけをマウスでドラッグして、F9キーを押せば配列データがわかります。( 元に戻すのは ESCキー )
例ですが、
=SUM{3,6,9}

のようになれば、3→条件 1の合計値、6→条件 2の合計値、9→条件 3の合計値です。
それを SUM関数で合計すれば、条件が 1 または...続きを読む

QSQL文で、1,2,3、以外(0とかブランク)を1と見立てて集計したい

データを取り出す時次のように書きます
SELECT テーブル1.id, テーブル1.kubun FROM テーブル1;

このフィールドkubun、は本来、1、か、2、ですが
例外的にブランクや0(ゼロ)が入っています。
フィールドkubun、がブランクやゼロだったら、1に変換
しながら、テーブル1から集計するSQL文はないでしょうか?

テーブル1を前もって変換しておけが、いいのですが
そうした方法を使わず、集計の時に行いたいのですが

Aベストアンサー

単純にやるなら、REPLACE(フィールド名, 該当する値, 変換する値) にするのはどうでしょうか。
この例でいくと
SELECT テーブル1.id, REPLACE(テーブル1.kubun,0,1) FROM テーブル1
って感じですかね。
※上の例は0を1にする形にしかしてません。

ブランクとは、全なのか半なのかわかりませんがこれもネストさせれば
十分対応できるかと思います。

ただし、nullの場合は IsNullなどを使わなければいけません。

Q抽出条件が複数ある場合で,抽出元のデータに未入力がある場合

Accessを利用して住所録のデータベースを作成しています。

検索用フォームのレコードソースにクエリを指定して,フォーム上にテキストボックスを2つ配置し,コマンドボタンをクリックして抽出結果をフォームに表示させます。一つめのテキストボックスには氏名,二つ目のテキストボックスには,勤務先の入力をします。以下の条件での検索結果をフォーム上に表示させたいのですが,(3)の場合に,勤務先がない(未入力の)人のデータも同時に抽出されてしまいます。

(1)氏名のみの条件で該当する人
(2)氏名及び勤務先の条件で該当する人
(3)勤務先のみの条件で該当する人
(4)条件を入力しない場合

<住所録>
ID___氏名_________フリガナ___________勤務先
1____鈴木 健一__スズキ ケンイチ__新日本商事
2____中村 主水__ナカムラ モンド___新日本商事
3____山田 太郎__ヤマダ タロウ_____


クエリには
WHERE ((([tbl THE CARD].氏名) Like "*" & [Forms]![frm_検索用]![氏名] & "*") AND (([tbl THE CARD].勤務先) Like [Forms]![frm_検索用]![勤務先] & "*")) OR ((([tbl THE CARD].氏名) Like "*" & [Forms]![frm_検索用]![氏名] & "*") AND ((([tbl THE CARD].[勤務先]) Like [Forms]![frm_検索用]![勤務先] & "*") Is Null)) OR ((([tbl THE CARD].勤務先) Like [Forms]![frm_検索用]![勤務先] & "*"))
ORDER BY [tbl THE CARD].ID;
と記載しました。

例えば,氏名と勤務先の両方の検索結果を表示させる場合,
・氏名が該当し,勤務先が空白のデータ
が抽出されます。氏名と勤務先の両方に検索条件をいれたときには,勤務先が空白のデータを抽出しないようにしたいのですが,どうしたら良いでしょうか。氏名だけで検索するときには,勤務先が空白かどうかは考慮しない結果を表示させたいと思います。

過不足があると思いますが,ご指導宜しくお願いします。

Accessを利用して住所録のデータベースを作成しています。

検索用フォームのレコードソースにクエリを指定して,フォーム上にテキストボックスを2つ配置し,コマンドボタンをクリックして抽出結果をフォームに表示させます。一つめのテキストボックスには氏名,二つ目のテキストボックスには,勤務先の入力をします。以下の条件での検索結果をフォーム上に表示させたいのですが,(3)の場合に,勤務先がない(未入力の)人のデータも同時に抽出されてしまいます。

(1)氏名のみの条件で該当する人
(2)氏名及...続きを読む

Aベストアンサー

横レス失礼致します。

No.1の方の組み方では、検索条件とするフィールドを追加するほど、複雑になっていきます。
VBAで対応されるのでしたら、以下のようにした方が、簡単にフィールドの追加ができます:


Private Sub 表示_Click()
On Error Goto エラー処理

  Dim StrWhr As String   'Where条件式
  Dim StrMsg As String   '表示メッセージ
  Dim StrSrc As String   'レコードソース
  Dim stDocName As String   '表示用フォームの名前

  '検索条件が指定されているもののみを、Andで順次連結してWhere条件式を作成
  If Nz(Me!氏名, "") <> "" Then
    StrWhr = "氏名 Like '*" & Me!氏名 & "*'"
  End If
  If Nz(Me!勤務先, "") <> "" Then
    StrWhr = IIF(StrWhr = "", "", StrWhr & " And ") & "勤務先 Like '*" & Me!勤務先 & "*'"
  End If
  If Nz(Me!住所, "") <> "" Then
    StrWhr = IIF(StrWhr = "", "", StrWhr & " And ") & "住所 Like '*" & Me!住所 & "*'"
  End If
  '以降、検索条件を入力するテキストボックスごとに、以下のセットで追加すればOKです。
  'If Nz(Me!○○, "") <> "" Then
  '  '曖昧検索の場合
  '  StrWhr = IIF(StrWhr="", "", StrWhr & " And ") & "○○ Like '*" & Me!○○ & "*'"
  '  '完全一致検索(数値型)の場合
  '  'StrWhr = IIF(StrWhr="", "", StrWhr & " And ") & "○○ = " & Me!○○
  'End If

  '↓~~~OpenFormのWhere条件で絞り込みをする場合、ここの一団は不要~~~↓
  If StrWhr="" Then
    StrSrc = "Select * From [tbl THE CARD] Order By ID;"
  Else
    StrSrc = "Select * From [tbl THE CARD] Where " & StrWhr & " Order By ID;"
  End If
  '↑~~~OpenFormのWhere条件で絞り込みをする場合、ここの一団は不要~~~↑

  '確認メッセージで「OK」を選択したら、絞り込み(または解除)を実行
  If MsgBox(StrMsg, vbOKCancel, "確認") = vbOK Then
    'レコードソースの切替で対応する場合
    '(フォーム側のレコードソースは空白にしておくと、コントロールに一瞬エラーが表示
    ' されるものの、表示は速くなります)
    DoCmd.OpenForm stDocName
    Forms(stDocName).RecordSource = StrSrc
    'フィルタ条件で対応する場合(一旦レコードを読み込んでからの絞り込みになる分、
    ' 表示は遅くなります)
    'DoCmd.OpenForm stDocName, , , StrWhr
  End If

終了処理:
  Exit Sub
エラー処理:
  MsgBox Err & Error$, , Me.Name & " 表示"
  Resume 終了処理
End Sub


・・・以上です。

横レス失礼致します。

No.1の方の組み方では、検索条件とするフィールドを追加するほど、複雑になっていきます。
VBAで対応されるのでしたら、以下のようにした方が、簡単にフィールドの追加ができます:


Private Sub 表示_Click()
On Error Goto エラー処理

  Dim StrWhr As String   'Where条件式
  Dim StrMsg As String   '表示メッセージ
  Dim StrSrc As String   'レコードソース
  Dim stDocName As String   '表示用フォームの名前

  '検索条件が指定されてい...続きを読む

QWORD 置き換えマクロ 文字の白抜き

超初心者です。
「あいうおえ」という文字を白抜きの文字に一括で置き換えるマクロを作りたいのですが、うまくいきません。
よろしくお願いいたします。

Aベストアンサー

#2 です。すみません。勘違いしました。

白抜き文字の操作手順としては、白抜きにしたい文字列を範囲選択
して[罫線]-[線種とページ罫線と網かけの設定]から[網かけ]タブで、
背景色を設定します。

これを一括で行うコードにしたものです。今回は文字列を聞いてこな
い仕様になっています。コードを眺めて見てください。

Sub フォント白抜き化()

  Dim Rng     As Range
  Dim SelectionEnd As Long
  Dim RngEnd    As Long
  Dim RngRepEnd  As Long
  Dim strKEYWORD  As String
 
  'ユーザーに任意の文字列を指定させる場合
  'strKEYWORD = InputBox(Prompt:="対象文字列を入力")
  'If strKEYWORD = "" Then
  '  Exit Sub
  'End If
  
  '固定の場合
  strKEYWORD = "あいうえお"
  
  Set Rng = Selection.Range
  SelectionEnd = Rng.End
  With Rng.Find
    .ClearFormatting
    .Text = strKEYWORD
    .MatchWildcards = True
  End With

  Do While Rng.Find.Execute And Rng.End <= SelectionEnd
    RngEnd = Rng.End
    With Rng
      '白抜き化
      With .Font.Shading
        .ForegroundPatternColor = wdColorWhite
        .BackgroundPatternColor = wdColorBlack
      End With
      RngRepEnd = .End
      SelectionEnd = SelectionEnd + (RngRepEnd - RngEnd)
      .Collapse wdCollapseEnd
    End With
  Loop
  Set Rng = Nothing

End Sub

#2 です。すみません。勘違いしました。

白抜き文字の操作手順としては、白抜きにしたい文字列を範囲選択
して[罫線]-[線種とページ罫線と網かけの設定]から[網かけ]タブで、
背景色を設定します。

これを一括で行うコードにしたものです。今回は文字列を聞いてこな
い仕様になっています。コードを眺めて見てください。

Sub フォント白抜き化()

  Dim Rng     As Range
  Dim SelectionEnd As Long
  Dim RngEnd    As Long
  Dim RngRepEnd  As Long
  Dim strKEYWORD...続きを読む


人気Q&Aランキング

おすすめ情報