update C1

This commit is contained in:
updsv7
2026-04-16 21:06:40 +09:00
parent 32420f8503
commit 95bb72b14c
4 changed files with 194 additions and 202 deletions

View File

@@ -35,243 +35,125 @@ Const Tukin_HEADER_ROW As Long = 6
' AY-BA: 備考情報 (cols 51-53) ' AY-BA: 備考情報 (cols 51-53)
' BB-BC: 認定情報 (cols 54-56) ' BB-BC: 認定情報 (cols 54-56)
' ====== Event Handlers ====== ' ============================================================
' Column arrays for 4 kukan sections
' ============================================================
Private Function KUKAN_CODE_COLS() As Variant
KUKAN_CODE_COLS = Array(19, 26, 33, 40) ' S, Z, AG, AN
End Function
Private Function KUKAN_TRANSPORT_COLS() As Variant
KUKAN_TRANSPORT_COLS = Array(20, 27, 34, 41) ' T, AA, AH, AO
End Function
Private Function KUKAN_STATION_COLS() As Variant
KUKAN_STATION_COLS = Array(21, 28, 35, 42) ' U, AB, AI, AP
End Function
Private Function KUKAN_ARRIVAL_COLS() As Variant
KUKAN_ARRIVAL_COLS = Array(22, 29, 36, 43) ' V, AC, AJ, AQ
End Function
Private Function KUKAN_TICKET_COLS() As Variant
KUKAN_TICKET_COLS = Array(23, 30, 37, 44) ' W, AD, AK, AR
End Function
Private Function KUKAN_CODE2_COLS() As Variant
KUKAN_CODE2_COLS = Array(24, 31, 38, 45) ' X, AE, AL, AS
End Function
' ============================================================
' Helper: Get index by value, return -1 if not found
' ============================================================
Private Function GetIdx(val As Long, arr As Variant) As Long
Dim i As Long
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
GetIdx = i
Exit Function
End If
Next i
GetIdx = -1
End Function
' ============================================================
' Event Handlers
' ============================================================
Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_Change(ByVal Target As Range)
' === Column C changes: Fill address info from O1 and Z1 cache === If Target.Row < 7 Then Exit Sub
If Target.Column = 3 And Target.Row >= 7 Then
' === Column C changes ===
If Target.Column = 3 Then
Dim cell As Range Dim cell As Range
For Each cell In Target For Each cell In Target
If Trim(cell.Value) = "" Then If Trim(cell.Value) = "" Then
Call ClearRowData(Me, cell.Row) Call ClearRowData(Me, cell.Row)
Else Else
Call FillAddressFromO1(cell.Row) Call FillAddressFromO1(cell.Row)
' Generate transport (T) dropdown for all 4 kukan sections Dim i As Long
Call CreateZ1TransportDropdown(Me, cell.Row, 20) ' 区間1 - T column For i = 0 To 3
Call CreateZ1TransportDropdown(Me, cell.Row, 30) ' 区間2 - AD column Call CreateZ1TransportDropdown(Me, cell.Row, KUKAN_TRANSPORT_COLS(i))
Call CreateZ1TransportDropdown(Me, cell.Row, 37) ' 区間3 - AK column Next i
Call CreateZ1TransportDropdown(Me, cell.Row, 44) ' 区間4 - AR column
End If End If
Next Next
End If End If
' === Column T (区間1 交通機関) changes: Generate U (利用区間発) dropdown from Z1 === ' === Transport column changes (T, AA, AH, AO) ===
If Target.Column = 20 And Target.Row >= 7 Then Dim idx As Long
idx = GetIdx(Target.Column, KUKAN_TRANSPORT_COLS)
If idx >= 0 Then
Dim cellT As Range Dim cellT As Range
For Each cellT In Target For Each cellT In Target
If Trim(cellT.Value) <> "" Then If Trim(cellT.Value) <> "" Then
Call CreateZ1StationDropdown(Me, cellT.Row, 20, 21, 1) Call CreateZ1StationDropdown(Me, cellT.Row, KUKAN_TRANSPORT_COLS(idx), KUKAN_STATION_COLS(idx))
Else Else
Call ClearKukanValidation(Me, cellT.Row, 21) Call ClearKukanValidation(Me, cellT.Row, KUKAN_STATION_COLS(idx))
End If End If
Next Next
End If End If
' === Column U (区間1 利用区間発) changes: Generate V (利用区間着) dropdown from M1_KukanD === ' === Station column changes (U, AB, AI, AP) ===
If Target.Column = 21 And Target.Row >= 7 Then idx = GetIdx(Target.Column, KUKAN_STATION_COLS)
If idx >= 0 Then
Dim cellU As Range Dim cellU As Range
For Each cellU In Target For Each cellU In Target
If Trim(cellU.Value) <> "" Then If Trim(cellU.Value) <> "" Then
Call CreateM1KukanDDropdown(Me, cellU.Row, 20, 21, 22) Call CreateM1KukanDDropdown(Me, cellU.Row, KUKAN_TRANSPORT_COLS(idx), KUKAN_STATION_COLS(idx), KUKAN_ARRIVAL_COLS(idx))
If Me.Cells(cellU.Row, 22).Validation.Formula1 = "" Then If Me.Cells(cellU.Row, KUKAN_ARRIVAL_COLS(idx)).Validation.Formula1 = "" Then
' No dropdown data, clear V column Call ClearKukanValidation(Me, cellU.Row, KUKAN_ARRIVAL_COLS(idx))
Call ClearKukanValidation(Me, cellU.Row, 22)
End If End If
Else Else
Call ClearKukanValidation(Me, cellU.Row, 22) Call ClearKukanValidation(Me, cellU.Row, KUKAN_ARRIVAL_COLS(idx))
End If End If
Next Next
End If End If
' === Column AD (区間2 交通機関) changes === ' === Kukan code column changes (S, Z, AG, AN) ===
If Target.Column = 30 And Target.Row >= 7 Then idx = GetIdx(Target.Column, KUKAN_CODE_COLS)
Dim cellAD As Range If idx >= 0 Then
For Each cellAD In Target Dim cellK As Range
If Trim(cellAD.Value) <> "" Then For Each cellK In Target
Call CreateZ1StationDropdown(Me, cellAD.Row, 30, 31) If Trim(cellK.Value) <> "" Then
Else Call CreateZ1TransportDropdown(Me, cellK.Row, KUKAN_TRANSPORT_COLS(idx))
Call ClearKukanValidation(Me, cellAD.Row, 31) If Me.Cells(cellK.Row, KUKAN_TRANSPORT_COLS(idx)).Validation.Formula1 <> "" Then
End If Call FillKukanFromM1(Me, cellK.Row, KUKAN_CODE_COLS(idx), Array(KUKAN_TRANSPORT_COLS(idx), KUKAN_STATION_COLS(idx), KUKAN_ARRIVAL_COLS(idx)))
Next Call CreateM2Dropdown(Me, cellK.Row, KUKAN_CODE_COLS(idx), KUKAN_TICKET_COLS(idx))
End If
' === Column AE (区間2 利用区間発) changes ===
If Target.Column = 31 And Target.Row >= 7 Then
Dim cellAE As Range
For Each cellAE In Target
If Trim(cellAE.Value) <> "" Then
Call CreateM1KukanDDropdown(Me, cellAE.Row, 30, 31, 32)
If Me.Cells(cellAE.Row, 32).Validation.Formula1 = "" Then
Call ClearKukanValidation(Me, cellAE.Row, 32)
End If End If
Else Else
Call ClearKukanValidation(Me, cellAE.Row, 32) Call ClearKukanValidation(Me, cellK.Row, KUKAN_TICKET_COLS(idx))
End If End If
Next Next
End If End If
' === Column AK (区間3 交通機関) changes === ' === Ticket column changes (W, AD, AK, AR) ===
If Target.Column = 37 And Target.Row >= 7 Then idx = GetIdx(Target.Column, KUKAN_TICKET_COLS)
Dim cellAK As Range If idx >= 0 Then
For Each cellAK In Target Dim cellTi As Range
If Trim(cellAK.Value) <> "" Then For Each cellTi In Target
Call CreateZ1StationDropdown(Me, cellAK.Row, 37, 38) If Trim(cellTi.Value) <> "" Then
Call CreateM2CodeDropdown(Me, cellTi.Row, KUKAN_CODE_COLS(idx), KUKAN_TICKET_COLS(idx), KUKAN_CODE2_COLS(idx))
Else Else
Call ClearKukanValidation(Me, cellAK.Row, 38) Call ClearKukanValidation(Me, cellTi.Row, KUKAN_CODE2_COLS(idx))
End If
Next
End If
' === Column AL (区間3 利用区間発) changes ===
If Target.Column = 38 And Target.Row >= 7 Then
Dim cellAL As Range
For Each cellAL In Target
If Trim(cellAL.Value) <> "" Then
Call CreateM1KukanDDropdown(Me, cellAL.Row, 37, 38, 39)
If Me.Cells(cellAL.Row, 39).Validation.Formula1 = "" Then
Call ClearKukanValidation(Me, cellAL.Row, 39)
End If
Else
Call ClearKukanValidation(Me, cellAL.Row, 39)
End If
Next
End If
' === Column AR (区間4 交通機関) changes ===
If Target.Column = 44 And Target.Row >= 7 Then
Dim cellAR As Range
For Each cellAR In Target
If Trim(cellAR.Value) <> "" Then
Call CreateZ1StationDropdown(Me, cellAR.Row, 44, 45)
Else
Call ClearKukanValidation(Me, cellAR.Row, 45)
End If
Next
End If
' === Column AS (区間4 利用区間発) changes ===
If Target.Column = 45 And Target.Row >= 7 Then
Dim cellAS As Range
For Each cellAS In Target
If Trim(cellAS.Value) <> "" Then
Call CreateM1KukanDDropdown(Me, cellAS.Row, 44, 45, 46)
If Me.Cells(cellAS.Row, 46).Validation.Formula1 = "" Then
Call ClearKukanValidation(Me, cellAS.Row, 46)
End If
Else
Call ClearKukanValidation(Me, cellAS.Row, 46)
End If
Next
End If
' === Column S changes: Fill 区間1 from M1/M2 cache ===
If Target.Column = 19 And Target.Row >= 7 Then
Dim cellS As Range
For Each cellS In Target
If Trim(cellS.Value) <> "" Then
' First check if T column has dropdown data
Call CreateZ1TransportDropdown(Me, cellS.Row, 20)
If Me.Cells(cellS.Row, 20).Validation.Formula1 <> "" Then
Call FillKukanFromM1(Me, cellS.Row, 19, Array(20, 21, 22)) ' S->T,U,V
Call CreateM2Dropdown(Me, cellS.Row, 19, 23) ' S->W dropdown (券種)
End If
Else
Call ClearKukanValidation(Me, cellS.Row, 23)
End If
Next
End If
' === Column W changes: Fill 券種 dropdown -> generate X dropdown ===
If Target.Column = 23 And Target.Row >= 7 Then
Dim cellW As Range
For Each cellW In Target
If Trim(cellW.Value) <> "" Then
Call CreateM2CodeDropdown(Me, cellW.Row, 19, 23, 24) ' kukanCode, kanshu -> X dropdown
Else
Call ClearKukanValidation(Me, cellW.Row, 24)
End If
Next
End If
' === Column Z changes: Fill 区間2 from M1/M2 cache ===
If Target.Column = 26 And Target.Row >= 7 Then
Dim cellZ As Range
For Each cellZ In Target
If Trim(cellZ.Value) <> "" Then
Call CreateZ1TransportDropdown(Me, cellZ.Row, 30)
If Me.Cells(cellZ.Row, 30).Validation.Formula1 <> "" Then
Call FillKukanFromM1(Me, cellZ.Row, 26, Array(27, 28, 29)) ' Z->AA,AB,AC
Call CreateM2Dropdown(Me, cellZ.Row, 26, 30) ' Z->AD dropdown
End If
Else
Call ClearKukanValidation(Me, cellZ.Row, 30)
End If
Next
End If
' === Column AD changes: Fill 券種 dropdown -> generate AH dropdown ===
If Target.Column = 30 And Target.Row >= 7 Then
Dim cellAD As Range
For Each cellAD In Target
If Trim(cellAD.Value) <> "" Then
Call CreateM2CodeDropdown(Me, cellAD.Row, 26, 30, 31) ' kukanCode, kanshu -> AH dropdown
Else
Call ClearKukanValidation(Me, cellAD.Row, 31)
End If
Next
End If
' === Column AG changes: Fill 区間3 from M1/M2 cache ===
If Target.Column = 33 And Target.Row >= 7 Then
Dim cellAG As Range
For Each cellAG In Target
If Trim(cellAG.Value) <> "" Then
Call CreateZ1TransportDropdown(Me, cellAG.Row, 37)
If Me.Cells(cellAG.Row, 37).Validation.Formula1 <> "" Then
Call FillKukanFromM1(Me, cellAG.Row, 33, Array(34, 35, 36)) ' AG->AH,AI,AJ
Call CreateM2Dropdown(Me, cellAG.Row, 33, 37) ' AG->AK dropdown
End If
Else
Call ClearKukanValidation(Me, cellAG.Row, 37)
End If
Next
End If
' === Column AK changes: Fill 券種 dropdown -> generate AL dropdown ===
If Target.Column = 37 And Target.Row >= 7 Then
Dim cellAK As Range
For Each cellAK In Target
If Trim(cellAK.Value) <> "" Then
Call CreateM2CodeDropdown(Me, cellAK.Row, 33, 37, 38) ' kukanCode, kanshu -> AL dropdown
Else
Call ClearKukanValidation(Me, cellAK.Row, 38)
End If
Next
End If
' === Column AN changes: Fill 区間4 from M1/M2 cache ===
If Target.Column = 40 And Target.Row >= 7 Then
Dim cellAN As Range
For Each cellAN In Target
If Trim(cellAN.Value) <> "" Then
Call CreateZ1TransportDropdown(Me, cellAN.Row, 44)
If Me.Cells(cellAN.Row, 44).Validation.Formula1 <> "" Then
Call FillKukanFromM1(Me, cellAN.Row, 40, Array(41, 42, 43)) ' AN->AO,AP,AQ
Call CreateM2Dropdown(Me, cellAN.Row, 40, 44) ' AN->AR dropdown
End If
Else
Call ClearKukanValidation(Me, cellAN.Row, 44)
End If
Next
End If
' === Column AR changes: Fill 券種 dropdown -> generate AS dropdown ===
If Target.Column = 44 And Target.Row >= 7 Then
Dim cellAR As Range
For Each cellAR In Target
If Trim(cellAR.Value) <> "" Then
Call CreateM2CodeDropdown(Me, cellAR.Row, 40, 44, 45) ' kukanCode, kanshu -> AS dropdown
Else
Call ClearKukanValidation(Me, cellAR.Row, 45)
End If End If
Next Next
End If End If

