質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2995閲覧

共有ブックに新規データ行をかぶらないように追加したい

yoko4401

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/08/25 01:57

Excelで、共有したブックに複数で書き込みをしています。IDで管理していて、既存のIDがあるときはフォームにそのデータを表示して、参照または修正して保存しています。
しかし、新規データ行が発生した場合には最終行の取合いになり、競合して上書きされることがあるようです。運用上フォームは立ち上げっぱなしの場合が多く、新規データ行が発生した時にはブックを(保存せずに)強制的に終了させて、手動でもう一度立ち上げて最新のブックに新規データを書込んでもらっているのが現状です。新規データが発生した時に1箇所の書込みは1人しかできないようするのに、もっと良い方法はないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(1) プログラムファイルが存在するフォルダに、次のテキストファイルを作成します。
RowNum.txt
このテキストファイルに、共有ブックの最終行の行番号を7桁で1行だけ登録しておきます。

(2) 次のプロシジャを標準モジュールに登録します。

VBA

1Function f_lngGetRowNum() As Long 2On Error GoTo f_lngGetRowNum_Err 3 4 Dim lngGetRowNum As Long 5 Dim strFileName As String 6 Dim intFileNum As Integer 7 Dim strRowNum As String * 7 8 9 strFileName = ThisWorkbook.Path & "\RowNum.txt" 10 intFileNum = FreeFile 11 12 Open strFileName For Binary Lock Read Write As #intFileNum 13 Get #intFileNum, 1, strRowNum 14 15 lngGetRowNum = CLng(strRowNum) + 1 16 strRowNum = Format(lngGetRowNum, String(7, "0")) 17 18 Put #intFileNum, 1, strRowNum 19 Close #intFileNum 20 21 f_lngGetRowNum = lngGetRowNum 22 23 24f_lngGetRowNum_Exit: 25 Exit Function 26 27f_lngGetRowNum_Err: 28 f_lngGetRowNum = 0 29 Resume f_lngGetRowNum_Exit 30 31End Function

このプロシジャは、RowNum.txtを排他的に開き、中の7桁の数字に1を加えて更新します。
戻り値は、その1を加えた値です。
でも、RowNum.txtが別プロセスで開かれていると、更新せずに0を返します。

(3) 新規データが発生した場合には、上記プロシジャで、その新規データを書き込むべき行番号を取得します。
0が返ってきたときは、ユーザーに少し待つよう促します。

以上でいかがでしょうか。

投稿2020/08/27 08:36

kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoko4401

2020/08/27 11:30

ありがとうございます! 新規IDを別ファイルに一時保存して再起動をかけることは思いついたのですが、再起動のロスタイムが不評で、直接シートに書き込む輩が出る始末でした。最終行を別に管理する事は思いつきませんでした。 やってみます!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問