Microsoft Access 掲示板

6,622 件中 4,881 から 4,920 までを表示しています。
3

ひょっとして、Wordの表データは、セル内で改行があるものですか。
だとすると、テキストボックスにコピペしたものでは、ちょっと難しいですね。
セル内改行とレコード区切りの改行の区別がつかないので。

下記にWordの表をエクセルに取りこむVBAコードのサンプルがあります。

【VBA】Word文書内の表をエクセルに取り込む | あじゅWeb

Tableオブジェクトを使って、Wordの表をExcelに貼り付ける:VBA/マクロ便利Tips - @IT

上記をAccess用改造すれば、ワードファイルのパスと何番目のテーブルかを指定すれば取り込むことは可能だと思います。

2
セロハン 2020/10/23 (金) 19:57:48 1d451@2b9f5 >> 1

↑タグ部分がすっかり消えていたので書き直します

xmlに変換して確認したのですが、

<td>

で区切られている部分をフィールドに分けて

<tr>

で区切られている部分をテーブルに分けたいです。

今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?

1
セロハン 2020/10/23 (金) 19:55:56 1d451@2b9f5

xmlに変換して確認したのですが、

で区切られている部分をフィールドに分けて

今回の件がwordの中の、表の中身を抜き取ってアクセスにインポートしたいという作業になるので
一旦xmlに変換してそこから表の部分だけコピペというのも手間がかかるように思い、
やはりwordから表の部分を目視でコピペで完結したいのですが…VBAでの処理は難しいでしょうか…?

6
セロハン 2020/10/23 (金) 17:20:29 1d451@2b9f5 >> 4

思ったより問題が単純ではなかったので新しくスレッドを立てます。

5
セロハン 2020/10/23 (金) 15:30:25 1d451@2b9f5 >> 4

上記コードで、別データを扱うことになり、10列ごとに改行してレコードを新しくしたいです。
現在は全てタブ区切りになっています。
spritstrという関数を見つけましたが、accessでは使えなそうです?
どのようにコード指定すればよいでしょうか。

9
どんぐり 2020/10/23 (金) 11:36:35 1d451@2b9f5 >> 8

ごめんなさい。そもそもクエリで設定すれば良かったですね…クエリで設定し、解決しました。

しかし、プロパティで指定する条件とマクロで指定する条件が異なることは勉強になりました…
お騒がせしました。

8
どんぐり 2020/10/23 (金) 11:20:33 1d451@2b9f5

以前教えていただいた、並べ替え条件のプロパティ設定について
更新ボタンにも設置したく、マクロに組み込もうとしたのですが
エラーが出てしまいます。

マクロ>並べ替えの設定>「並べ替え」に下記条件をセット>「式を解析できません」とエラーが出る。

[契約状況]<>"契約中", 最新契約満期日

1つずつつまずいて、申し訳ありません。
VBAでもよいので、教えていただけると助かります…

4
hatena 2020/10/22 (木) 17:15:26 修正

ファイルの内容を見ました。
間違いは下記の部分です。

Const conSelect = "SELECT テーブル1.社員番号, テーブル1.氏名 FROM テーブル12"
Const conOrderBy = "台帳クエリ2.フリガナ"

テーブル名が間違ってます。下記に修正してください。

Const conSelect = "SELECT テーブル1.社員番号, テーブル1.氏名 FROM テーブル1"
Const conOrderBy = "テーブル1.フリガナ"

これで正常動作するのを確認しました。

3

ファイルの方送信致しましたので宜しくお願い致します。

2
まだまだ勉強中。 2020/10/22 (木) 15:57:01 dfb63@96e2f >> 1

早急にご回答頂きありがとうございます。
Formatで書式をし、動作確認を行いました。

 エラーの出る一台を調べたところ、そのPCだけ日付書式設定が 和暦となっており、
こんなところに原因が!と考えてしまいました。
思うように動くようになり、本当に助かりました。
ありがとうございました。😊