View File

@@ -0,0 +1,81 @@
# Tukin_C1 用户动作文档
## 列动作映射
### C列 (职员番号)
- **触发条件**: C列 >= 第7行内容变化
- **动作**:
- 内容清空 → `ClearRowData` 清除整行
- 有内容 → `FillAddressFromO1` 填充地址下拉 + 生成4个区间的交通機関下拉
---
### 区間1
| 列 | 动作 | 触发条件 | 处理逻辑 |
|---|---|---|---|
| **T** (交通機関) | 交通手段下拉变化 | Column=20 | `CreateZ1StationDropdown` → 生成U列(発)下拉 |
| **U** (利用区間発) | 发站下拉变化 | Column=21 | `CreateM1KukanDDropdown` → 生成V列(着)下拉 |
| **S** (区間コード) | 区间代码输入 | Column=19 | 生成T列下拉 → T列有值时填充U,V + 生成W列(券種)下拉 |
| **W** (券種) | 券种下拉变化 | Column=23 | `CreateM2CodeDropdown` → 生成X列(コード)下拉 |
---
### 区間2
| 列 | 动作 | 触发条件 | 处理逻辑 |
|---|---|---|---|
| **AA** (交通機関) | 交通手段下拉变化 | Column=27 | `CreateZ1StationDropdown` → 生成AB列(発)下拉 |
| **AB** (利用区間発) | 发站下拉变化 | Column=28 | `CreateM1KukanDDropdown` → 生成AC列(着)下拉 |
| **Z** (区間コード) | 区间代码输入 | Column=26 | 生成AA列下拉 → AA列有值时填充AB,AC + 生成AD列(券種)下拉 |
| **AD** (券種) | 券种下拉变化 | Column=30 | `CreateM2CodeDropdown` → 生成AE列(コード)下拉 |
---
### 区間3
| 列 | 动作 | 触发条件 | 处理逻辑 |
|---|---|---|---|
| **AH** (交通機関) | 交通手段下拉变化 | Column=34 | `CreateZ1StationDropdown` → 生成AI列(発)下拉 |
| **AI** (利用区間発) | 发站下拉变化 | Column=35 | `CreateM1KukanDDropdown` → 生成AJ列(着)下拉 |
| **AG** (区間コード) | 区间代码输入 | Column=33 | 生成AH列下拉 → AH列有值时填充AI,AJ + 生成AK列(券種)下拉 |
| **AK** (券種) | 券种下拉变化 | Column=37 | `CreateM2CodeDropdown` → 生成AL列(コード)下拉 |
---
### 区間4
| 列 | 动作 | 触发条件 | 处理逻辑 |
|---|---|---|---|
| **AO** (交通機関) | 交通手段下拉变化 | Column=41 | `CreateZ1StationDropdown` → 生成AP列(発)下拉 |
| **AP** (利用区間発) | 发站下拉变化 | Column=42 | `CreateM1KukanDDropdown` → 生成AQ列(着)下拉 |
| **AN** (区間コード) | 区间代码输入 | Column=40 | 生成AO列下拉 → AO列有值时填充AP,AQ + 生成AR列(券種)下拉 |
| **AR** (券種) | 券种下拉变化 | Column=44 | `CreateM2CodeDropdown` → 生成AS列(コード)下拉 |
---
## 方法列表
| 方法名 | 功能 |
|---|---|
| `FillAddressFromO1` | 根据职员番号(C列)从O1缓存填充住所下拉(I列) |
| `CreateZ1TransportDropdown` | 生成交通機関下拉 |
| `CreateZ1StationDropdown` | 根据交通手段从Z1缓存生成发站下拉 |
| `CreateM1KukanDDropdown` | 根据交通手段+发站从M1KukanD缓存生成着站下拉 |
| `FillKukanFromM1` | 根据区间代码从M1缓存填充区间信息(T/U/V等) |
| `CreateM2Dropdown` | 根据区间代码生成券種下拉 |
| `CreateM2CodeDropdown` | 根据区间代码+券種生成コード下拉 |
| `ClearRowData` | 清除整行数据 |
| `ClearKukanValidation` | 清除指定列的验证下拉 |
---
## 缓存依赖
| 缓存 | 用途 |
|---|---|
| `o1Cache` | 职员番号 → 住所 |
| `z1Cache` | 交通手段 → 站点 |
| `m1KukanDCache` | 交通手段+发站 → 着站 |
| `m1Cache` | 区间代码 → 区间信息 |
| `m2Cache` | 区间代码+券種 → コード |

