Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Access 2016)
箇条書きしている内容を行単位で改行する方法について
投稿日時: 20/12/28 11:09:40
投稿者: takatada72

お世話になります。
 
現在、ACCESSのフォームに記載されている内容が見づらいとの指摘を受けて、1行ごとに改行できないかと
悩んでおります。
 
箇条書きの内容には、「・」の文字を区分に使っており、「・」を改行のポイントにできるかと考えており
ます。
 
ボタンをクリックするだけで、下記のように変換ができると良いのですが、どのようにVBAを組めば良いの
かが理解できなくこちらへ投稿させて頂きました。
※色々とネットを見てみたのですが、ヒントが見つからなかったために投稿しました。
 
例:・梱包は、2箱に対応 ・箱には、シールにて内容物を記載する ・梱包内には、店舗向け連絡ペラ紙を同梱する。。。
 
                      ↓
下記のように改行したようにしたいのです。
・梱包は、2箱に対応
・箱には、シールにて内容物を記載する
・梱包内には、店舗向け連絡ペラ紙を同梱する。
 
宜しくお願い致します。

投稿日時: 21/01/04 11:06:13
投稿者: takatada72

お世話になります。
 
ネット検索で、下記のようなコードが見つかりました。ただ、実行後に、1行目と最終行に
余計な行が出きしまうため、ご指導頂けないでしょうか
※VBAの内容が理解できないためお願いしたいと思います。
 
    Dim vaspl As Variant
    Dim vret As Variant
    
    'コンマ区切りで分割
    vaspl = Split(Me!備考, "・", -1, vbTextCompare)
    Me!備考 = ""
 
    '分割結果を一行づつ表示する
    For Each vret In vaspl
        Me!備考 = Me!備考 & vret & vbCrLf & "・"
    Next
 
結果:
・梱包は、2箱に対応 ・箱には、シールにて内容物を記載する ・梱包内には、店舗向け連絡ペラ紙を同梱する。。。
                  ↓
 空白行が1行できてしまった。
・梱包は、2箱に対応
・箱には、シールにて内容物を記載する
・梱包内には、店舗向け連絡ペラ紙を同梱する。
・  内容が無い行ができてしまった。
 
年明けにてお忙しいとは思いますが宜しくお願い致します。

回答
投稿日時: 21/01/04 11:29:45
投稿者: Suzu

引用:
ネット検索で、下記のようなコードが見つかりました。ただ、実行後に、1行目と最終行に
余計な行が出きしまうため、ご指導頂けないでしょうか
※VBAの内容が理解できないためお願いしたいと思います。

 
今は、希望の動作が 得られれば良いとお考えなのでしょうが
メンテナンスを行うのが あなたなの業務なのであれば実装するコードに責任をもつ必要があると思います。
ヘルプはご覧になりましたでしょうか?

投稿日時: 21/01/05 13:14:34
投稿者: takatada72

こんにちは、まずは、私が探しもとめた内容には、至ったのですが、綺麗に解決した
わけではないため、次なる質問をさせて頂いております。
質問を別投稿しなければいけないのでしょうか
 
ヘルプを見たのですが、質問の所にも記載させて頂きましたが、VBAを理解されている
方々より、理解ができていないため、ヘルプをどのように開いて、どのように解決する
べきなのかも分からない状況です。
 
また、冷やかしでの指摘は、ご遠慮頂きたいのです。
 
質問者のくせに生意気な事を言うようですが、質問に対しての回答のヒントをして頂ける
のであれば嬉しいのですが、そうではない投稿であるため言ってしまいました。
 
 
ヒント頂けないでしょうか
結果:
・梱包は、2箱に対応 ・箱には、シールにて内容物を記載する ・梱包内には、店舗向け連絡ペラ紙を同梱する。。。
                  ↓
 空白行が1行できてしまった。
・梱包は、2箱に対応
・箱には、シールにて内容物を記載する
・梱包内には、店舗向け連絡ペラ紙を同梱する。
・  内容が無い行ができてしまった。

回答
投稿日時: 21/01/05 15:59:24
投稿者: Suzu

引用:
ヘルプを見たのですが、質問の所にも記載させて頂きましたが、VBAを理解されている
方々より、理解ができていないため、ヘルプをどのように開いて、どのように解決する
べきなのかも分からない状況です。
 
また、冷やかしでの指摘は、ご遠慮頂きたいのです。
 