1

OSの日付書式設定が他のPCと異なっているのが原因だと思われます。

OSの日付書式設定の影響を受けないようにFormatで書式を設定するといいでしょう。

    If Me.期間至 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "19" & Me.期間至) & "#"
    Else
        strFilter = strFilter & " AND 処理日 < #" & DateAdd("m", 1, "20" & Me.期間至) & "#"
    End If

この部分を下記に修正

    If Me.期間至 > Format(Date, "yy/mm") Then
        strFilter = strFilter & " AND 処理日 < #" & Format(DateAdd("m", 1, "19" & Me.期間至), "yyyy/mm/dd") & "#"
    Else
        strFilter = strFilter & " AND 処理日 < #" & Format(DateAdd("m", 1, "20" & Me.期間至), "yyyy/mm/dd") & "#"
    End If
3

TMGさんの回答で解決済みですが、下記のような方法もあります。

UPDATE T部署 SET T部署.チェック = False
WHERE 管理番号 Like "*3??";
2

オプショングループで50音選択 高速版 - hatena chips

上記のサンプル通りに設定すれば動くはずです。
動かないならどこか間違っていると思います。

どうしてもわからなければ、このページの右カラムの下の方に「ファイル送信フォーム」がありますので、該当ファイルを送付してもらえればそれをみて原因を探れます。
ファイルには関係するテーブル、クエリ、フォームのみにしたものを送付してください。

1

追記です。
もう一度確認したところOp段選択の更新後処理が間違っていました。
訂正すると、レコードに検索キーがないと出たり、式に未定義関数・・・というのは出なくなりましたが、今だにクリックしてもなんの反応もありません・・・

2
nankyoku 2020/10/22 (木) 12:35:01 0029a@1c915

なるほど…1文字だけ抽出しないといけなかったですね。ウッカリしていました。
また、選択クエリで確認すべきというアドバイス、ありがとうございました。

1

選択クエリでRight([管理番号],3)がどんな値を取得しているのか確認すると状況がつかめるかと思います。
おそらくやりたいことは下記の式になるのではないでしょうか?

Left(Right([管理番号],3),1)="3"
2

ありがとうございます。参考にさせて頂きます。

8
hiroton 2020/10/21 (水) 10:30:50 989d9@f966d >> 3

その「ID」は本当に必要ですか?
例えば「タイトル」は主キーになりませんか?

任意の並び順が欲しいのであればそのまま「並び順」フィールドを作って数値で管理し並び替えればいいと思います

これ以上は「ID」をどう使いたいのかも分かりませんし、当初の質問の内容ともずれているので運用の想定も含めて新しく質問を作ってもらえればと思います

7
hiroton 2020/10/21 (水) 10:17:34 989d9@f966d

次月にTODOを持ち越した際、別のTODOが追い越す可能性はないため、年月を変更する際はリセット(リセットボタンを押す)してから変更する予定です。

「年月を変更する際は~変更する」だと、それ以外の場合は変更したくないということですよね?データはどこかに記録しておかないと消えてしまいます。データの記録が必要ならやはりテーブルを持つべきでしょう

システム上で1つだけあればいいデータを保持したいのならたとえば「TsystemProperty」というテーブルを作って
name(テキスト型・主キー)
num(数値型)

namenum
月TODO開始年2020
月TODO開始月10

とすれば、フォーム上からなら

=DLookup("num","TsystemProperty","name='月TODO開始年'")
=DLookup("num","TsystemProperty","name='月TODO開始月'")

の形で参照することができます。

非連結のコントロールで読み込み、変更もしたいならVBAでフォームの読み込み時にデータの読み込み、各コントロールの更新後処理でテーブルのデータ更新を行えば実現できます

Private Sub Form_Load()
    Me!年 = DLookup("num", "TsystemProperty", "name='月TODO開始年'")
    Me!月 = DLookup("num", "TsystemProperty", "name='月TODO開始月'")
