アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
現在、データシートから各シートへデータを入力するマクロを作成しようとしています。

ブックの一枚目のシートにデータシートがあり
データシートは以下のようになっています

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
----------------------------------------------

そもそもこんな単純なものではないとは思っていて、根本的に間違っているかもしれません。
実際に「アプリケーション定義 または オブジェクト定義のエラーです。」
と表示され実行できません。
どこから手をつけていいかわからないため、ご教授いただければと思います。
宜しくお願いいたします。

質問者からの補足コメント

  • もう一度、よく考えなおして修正してみましたが、やはりうまくいきません。

    添付画像のように組んでみたのですが
    アプリケーション定義 またはオブジェクトの定義が間違ってるとなり
    黄色部分を指摘されてしまいます。

    こちらに記載できればよかったんですが文字数制限のため
    このような形になってしまい申し訳ありません。

    ご教授いただけたら幸いです。

    宜しくお願いいたします。

    「データシートから各シートへデータを貼り付」の補足画像1
      補足日時:2017/02/10 17:53

A 回答 (2件)

> 実際に「アプリケーション定義 または オブジェクト定義のエラーです。


> と表示され実行できません。

> どこから手をつけていいかわからないため

エラー表示で、デバッグボタンをクリックすれば、どの行でエラーになっているか分かります。
その行で使用している、関数の使い方が正しいか、変数の値が想定しているかを確認していきます。


> Do Until Cells(i, 2) = ""

最初にこの行を通るときに、変数iの値はいくつになっていますか?
その値はCellsのパラメータとして使用して問題ありませんか?


あとOffsetのパラメータが3つ以上ありますが、正しい使用方法ですか?
 ・Range.Offset プロパティ (Excel)
  https://msdn.microsoft.com/ja-jp/library/office/ …


# 以上はパッと見で気づいた点です。他にも問題があるかもしれません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご指摘頂いた通り
> Do Until Cells(i, 2) = ""
がエラー表示されており、考えたところおかしい部分は理解できました。
i=1を上記一行の上に挿入したところ、エラーは起こらなくなりました。

ですが、エラーは起こらないものの、実行してもなんの反応もなく今度はどこが問題なのかさえわからなくなってしまいました。

Offsetに関しては勉強不足のようなのでもう一度調べてみようと思います。

ありがとうございました。

お礼日時:2017/02/10 11:46

No.1です。


コードがコピペできないのでこちらで確認していないのですが

行うことはNo.1で書いたことと同じです。

使用している変数の値を確認する → 問題の行の直前にMsgBoxで表示させて確認する。
その値が適切なパラメータとなっているか確認する
 →Worksheets(j)なら、Msgbox Worksheets(j).Name でシート名を表示させてみるとか

No.1ではループの最初で問題が起こりましたが、今回が何回かループしてから問題が起こるのかもしれませんね。

# VBEには、ステップ動作とか、ウォッチウィンドウとかデバッグ用の機能も搭載されていますので、確認してみて下さい。
    • good
    • 0
この回答へのお礼

ご指摘の方法で検証してみたのですが、肝心な知識が足りないため解決に至りませんでした。
あらためて質問させていただきます。
ありがとうございました。

お礼日時:2017/02/14 09:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!