質問者のくせに生意気な事を言うようですが、質問に対しての回答のヒントをして頂ける
のであれば嬉しいのですが、そうではない投稿であるため言ってしまいました。

 
文章の表現に問題がありました。不快な思いをさせてしまい申し訳ありませんでした。
 
「ヘルプ」と記したのは、欲しい機能自体をヘルプで検索して欲しかったのです。
引用:
箇条書きの内容には、「・」の文字を区分に使っており、「・」を改行のポイントにできるかと考えており
ます。
  
ボタンをクリックするだけで、下記のように変換ができると良い

 
「・」→「・vbCrLf」にしたいのですよね?
 
この機能 を VBAに限らず、Access/Excel/Word において一般機能で実現しようとした時どうしますか?
「置換」の機能を使用しませんか?
 
その言葉を ヘルプで検索して欲しかったのです。
 
F1 を押せば ヘルプが出てきます。そこで、「置換」を検索すれば、「Replace関数」がヒットします。
 
【これが使えそうかも】 を見つける事ができます。
 
そこからテストを含め試行錯誤してみるのです。
 
また、AccessのVBAのヘルプだけでなく、
クエリやフォーム でも F1 を押し 置換を検索すると、Replace関数が表示されます。
つまり、クエリやフォームでも使える事が判ると思います。
 
そうなると、
「VBAではなく、クエリにて、
 Replace関数を用い、求める値を得ることができるかもしれない。」
ここまで行けば、VBA が必要ないことが判ると思います。
 
Replace 関数を 実際にテストしてみてください。
 
置換後の値と、希望の結果 違いが出るはずです。
それが、「なぜ発生するのか」を ご自分で探し、その対策を行うのです。
 
これは、VBA云々ではありません。
Excelの関数でも、組み合わせて 希望の結果を得ようとしませんか?
 
今回のご質問は その 『なぜ』 を 考えようとせず 答え だけを 求めている様に当方には見えました。
 
一般機能で クエリを使い テーブルのデータはそのままで
関数を使い希望の様に見せることが可能です。
 
前述のReplace関数 の他に、Mid関数を使います。
かんばってください。
 
 
あくまでも VBA でと言う事であれば
【VBA 変数 シングルステップ ローカルウィンド】を WEBにて検索してみてください。
 
一行づつコードを進めながら 各変数 の値を確認する方法が見つかります。
VBAのコードの デバック においては必須の手順です。
https://asatte.biz/excel-vba-localwindow/

投稿日時: 21/01/06 08:32:32
投稿者: takatada72

Suzuさん
 
文句を言ってしまい申し訳ありませんでした。
 
ただ、VBAが理解しきれていない自分にとっては、ヘルプを開いても
直ぐに、置換を思いついたり、関数名でピーンときたりしないため、
Suzuさんが言われているように進むことができない自分が悲しいです。
 
その所を教えて頂ける方々もわかって頂けると嬉しいかと考えます。
あまえですかね
 
Suzuさんがヒントを出して頂いた内容を元に、ヘルプを確認させて頂き
たいと考えております。
 
時間はかかると思いますが、報告をさせて頂きます。
 
ありがとうございました。

回答
投稿日時: 21/01/06 10:00:49
投稿者: Suzu

VBAは、Officeソフトの手動での操作を 自動化する為のツールです。
ですので、Officeソフトの 一般機能 について、理解できていて 使いこなせる事になります。
 
Accessでも Excel でも
元の
「・梱包は、2箱に対応 ・箱には、シールにて内容物を記載する ・梱包内には、店舗向け連絡ペラ紙を同梱する」
から
「・梱包は、2箱に対応
・箱には、シールにて内容物を記載する
・梱包内には、店舗向け連絡ペラ紙を同梱する。」
に、
・テーブル上(Excelであれば セル)の 値を 見せたい値に書き換える
・テーブル上(Excelであれば セル)の 値は そのままに見え方を変える
の両方の方法があります。
元のデータを「書き換える」「書き換えない」はデータの使い方に拠って使い分けます。
 
例えば、2021/01/06 の 「データ」があって、2021年1月6日 と 見せたい。
 
・値を書き換える
※ → 手で書き換える
     → 置換を用いて書き換える
   →Accessであれば、更新クエリを用いて書き換える
 
