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

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

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

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

解決済

共有サーバー内にある一覧表へ複数のファイルから転記する

mikiki
mikiki

総合スコア0

VBA

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

2回答

0評価

1クリップ

8352閲覧

投稿2018/09/29 10:15

Excel VBA 初心者であまり基礎も理解しておらず申し訳ありませんが、
仕事で急ぎ管理表を作成しなければならなくなりました。
わからないなりにネットで検索しながら作成したのですがつまずきまくっております。
どうぞご教示ください。(>人<;)

前提・実現したいこと

まず、実現したいことは、
複数の人がそれぞれのファイルに情報を入力します。
その情報を共有サーバー内にある集約用の管理表にそれぞれのタイミングで転記(追記)し、
最新の情報を共有したいと思っております。

これまでは集約管理表に都度ハンドで転記していたのですが、人数が大幅に増え、ファイルを開いた状態で
離席されたりと問題が出てきたのでマクロで集約できないかと下記の通り考えてみました。

<A:入力用(転記元)>
イメージ説明

    ↓ ↓ ↓ 転記する
<B:【共有】集約管理(転記先)>
イメージ説明

■マクロの手順
0. 入力用Aからの転記実行
0. 管理表Bを開いていなければ開き、読み取りで開いていたら元ファイルを開く。(基本、読み取りで開いている)
※ここで他の人が元ファイルを開いていたら「他の人が作業中です。しばらく経ってから転記し直してください。」と
メッセージを出したい。
0. 入力用AのB列「」の一つ下の行、C列からM列までをコピーし、管理表BのB列最終行の一つ下の行へ転記する。
0. 入力用Aの転記した行のB列のセルに「
」を表記させる。
0. 転記後管理表Bを上書き保存し、閉じて読み取り専用で開く。

発生している問題・エラーメッセージ

①Bの集約管理ファイルを閉じていると開くのですが、開いていたらメッセージボックスは表示されず
「ファイルが見つかりません。ファイル名保存場所が正しいか・・」と出ます。
②Bの集約管理ファイルを閉じた状態にしてマクロを動かすとAの入力用をコピーせず、Bのファイルのセルを
コピーしにいきます。。
下図参照
イメージ説明
イメージ説明
この先から進めなくなりました。
①および②が解消できればまた進めることができると思うのですが・・
基礎を理解できていないがゆえだと思いますが、助けていただきたいです。。><
よろしくお願いします。

該当のソースコード

※上記の画像と同じです

Sub 転記()
Dim wB As Workbook, wS As Worksheet
Dim myPath As String, fN As String
Dim LastRow As Long

'①A入力用(転記元)の"D1"を参照し、B共有フォルダの「管理状況」にある
'集約管理(転記先)のブックを開く
Application.DisplayAlerts = False

myPath = "共有サーバー\管理状況"
fN = "【共有】集約管理" & Range("D1").Value & "月" & ".xlsx"

Workbooks.Open Filename:=myPath & fN, Notify:=False
If ActiveWorkbook.ReadOnly Then
MsgBox "他の人が作業中です。しばらく経ってから転記し直してください。"
ActiveWorkbook.Close
Else
Sheets("list").Activate
Range("A1") = Now
End If
Application.DisplayAlerts = True

'②A入力用(転記元)のB列「」の一つ下のC列からM列までをコピー
With ThisWorkbook.Worksheets("入力フォーム")
x = 4
Do While Cells(x, 3).Value <> ""
If Cells(x, 2).Value <> "
" Then
Cells(x, 2).Value = "" '----コピーと同時にB列へ転記すみ「」を追記
Range(Cells(x, 3), Cells(x, 13)).Copy

'③共有フォルダの「管理状況」にある集約管理へ転記
Set wB = Workbooks(fN)
Set wS = wB.Worksheets("list")

LastRow = wS.Cells(Rows.Count, 2).End(xlUp).Row '----B列の最終ひとつ下へ値貼り付け wS.Range("B" & LastRow).Offset(1, 0).Select ActiveSheet.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=False, Transpose:=False End If x = x + 1 Loop

End With

Application.CutCopyMode = False

wB.Save
wB.Close '----元のファイルを保存し閉じる

MsgBox "転記しました。"

Workbooks.Open Filename:=myPath & fN, ReadOnly:=True '----読み取り専用で開く

End Sub

試したこと

補足情報

使用バージョン:Excel2010

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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