なんでそれをExcelやめてしまうのん?
という丁度よさげなお題を発見。
https://engineering.linecorp.com/ja/blog/detail/216engineering.linecorp.com
この手の話を小耳に挟むと、サンプル出来たら送りますね-
って担当者に報告。
30分くらいでできるのがこちら。
Sub UpdateData() If MsgBox("座席表を更新します。よろしいですか?", vbYesNoCancel, "メッセージ") <> vbYes Then Exit Sub End If Dim sh As Worksheet Dim rng As Range Set sh = ThisWorkbook.Worksheets("座席表") Set rng = sh.Range("a1:BB100") Dim r As Range Dim str As String str = "座席番号,氏名" & vbCrLf For Each r In rng If Left(r, 1) = "Q" Then If r.Offset(1, 0).Value <> "" Then str = str & r.Value & "," & r.Offset(1, 0).Value & vbCrLf End If End If Next Dim fso As New Scripting.FileSystemObject fso.OpenTextFile(ThisWorkbook.Path & "\data.txt", ForWriting, True).Write (str) MsgBox "更新完了", , "メッセージ" End Sub Sub ReadData() Dim sh As Worksheet Dim rng As Range Set sh = ThisWorkbook.Worksheets("座席表") Set rng = sh.Range("a1:BB100") Dim r As Range Dim dic As New Scripting.Dictionary '座席表の位置取得 For Each r In rng If Left(r, 1) = "Q" Then dic.Add r.Value, r.Offset(1, 0).Address 'ついでに削除処理 r.Offset(1, 0).Value = "" End If Next Dim fso As New Scripting.FileSystemObject Dim dataTxt As String If Dir(ThisWorkbook.Path & "\data.txt") = "" Then Exit Sub dataTxt = fso.OpenTextFile(ThisWorkbook.Path & "\data.txt", ForReading, False).ReadAll Dim lines lines = Split(dataTxt, vbCrLf) If UBound(lines) < 2 Then Exit Sub Dim i As Long Dim line For i = 1 To UBound(lines) - 1 line = Split(lines(i), ",") If dic.Exists(line(0)) Then sh.Range(dic(line(0))).Value = line(1) End If Next End Sub
データを外のテキストファイルで管理しておくのがコツといえばコツ。
ほぼこれだけで現場の人の希望は8割型達成できてるはず。
むしろExcelの使い勝手が変わらなくて喜ばれるかも。
読み取りボタンはサンプルなので付けてます。
実装時はブック開く時に実行すればよいかと。
どうしても見た目にhtmlでCSS使いたく鳴ったら
hta作ってテキストファイル読み込んでおけばよし。
え これでだめなん???
すぐできたし
引き継ぎ、修正、更新簡単だし
使い方変わらないし。
WindowsのログインIDを補完しとく仕組みつくれば
着座後のリアルタイム席替え更新すらも可能よ???
席替え更新出来る人と出来ない人わけたくなったら
読み専とかExcelにパスワード付ければすみますしねー。
LINEでよく使うというのがわからんのですが、
HTTP通信でこのテキストなげればいいんじゃなかろか。
いろいろとダメなところもあるので、そのへんと
クリックで社員情報出す仕組みにプラスもう1,2時間くらいでしょうか。
最低限書き込み失敗は入れるべきですが、めんどくさかったので保留
でも、一番困ってるとこには影響ないので後回しでいいとおもうの。