・元の値はそのままで、そうみえる様に設定する
    →Excelのセルの値や、Accessの日付時刻型のフィールドの値であれば 書式 を変える
    →Excelのセルの値や、Accessの日付時刻型のフィールドの値であれば
           別セル/クエリ・テキストボックスのコントロールソース に関数を用いて表示
      Excel: =TEXT(A1,"yyyy年m月d日")
      Access: =Format([フィールド名],"yyyy年m月d日")
  →Accessのテキスト型フィールドの値であれば クエリ・テキストボックスのコントロールソース
   に関数を用いて表示
    式1: Left([備考],4) & "年" & Val(Mid([備考],6,2)) & "月" & Val(Right([備考],2)) & "日"
 
手法としては色々考える事ができます。
 
今回のVBAで行おうとしているのは、1件のデータに対し手で書き換える をVBAで自動化を行っています。
 
Accessですので、同じようなデータが沢山ある事が予想できます。
 
クエリやテキストボックスで関数を用いれば
全レコードに対し 一括で改行を入れる様に見せる事が可能です。
或いは更新クエリに適用し、テーブルのデータを書き換える事も可能です。
 
今回は、データを残す/残さない を 検討した上で
・クエリやテキストボックに関数を指定
・更新クエリ
のどちらかで良いと思います。
 
VBA以前に、一般機能 を 習得する事をお勧めします。

回答
投稿日時: 21/01/13 12:09:39
投稿者: sk

引用:
箇条書きしている内容を行単位で改行

引用:
ACCESSのフォームに記載されている内容が見づらいとの指摘を受けて、
1行ごとに改行できないか

引用:
vaspl = Split(Me!備考, "・", -1, vbTextCompare)

・フォームのカレントレコードの連結テキストボックス[備考]の
 値の編集に際し、任意の位置でテキストを改行させたい。
 
・フォームのレコードソースであるテーブルには、
 テキスト型のフィールド[備考]に「改行文字を含まないテキスト」が
 格納されているレコードが既に存在している。
 それら全てのレコードの[備考]の値に、
 "・"を各行の行頭文字として扱う形で
 改行文字を挿入したい。
 
どちらの意味でおっしゃっているのでしょうか。
 
前者なら、とりあえず連結テキストボックス[備考]の
[Enterキー入力時動作]プロパティ
「フィールドに行を追加」と設定なさればよろしい
のではないでしょうか。

投稿日時: 21/01/13 13:27:53
投稿者: takatada72

skさん
 
ご回答をありがとうございました。
ここの所、通常業務の方で手一杯だったので、こちらを確認できませんでした。
今日、たまたま、確認したら、SKさんが投稿して頂いているのを見つけました。
 
[備考]に書かれている内容は、「・」で区切られた内容です。「・」を各行の
行頭文字として扱う形で改行文字を挿入したい。と言うことになります。
 
こちらについて、ご指導頂けないでしょうか
 
VBAとコマンドの関係がまで、良く理解できていないのです。
 
お忙しいとは思いますが宜しくお願い致します。

投稿日時: 21/01/13 13:30:04
投稿者: takatada72

また、vaspl = Split(Me!備考, "・", -1, vbTextCompare)は、ネットで見つけたものを
ACCESSのボタンに記載しただけなので、意味がわかっていないのも事実です。
 
お忙しいとは思いますが宜しくお願い致します。

回答
投稿日時: 21/01/13 14:53:30
投稿者: sk

引用:
[備考]に書かれている内容は、「・」で区切られた内容です。
「・」を各行の行頭文字として扱う形で改行文字を挿入したい。
と言うことになります。

ならば既に Suzu さんが提案されているように、
Replace 関数を用いた選択クエリ(挿入した結果の表示のみを行ないたい場合)、
または更新クエリ(各レコードの[備考]の値そのものを書き換えたい場合)を
使用なさればよろしいでしょう。
 
(選択クエリの SQL ビュー)
------------------------------------------------------------
SELECT [テーブル名].*,
       IIf([テーブル名].[備考] Like "・*",
           "・" & Replace([テーブル名].[備考],"・",Chr(13) & Chr(10) & "・",2),
           Replace([テーブル名].[備考],"・",Chr(13) & Chr(10) & "・")) AS [備考に改行文字を挿入した結果]
FROM [テーブル名];
------------------------------------------------------------
(テーブル/フィールドの名前は適宜修正すること)

トピックに返信