いつもお世話になっております。
現在、データシートから各シートへデータを入力するマクロを作成しようとしています。
ブックの一枚目のシートにデータシートがあり
データシートは以下のようになっています
A B C D E F G
No 社員番号 氏名 所属 日付 数値1 数値2
1 1 123 ○○×× AAA 2016/1 30 20
2 2 123 ○○×× AAA 2016/2 40 15
3 3 123 ○○×× AAA 2016/3 20 90
. .
. .
. .
12 12 123 ○○×× AAA 2016/12 70 50
13 12 345 □□△△ BBB 2016/1 20 60
14 12 345 □□△△ BBB 2016/2 40 10
.
.
.
タイトル行は実際には存在しません
各シートは所属別に分かれていて各所属人数はまちまちです。
データシートを上から順に調べ、各シートの該当社員の該当セルへを貼付したいです。
コピーする範囲は7項目×12月分の全ての部分(最初の人で言えばA1:G12の範囲)
貼り付ける範囲は各シートに社員毎に表があるのでセルとしては社員番号の右上(Offset(該当セル,-1,1)へ貼付)
流れとしては
まず一枚目のB列を上から順に12個飛ばしで取得する(最初はB1)
Offset("B1",0,-1,12,7)の範囲をコピーする
次に4枚目のワークシートから調べていく(2,3枚目は別の必要なデータがあるため)
4枚目のワークシートのB列を調べ、取得した値と一致すればOffset(該当セル,-1,1)の位置に貼付
なければ検索を続け、そのシートに該当する社員番号がなければ次のシートへ
これを最終シートまで繰り返し、また一枚目のワークシートの検索からはじめる
といった処理をしたいと考えています。
自力で考えたものが下のものです
-------------------------------------------
Sub テスト()
Dim results As Variant, i As Long, j As Long, k As Long
With Worksheets(1)
Do Until Cells(i, 2) = ""
Worksheets(1).Range.Offset(Cells(i, 2), 0, -1, 12, 7).Copy
For j = 4 To Worksheets.Count
Sheets(Sheets(j).Name).Select
For k = 1 To 100
If Worksheets(1).Cells(i, 2) = Worksheets(j).Cells(k, 2) Then
Worksheets(j).Active.Range.Offset(Cells(k, 2), -1, 1).PasteSpecial Paste:=xlPasteValues
End If
Next k
Next j
i = i + 12
Loop
End With
End Sub
----------------------------------------------
そもそもこんな単純なものではないとは思っていて、根本的に間違っているかもしれません。
実際に「アプリケーション定義 または オブジェクト定義のエラーです。」
と表示され実行できません。
どこから手をつけていいかわからないため、ご教授いただければと思います。
宜しくお願いいたします。
No.1
- 回答日時:
> 実際に「アプリケーション定義 または オブジェクト定義のエラーです。
」> と表示され実行できません。
> どこから手をつけていいかわからないため
エラー表示で、デバッグボタンをクリックすれば、どの行でエラーになっているか分かります。
その行で使用している、関数の使い方が正しいか、変数の値が想定しているかを確認していきます。
> Do Until Cells(i, 2) = ""
最初にこの行を通るときに、変数iの値はいくつになっていますか?
その値はCellsのパラメータとして使用して問題ありませんか?
あとOffsetのパラメータが3つ以上ありますが、正しい使用方法ですか?
・Range.Offset プロパティ (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ …
# 以上はパッと見で気づいた点です。他にも問題があるかもしれません。
ご回答ありがとうございます。
ご指摘頂いた通り
> Do Until Cells(i, 2) = ""
がエラー表示されており、考えたところおかしい部分は理解できました。
i=1を上記一行の上に挿入したところ、エラーは起こらなくなりました。
ですが、エラーは起こらないものの、実行してもなんの反応もなく今度はどこが問題なのかさえわからなくなってしまいました。
Offsetに関しては勉強不足のようなのでもう一度調べてみようと思います。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
No.1です。
コードがコピペできないのでこちらで確認していないのですが
行うことはNo.1で書いたことと同じです。
使用している変数の値を確認する → 問題の行の直前にMsgBoxで表示させて確認する。
その値が適切なパラメータとなっているか確認する
→Worksheets(j)なら、Msgbox Worksheets(j).Name でシート名を表示させてみるとか
No.1ではループの最初で問題が起こりましたが、今回が何回かループしてから問題が起こるのかもしれませんね。
# VBEには、ステップ動作とか、ウォッチウィンドウとかデバッグ用の機能も搭載されていますので、確認してみて下さい。
ご指摘の方法で検証してみたのですが、肝心な知識が足りないため解決に至りませんでした。
あらためて質問させていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
VBAのoffsetの動き方について教...
-
Excelの中央値の複数条件について
-
エクセルのワークシートが重く...
-
Excel VBAを使った重複行の抜き...
-
エクセルファイルを軽くする方法
-
Excel 複数のシートからグラフ...
-
エクセル マクロを使って日々...
-
ピボットテーブルから抽出デー...
-
エクセル 毎日更新する表のデ...
-
エクセル シフト勤務表から、...
-
Excel:グラフの元データをグル...
-
2つ条件である文字の値を参照し...
-
Excelの選択肢をポップアップリ...
-
複数のシートからデータを抽出...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
エクセルにおける、グラフの指...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
Excel 複数のシートからグラフ...
-
ExcelVBAで、指定したシートに...
-
Excelの中央値の複数条件について
-
Excel ハイパーリンク先のセル...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルのワークシートが重く...
-
VBAでシート名をセルから取得し...
-
エクセルで入力→日付を自動判別...
-
質問:特定文字列から空白行ま...
-
エクセル自動の年月
-
エクセル シフト勤務表から、...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
エクセルVBA:表の内容を担当者...
-
Excel日付変更との参照先の連動
-
EXCEL VBA 一致しないデータの...
-
エクセルについて質問です 日付...
-
Excelの選択肢をポップアップリ...
おすすめ情報
もう一度、よく考えなおして修正してみましたが、やはりうまくいきません。
添付画像のように組んでみたのですが
アプリケーション定義 またはオブジェクトの定義が間違ってるとなり
黄色部分を指摘されてしまいます。
こちらに記載できればよかったんですが文字数制限のため
このような形になってしまい申し訳ありません。
ご教授いただけたら幸いです。
宜しくお願いいたします。