View File

@@ -0,0 +1,29 @@
### 届出情報
|列|C列|D列|E列|F列|G列|H列|
|--------|--------|--------|--------|--------|--------|--------|
|ヘッダ|職員番号|事実発生年月日|提出年月日|受理年月日|届出の事由コード|届出の備考|
|データ型|8|日付|日付|日付|Enum|文字列|
### 区間1情報
|列|S列|T列|U列|V列|W列|X列|Y列|
|--------|--------|--------|--------|--------|--------|--------|--------|
|ヘッダ|区間1区間コード|区間1交通機関|区間1発|区間1着|区間1券種|区間1コード|区間1支給開始年月|
|データ型|5|3|文字列|文字列|Enum|3|日付|
### 区間2情報
|列|Z列|AA列|AB列|AC列|AD列|AE列|AF列|
|--------|--------|--------|--------|--------|--------|--------|--------|
|ヘッダ|区間2区間コード|区間2交通機関|区間2発|区間2着|区間2券種|区間2コード|区間2支給開始年月|
|データ型|5|3|文字列|文字列|Enum|3|日付|
### 区間3情報
|列|AG列|AH列|AI列|AJ列|AK列|AL列|AM列|
|--------|--------|--------|--------|--------|--------|--------|--------|
|ヘッダ|区間3区間コード|区間3交通機関|区間3発|区間3着|区間3券種|区間3コード|区間3支給開始年月|
|データ型|5|3|文字列|文字列|Enum|3|日付|
### 区間4情報
|列|AN列|AO列|AP列|AQ列|AR列|AS列|AT列|
|--------|--------|--------|--------|--------|--------|--------|--------|
|ヘッダ|区間4区間コード|区間4交通機関|区間4発|区間4着|区間4券種|区間4コード|区間4支給開始年月|
|データ型|5|3|文字列|文字列|Enum|3|日付|