回答編集履歴

2

修正

2023/12/22 03:40

投稿

hatena19
hatena19

スコア34367

test CHANGED
@@ -25,7 +25,7 @@
25
25
  T_伝票, T_連番
26
26
  WHERE
27
27
  Mid([伝票番号],[連番]*6-5,5)<>""
28
- ORDER BY**ボールドテキスト**
28
+ ORDER BY
29
29
  管理番号, 連番;
30
30
  ```
31
31
 

1

別案追記

2023/12/22 02:57

投稿

hatena19
hatena19

スコア34367

test CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  まず下記のような連番の格納されたテーブルを作成します。連番は1レコードに含まれる単票番号の最大数まで入力してください。
7
7
 
8
- T_連番
8
+ **T_連番**
9
9
 
10
10
  |連番|
11
11
  |:--:|
@@ -20,7 +20,7 @@
20
20
 
21
21
  ```SQL
22
22
  SELECT
23
- 管理番号, Mid([連番]*6-5,5) AS 単票番号
23
+ 管理番号, Mid([伝票番号],[連番]*6-5,5) AS 単票番号
24
24
  FROM
25
25
  T_伝票, T_連番
26
26
  WHERE
@@ -29,5 +29,22 @@
29
29
  管理番号, 連番;
30
30
  ```
31
31
 
32
+ VBAでユーザ定義関数を作成して利用する例
33
+ ---
34
+ saziさんの回答のユーザ定義関数を拝借して(私が作成してもほぼ同じになるので)、
35
+ 上記の**T_連番**を使用したサンプルです。
36
+ このような連番テーブルを利用するとUNIONを使用せずに同様のことができます。
37
+ 余分のテーブルが一つ増えるというデメリットはありますが、一つ作成しておく他でもいろいろ流用できます。
38
+
39
+ ```SQL
40
+ SELECT
41
+ 管理番号, MySplit([伝票番号],"/",[連番]-1) AS 単票番号
42
+ FROM
43
+ T_伝票, T_連番
44
+ WHERE
45
+ MySplit([伝票番号],"/",[連番]-1) Is Null
46
+ ORDER BY**ボールドテキスト**
47
+ 管理番号, 連番;
48
+ ```
32
49
 
33
50