前提・実現したいこと
別のブックにあるスケジュールの作業名を工数表の項目と日付が一緒のところのセルに工数の値
を入力したいのですが、
VBAの内容に何が足りていないのかが分からず、悩んでいます。
どこを改良すればうまく動きますでしょうか。
手順
転記元ファイルのシート1のEからRまでの範囲を一列ごとに指定
空なら翌日に移動
列の単語ごとに何個ずつあるか計算し、0.5を掛ける
出した値を列の日付と項目の名前が同じところにあるセルに入力
その列で単語がなくなるまで繰り返す
単語がなくなったら翌日の実績列に移動
日曜日まで終わったら隣のシートに移動
シートがなくなるまで繰り返す
転記元のシート名は毎回異なる
転記元の日付は日付が入っているセルの左に書いてある
予定表 一週間ごとに別のシート ここの作業名の数を合計して0.5掛ける その他は無視する
↓マクロ起動後
工数がM4セルから入力される。
集計し終わったら、下の項目に移動して、項目がなくなるまで続ける
該当のソースコード
Sub KosuBook() Dim ex As Excel.Application '処理用Excel Dim wb As Workbook Dim sPath 'ブックファイルパス Dim sht As Worksheet '参照シート Dim bFlg As Boolean Dim kRow As Long Dim cnt As Long Dim i, j, k, kosu As Long '開くブックを指定 sPath = "〇〇〇.xlsm" '既に開かれているか確認 bFlg = IsBookOpened(sPath) '開かれている場合 If bFlg = True Then Set ex = New Excel.Application '新規Excelで読み取り専用で開く Set wb = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) Else '現ブックで読み取り専用で開く Set wb = Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) End If '工数を集計後、同じ工数にあたる項目を探し、合計を入力する '1yori '1と後の数字名シートの数だけ繰り返し For i = 1 To Worksheets.Count '列ごとに繰り返し For j = 6 To 18 Step 2 '最後のセルまで取得 kRow = Cells(Rows.Count, j).End(xlUp).Row '調べる作業名(重複は除く) k = 0 Do n = InStr(k + 1, kRow, '作業名) If k = 0 Then Exit Do Else cnt = cnt + 1 End If Loop kousu = cnt * 0.5 '工数表のブックへ内容をコピー Next j Next i 'ブックを閉じる Call wb.Close If bFlg = True Then Call ex.Application.Quit End If End Sub 'ブックオープン判定関数 Function IsBookOpened(a_sFilePath) As Boolean On Error Resume Next '保存済みのブックか判定 Open a_sFilePath For Append As #1 Close #1 If Err.Number > 0 Then '既に開かれている場合 IsBookOpened = True Else '開かれていない場合 IsBookOpened = False End If End Function
補足情報(FW/ツールのバージョンなど)
win10(64bit)
現状どうなっていて何に困っているのでしょうか?
別のブックに計算した値を、日付と項目名で一致したセルに入力する方法が思い浮かばないのです。
質問の投稿は、依頼内容がくわしくプログラムも提示していただいていますが、
Aさんの場合で、少し抽象的に表現されて質問されたほうがよろしいかと思います。
回答しようにも、様々な要素がまじっていて回答しようがないためです。
工程数が複数存在etc
提案ですけど、この内容で個人ファイルごとに必要な行のみ、項目のみに絞って
抽象的なシートを提示していただけるとサンプルが提示できると思います。
> 別のブックに計算した値を、日付と項目名で一致したセルに入力する方法が思い浮かばないのです。
よく分かりません。”別のブックに計算した値”とはどれのこと(どのセル)ですか?
欲しい結果のシートも掲載いただいた方が伝わるかと思います。
例えば予定表の実績に7/1に出願を1.5行ったので、3つ出願を行った時間帯に入れてからマクロを起動させると、工数表の項目と同じ名前で、行った日付が一緒なので、工数表のM4セルに1.5を入れる
といったように動かしたいのです。
質問の工程表の画像は既にマクロ実行後(想定)のシートですか? 質問文からは読み取れませんが。
そうです。想定後のシートが工数表の内容です。
> 想定後のシートが工数表の内容です。
これは分かりにくいですね。。
インプットとアウトプットを明確にしないと回答は付きにくいかと思います。
なるほど。今回の説明で理解しました。
工数表 項目は複数存在しており。
→9行ごとに一覧化・すべてマスタ化されているということでしょうか。
一応項目は9行ごとに分けられていますが、将来的には増えるかもしれません。
項目はマスタ化はしていません。
現在、時間をとれないので回答できませんが。
フォルダ内の配置・ファイル構成を提示していただくとよいかと思います。
自分のPCにあるOneDriveのファイルの一つに予定表、工数表.xlsmのファイルがあり、
シート名は予定表が 作業一覧、1~5という名前のシート
工数表は、マスタ、詳細、試作1のシートとなっています。
1~5に予定表の作業の実数があり、詳細に工数表の内容があります。
予定表シートは担当者別になっているのですか? 工数表の「担当」欄との照合はどうなっていますか?
担当者は予定表には含まれておらず、そのブック自体が担当者の作業内容となっています。
予定表にも担当者欄を追加したほうがいいですか?
ではブック名が担当者名でしょうか?
202007_09(担当者名)_作業予定表
こんな感じです。
回答5件
あなたの回答
tips
プレビュー