End Sub

Private Sub 年_AfterUpdate()
    CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!年,"NULL") & " WHERE name = '月TODO開始年'"
End Sub

Private Sub 月_AfterUpdate()
    CurrentDb.Execute "UPDATE TsystemProperty SET num = " & Nz(Me!月,"NULL") & " WHERE name = '月TODO開始月'"
End Sub
1
ニンジャ 2020/10/20 (火) 20:04:04 f1ed8@2b9f5

少し落ち着いて頭が整理できてきました。上書きするときは更新クエリを使えば良いですよね。ちょっと考え直してみます。

6

下記のサンプルような感じのフォームではどうでしょうか。

月単位でデータ入力する場合の日付入力の効率的なUIを考える - hatena chips

年と月を別のコンボボックスにするのは必ずしも使いやすいとか限らないかも。

別のコンボボックスにしたとしても、年月でフィルターをかける、既定値を設定する、などの部分は参考になると思います。

5
ふせん 2020/10/20 (火) 15:51:41 0029a@1c915 >> 4

間違いました…すみません。テーブルのフィールド名はそれぞれのプレフィックスを外した名前になります。

「完了日」は日付/時刻型です。

テーブルの名づけが良くないのですが、月毎にあるわけではありません。
月毎のTODOで、例えば完了日は終わったことを自覚するために入力するためのもので
次の月になったら上書きしていく予定です。

色々説明不足でお手数をおかけします。

4

フィールドは「txtタイトル」「txt担当者」「txtメールテンプレID」「txt完了日」になります。

これはテーブルのフィールド名で間違いないですか。フォーム上のコントロール名のような感じですが。
あと「txt完了日」フィールドのデータ型は日付/時刻型ですか。

月TODOテーブル

名前からテーブルが月ごとにあるような感じの名前ですが、そういうわけではないですよね。

以上、ご回答お願いします。

3
ふせん 2020/10/20 (火) 15:36:06 0029a@1c915

失礼いたしました。
月TODOテーブル
「ID」(主キー)
フィールドは「txtタイトル」「txt担当者」「txtメールテンプレID」「txt完了日」になります。
また「btnメール作成」も設置予定です。

ちなみに主キーについてですが、オートナンバーにすると希望の順番に並ばないので現在は手動でIDを設定しているのですが、今後、慣れないユーザーに使わせる際には意図が伝わらないかと思っています…ID発行について良いアイデアはありませんでしょうか。

2

とりあえず、現状のテーブル設計を提示してください。

テーブル名、フィールド名、主キー設定

1
ふせん 2020/10/20 (火) 14:22:07 0029a@1c915

追記
次月にTODOを持ち越した際、別のTODOが追い越す可能性はないため、年月を変更する際はリセット(リセットボタンを押す)してから変更する予定です。

7
hideki 2020/10/19 (月) 22:37:43 09c37@96514

hatena様

本当にありがとうございました。
感謝いたします。

6

前のクエリでグループだけ表示させるようにして、DISTINCTで重複を排除します。
(デザインビューでは「固有の値」を「はい」に設定する)

SELECT 
    DISTINCT a.グループ
FROM
    MT_成績 AS a INNER JOIN MT_成績 AS b
     ON a.都道府県 = b.都道府県
    AND a.グループ = b.グループ
WHERE
    a.順位 = 1 AND b.順位 = 2
    OR 
    a.順位 = 2 AND b.順位 = 1;

このクエリ(Q_成績)と元の MT_成績 をグループで結合したクエリを作成します。

SELECT
  a.*
FROM
  MT_成績 AS a INNER JOIN Q_成績 AS b
  ON a.グループ = b.グループ;

サブクエリで一つにまとめるなら、下記になります。

SELECT
  a.*
