• ベストアンサー

入力規制で入力されたセルの客名と、同じ客名のシートへ保管してゆくには?

初めて質問させて頂きます。Excel 2003 で困り果ててます。 入力用のシートを作って、他のシートへマクロコピーさせる所で完全に立ち止まっています。 初めからやり直しても構わないのでどなたか教えてください。 当方PCには慣れているつもりですが、office VBAは少しさわり始めた程度です。 製造会社のシステムで、各担当者が、客名(15件固定)、製造寸法、 単価、金額、総金額、その他様々な情報(20列程度)を注文ごとに 入力用シートに入れてゆきます。 各シート名・・入力用、作成書、請求一覧用、客A、客B・・客O(15件固定) 1.入力用シートのC4セルに客名/入力規制(リスト)=シート名と同じ 2.入力用シートは転記させたら消す 3.入力用シートの行数は注文の都度変わる 4.作成書シートへはA7~N7列以下の入力されている行数分コピー 5.請求一覧用シートへはB4/C4/E4/F4/C7/E7/Q7/K4/N4/P4 の固定セルの値だけ追記させてゆきたい 6.客A~OへはA4~S4列以下の入力されている行数分、客名シートに振り分けて追記させてゆきたい 上記の条件で4.5.6. の操作を個々にボタンで操作できるようにするには どのようにすれば良いでしょうか? 4の操作後印刷したらデータは消します。5.6.は上に上にデータ挿入出来ると良いです。 標準モジュールまで入力できたら、後のボタン作成はできます。 不慣れな質問ですが、どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

4と5の一部だけ。 後は色々と試して観てください。 Sample04では、使用されている最終行を求め、A7:N最終行をコピーして作成書シートの先頭に挿入しています。 Sample05は、請求一覧用シートの先頭に空行を追加し、入力用シートの固定セルの値を貼り付けて居ます。 6は、4と同様の事をシートと範囲を変えれば出来ます。 なお、入力用シートをクリアするのは、6終了後にしないとデータが消えてしまいます。 Sub sample04()  Dim lastRow As Long    Sheets("入力用").Select  '使用されている最終行取得  lastRow = Range("A7").SpecialCells(xlCellTypeLastCell).Row    If lastRow >= 7 Then   'A~Nの7行目から最終行までコピー   Range("A7:N" & lastRow).Copy      '作成書シートの先頭に挿入   Sheets("作成書").Select   Range("A1").Insert Shift:=xlDown   '値だけを貼り付ける場合、以下も必要   Range("A1").PasteSpecial Paste:=xlPasteValues  End If   End Sub Sub sample05()  '請求一覧用シートの先頭に空行を追加  Sheets("請求一覧用").Rows("1:1").Select  Application.CutCopyMode = False  Selection.Insert Shift:=xlDown    '入力用シートの値を転記  Range("A1") = Sheets("入力用").Range("B4").Value  Range("B1") = Sheets("入力用").Range("C4").Value  '以下省略・・・ End Sub

shocyan001
質問者

お礼

お礼が遅くなりすみませんでした。 質問の内容はクリアできました。つまずいていた点が一つ済んだ事によりVBAのコツが少しつかめたような気がします。 回答頂いたみなさんがヒントになったのですが、 全体的な流れの処理方法の回答が頂けたので、 評価させていただきました。ありがとうございました。

shocyan001
質問者

補足

No.1の方と同様にすぐに教えてくださる方がいることに 大変驚いています。mt2008様 ありがとうございました。 また結果を必ず報告します。取り急ぎお礼まで。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

多分入力用シートのデータを作成書シート・請求一覧用シートへ累積していきたいということかな。 質問の書き方が具体的だが判りにくい。 もしそうなら、入力用シートにコマンドボタンを1つ貼り付けて そのページ(作業的な、論理的な画面単位のこと)を入力し終わってボタンをクリックすると、作成書シートの最終行の次行から下行に入力シートでの入力行数分をコピーとか転記すれば仕舞いでは。 それには転記に入る前の(1段階前の)最終行を割り出せばよい。 それは良く使われるように下記のようなやり方がよかろう。 Sheet1が入力シートで、そこにコマンドボタンがあり Sheet2に毎回の入力データを累積していく場合 Private Sub CommandButton1_Click() d = Worksheets("Sheet2").Range("A65536").End(xlUp).Row MsgBox d 'ここにSheet1から各行を転記するルーチンを入れる '入力シートの入力データセルをクリアするルーチンを入れる End Sub でヒントとして納得できるでしょう。これだけのことだと思うが。 >不慣れな質問ですが 質問が不慣れと言うより、処理パターンごとの経験不足(これから)ということでしょう。

shocyan001
質問者

お礼

お礼が遅くなりすみませんでした。 質問した内容はなんとか乗り切れました。 今回はありがとうございました。助かりました。

shocyan001
質問者

補足

回答ありがとうございます。ズバリそのとおり経験がありません(;^^) imogasi様のヒントも取り入れつつ、No.1~2さんとで少し判ってきました。質問文も今後明瞭に努めます。

  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.1

シートの詳細が書かれてない(つか、この掲示板じゃ表示不能)ので、 ヒントだけ。 1.以下の式で、「レコードの最後の行の次」を選択できます。 Range("A65535").End(xlUp).Select 起点は65535行でなく充分に空欄が続く場所からでオッケーです。 [CTRL]+[↑]をするのと結果は同じです。 データベースにデータを追記する場合に良く使う命令です。 2.次の式でセルC4に記入されたシート名を選択できます。N_Sheetは変数です。 N_Sheet = Cstr(Range("C4").Value) Sheets(N_Sheet).Activate 直接選択するより、一旦変数に取り込んだほうが、入力データのチェックが しやすいと思います。この手の「文字データ入力」は必ずチェックを入れないと 誤った文字が来たときの結果がメチャメチャになります。 いずれにせよ、ココまで来るとキートレースだけでは無理があります。 VBAの教本等を準備して当たるほうがいいような気がします。 注)式そのものの動作チェックはしていません(多分大丈夫だと思いますが)  動かない場合は適宜チェックしてみてください。

shocyan001
質問者

お礼

お礼が遅くなりすみませんでした。 質問した内容はなんとか乗り切れました。 どの方も教えて頂いてみなさんに点を 付けたかったのですが。選ばないといけないようなので FEX2053さんにはこのお礼メッセージだけで 申し訳ありません。

shocyan001
質問者

補足

すぐに回答が来たので驚いています。 貴重なお時間を頂戴しありがとうございました。 これから再トライしてみます。 また結果を必ず報告します。取り急ぎお礼まで。

関連するQ&A

専門家に質問してみよう