こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル VBA あるシートで指定したセルを他のシートの下端のセルに自動で貼り付ける

エクセル2003です。宜しくお願い致します。
シートは「メイン」、「本社」、「地方」というのがあり、「本社」と「地方」は全く同じフォーマットで、「メイン」は本社か地方を分類する欄があります。
元のデータを「メイン」シートに入力後、フォームで作成したボタンをクリックしたら、各行が「本社」、「地方」に自動で振り分けられるようにしたいです。(追加で振り分けた際には、最後の空白行にデータが追加されるようにしていただきたいです。)

各シートは以下のようになっています。
・「本社」、「地方」シート
  A     B   C
1通し番号 名前 性別
2

・「メイン」シート
  A     B   C   D  
1通し番号 名前 性別 場所
2

※1行目は項目名です。
 通し番号は、各シートで固定なので、マクロを実行しても変わることはありません。
 振り分けたいデータは、「メイン」シートのB2,C2以降のセルです。
 振り分け先のシートを見分けているのは、D1セルです。
 VBA実行ボタンをクリックしたら、下端のセルに自動でデータが追加されるようにしたいと思っています。(ただし、通し番号は各シート毎の番号が保持されたままです。)つまり、B列、C列の下端に自動で貼り付けられるということです。

マクロ初心者で、ネットをいろいろと調べたのですがどうもうまくいきません。
宜しくご教示いただければ幸いです。

投稿日時 - 2008-08-26 15:31:39

QNo.4280082

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。
以下のマクロで、試してみてください。

Sub 振り分け()
  Dim wRow1      As Long
  Dim wRow      As Long
  Dim mRow      As Long
  Dim ShtNm      As String
  '
  With ActiveSheet
    'メインシートの入力最大行数を求める
    mRow = .Range("B" & Rows.Count).End(xlUp).Row
    For wRow = 2 To mRow
      '場所
      ShtNm = .Cells(wRow, 4)
      '振分先の設定行を取得
      wRow1 = Get_Row(ShtNm)
      'B列設定
      Worksheets(ShtNm).Cells(wRow1, 2) = .Cells(wRow, 2)
      'C列設定
      Worksheets(ShtNm).Cells(wRow1, 3) = .Cells(wRow, 3)
    Next
  End With
End Sub
'振分先の設定行を取得
Function Get_Row(ShtNm As String) As Long
  Get_Row = Worksheets(ShtNm).Range("B" & Rows.Count).End(xlUp).Row + 1
  If Get_Row = 1 Then
    Get_Row = 2
  End If
End Function

投稿日時 - 2008-08-27 17:22:38

お礼

おー!!!!
完璧です!!
しかも式の中にちゃんと説明まで入れてくださってとても分かりやすいです(><)

マクロを実行した際の感動が半端じゃないです!
本当にありがとうございました!!

大変勉強にもなりました。
ご教示いただいたことに感謝致します。

投稿日時 - 2008-08-27 20:51:06

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

私には、内容が理解できません
何をどのような条件で、どうしたいのかが読み取れません
なぜ、折角「メイン」シートに、まとめたデータを、再度、振り分けるのですか?
まとめる際に、条件はあるのでしょうか、それとも単純に本社、地方の順でよいのですか、コピペではダメなのですか
場所には、どんなデータが入るのですか、気にしなくても良いのでしょうか
無理して、マクロでやる必要があるのですか

投稿日時 - 2008-08-26 21:24:09

補足

「メイン」シートは、データをまとめるためにあるのではなく、データを振り分ける為だけに用意してあるものです。
私が扱っているデータは、既に完成されたものではなく、随時増えていくものなので、各シートをいちいち開いて入力するとかなりの手間になってしまうので、「メイン」シートに入力したものを一括振り分けしたいと考えている次第です。
ちなみに、質問させていただいている中では項目名、シート数が少なくなっておりますが、実際に振り分けるデータは10項目(B1~K1)、シート数8になっております。
実際の選択範囲は任意で変えれば良いので、あえて質問には数を少なく記載させていただいた次第です。
まとめる際の条件は、「メイン」シートのB列にあるものは別のシートのB列の下端に、C列にあるものはC列の下端に、・・・という条件だけです。ただし、「メイン」シートのD1(場所)はあくまでも振り分けるシートを判別するだけなので、D列のデータは振り分け対象ではありません。
場所に入るデータは、シート名なので「本社」、「地方」のいずれかが入るものとお考えください。
膨大なデータ量を扱っているので、メインシートに入力したものを一括振り分けをしたいと考えております。

この説明では足りないかもしれませんが、是非とも宜しくお願い致します。

投稿日時 - 2008-08-27 00:10:50

あなたにオススメの質問