FROM
  MT_成績 AS a INNER JOIN
  (
    SELECT 
      DISTINCT a.グループ
    FROM
      MT_成績 AS a INNER JOIN MT_成績 AS b
      ON a.都道府県 = b.都道府県
      AND a.グループ = b.グループ
    WHERE
      a.順位 = 1 AND b.順位 = 2
      OR 
      a.順位 = 2 AND b.順位 = 1 
  ) AS b
  ON a.グループ = b.グループ;
5
hideki 2020/10/19 (月) 21:25:20 09c37@96514

画像1

失礼しました。
以後、気をつけます。

何卒宜しくお願い致します。

4

画像はリンクではなくアップロードして直接表表示させることかできますので、それをご利用ください。
画像1

3
hideki 2020/10/19 (月) 18:18:15 09c37@96514

hatena様

図々しいですが、もう一点、ご教示をお願いします。

https://gyazo.com/1faca64f1d679d0793248befd1696ae8

1位、2位は表示できました。

https://gyazo.com/574acf763874b19bbdf18ce5faf397ec

条件を満たしたグループ全部を表示させたい場合はどのようにするのでしょうか?
教えていただいたコードを自分なりに改良したのですが、クエリが何も表示されなくなります。
本当にお手数かと思いますが、ご教示をお願いします。

2
hideki 2020/10/19 (月) 18:10:45 09c37@96514

できました。
いつも正確な回答ありがとうございます。
本当に感謝します。
ありがとうございました。

1
hatena 2020/10/19 (月) 15:00:06 修正

同一グループ内で順位1、2が同一都道府県のレコードを抽出したいということですよね。

いいかえると、
同一グループかつ同一都道府県のレコード同士を比較して片方が1位もう一方が2位、または片方が2位もう一方が1位のレコードを抽出すればいいということです。
この条件ならサブクエリを使う必要はないです。

「同一グループかつ同一都道府県のレコード同士を比較」の部分はグルーブと都道府県で自己結合すればOKです。

SELECT 
    a.*
FROM
    MT_成績 AS a INNER JOIN MT_成績 AS b
     ON a.都道府県 = b.都道府県
    AND a.グループ = b.グループ
WHERE
    a.順位 = 1 AND b.順位 = 2
    OR 
    a.順位 = 2 AND b.順位 = 1
ORDER BY a.グループ, a.順位;
5
ふせん 2020/10/16 (金) 11:04:38 0029a@1c915 >> 4

おっしゃるとおり、フォームを開く段階で抽出条件が設定されており、
外したところうまく行きました。
勉強になりました。ありがとうございます。

4
hiroton 2020/10/16 (金) 08:53:15 修正 5cc13@f966d

「F商品」のレコードソースには何を設定していますか?
クエリの場合はそのSQL文をコピペしてください

回答自体には(今のところ)変わりありません
用途の異なるフォームで抽出しようとしているようなので元データから抽出条件が設定されているか、別な抽出処理で上書きされているんじゃないかと思います

3
ふせん 2020/10/15 (木) 23:28:30 0029a@1c915 >> 2

その後、絞り込みが反映されず通常のF商品が開かれるようになりました。

2
ふせん 2020/10/15 (木) 23:10:57 0029a@1c915

作ってみたのですが、入荷テーブルの内、1件しか表示できませんでした。
ちなみにどういう時に使っているかというと、入荷テーブルに入荷した商品データをインポートするボタンがあり、ボタンを押すとインポートするのですが、同時に今インポートしたデータを商品フォームで開きたいです。

16
どんぐり 2020/10/15 (木) 21:22:12 0029a@1c915 >> 13

コピペしてみたのですが、うまくいきませんでした。私の設定にミスがあるのかもしれません…色々ご検討いただきありがとうございます。

15
どんぐり 2020/10/15 (木) 21:20:16 0029a@1c915 >> 14

こちらに変更した後、数回テストしたところ、うまく動いてくれています。ありがとうございます!