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

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

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

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

Q&A

解決済

1回答

701閲覧

VBAで2行目以降、転記がされない

somechan1

総合スコア17

VBA

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

0グッド

0クリップ

投稿2021/02/25 08:04

会社の部署で個人で記入する勤怠管理表から、ボタンを押せば各個人の表を読み込み自動で転記されるマクロを組みました。

下記に個人の一例でコードを記載します。

VBA

1Set yamamoto = Workbooks.Open(path & "山本.xlsx")→個人のエクセルを指定しています。 2 With Workbooks("集計").Worksheets("2021年")→集計のエクセルを指定しています。 3 4 .Range("C10:T10").Value = yamamoto.Sheets(i).Range("C40:T40").Value '1?? 5 .Range("C30:T30").Value = yamamoto.Sheets(i).Range("C80:T80").Value '2?? 6 .Range("C50:T50").Value = yamamoto.Sheets(i).Range("C120:T120").Value '3?? 7 .Range("C70:T70").Value = yamamoto.Sheets(i).Range("C160:T160").Value '4?? 8 .Range("C90:T90").Value = yamamoto.Sheets(i).Range("C200:T200").Value '5?? 9 .Range("C110:T110").Value = yamamoto.Sheets(i).Range("C240:T240").Value '6?? 10 .Range("C130:T130").Value = yamamoto.Sheets(i).Range("C280:T280").Value '7?? 11 .Range("C150:T150").Value = yamamoto.Sheets(i).Range("C320:T320").Value '8?? 12 .Range("C170:T170").Value = yamamoto.Sheets(i).Range("C360:T360").Value '9?? 13 .Range("C190:T190").Value = yamamoto.Sheets(i).Range("C400:T400").Value '10?? 14 .Range("C210:T210").Value = yamamoto.Sheets(i).Range("C440:T440").Value '11?? 15 .Range("C230:T230").Value = yamamoto.Sheets(i).Range("C480:T480").Value '12?? 16 17 ActiveWorkbook.Close savechanges:=False 18 19 End With 20※各文の端の12??は12月など、「月」と書いています。

for構文は使用していません。書式が決まっているので、指定した箇所を読み込む形にしました。
作成時は問題なく動き、実際1月分は各個人の記入内容が反映されたものが転記されます。
2月以降から読み込まなくなりました。

誤ってる箇所など、御教授頂けると幸いです。
よろしくお願いいたします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/02/25 08:10 編集

1月と2月はsheetを分けているのですか? yamamoto.Sheets(i)とsheets(i)を指定していますがこの変数iには何を入れているのですか?
somechan1

2021/02/25 08:21

確認ありがとうございます。 ・1月と2月は分けていません。 ・具体的には「2021年」が入っています。  記入漏れていましたが、転記エクセル内でセルの値を読み取るように指定しています。  よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2021/02/25 08:33

一見したところプログラムに問題なさそうなんですよね。 転記したい指定セルの位置を正確に選択出来ているか確認したいのですが、下記のコードを参照してF8のステップインで実際にどのセルを触っているか確認できますか? selectで範囲指定すればエクセルの画面上で表示されるのでわかりやすいと思います。 これで問題ない場合は他の方にお任せする形になりそうです。 yamamoto.Sheets(i).Range("C80:T80").select .Range("C30:T30").select .Range("C30:T30").Value = yamamoto.Sheets(i).Range("C80:T80").Value '2?? yamamoto.Sheets(i).Range("C120:T120").select .Range("C50:T50").select .Range("C50:T50").Value = yamamoto.Sheets(i).Range("C120:T120").Value '3??
somechan1

2021/02/25 22:43

msuguru様 コメントありがとうございます。 頂いたコードを追記し、ステップインで実施しました。そこで判明したのですが、 With Workbooks("集計").Worksheets("2021年")→集計のエクセルを指定しています。 インデックス範囲が有効ではないと出ます。そのため該当箇所の指定で「xlsm」を指定していなかったので、それに変更した結果作動できるようになりました。 色々とご確認頂きありがとうございました!
退会済みユーザー

退会済みユーザー

2021/02/25 23:53

解決してよかったです。 自己解決で詳細の記載をお願いします。 あなたがどのように解決したかを書き残しておくことで、あなたの質問は貴重なコンテンツ資産となります。
somechan1

2021/02/26 03:58

承知しました。同じことで困った方の為にも、文字として残しておきます。
guest

回答1

0

自己解決

VBAのシート指定で、「xlsm」まで書かないと、動かない場合がある。シート名を「.xlsm]まで拡張することで、今回は解決することが出来ました。
コメント返してくれた方々、ありがとうございました。

投稿2021/02/26 04:00

somechan1

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問