- 締切済み
Excelで別シートから自動入力したい。
「seet1」と名付けたシートがあります。 B-2のセルに品物のIDナンバーを入力する欄があります。 IDナンバーは1~100のどれかです。 またB-4のセルには、品物の発送先を入力する欄があります。 別の、「seet2」と名付けたシートがあります。 Aの列に品物のIDナンバーが上から番号順に入力する欄があります。 Bの列には、品物のIDナンバーに対応して、上から順にその品物の発送先を入力する欄があります。 私がやりたい事は、 (1)発送先が未入力の一番若いIDナンバーを、自動でseet1のB-2のセルに入力する事。 (2)B-4のセルに入力した発送先を、IDナンバーと対応させて、seet2の項目へ自動で入力する事。 (3)seet1は、エクセルのファイルを開くと、毎回何も入力されていない状態で立ち上がる。 (4)seet1が消去されても、seet2はそのまま残る様にする事。 どのようにすれば可能でしょうか。 (1)~(4)のうち、どれか一つだけでも教えて頂けたら幸いです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
No2,3です。 補足がありました。 Worksheets("Sheet2").Cells(Range("B2").Value, 2).Value = Range("B4").Value は、1行目に項目などあれば、 Worksheets("Sheet2").Cells(Range("B2").Value + 1, 2).Value = Range("B4").Value で調整してください。 別案の動き方では Sub Macro1() GYOU = Worksheets("Sheet2").Range("A65536").End(xlUp).Row + 1 Worksheets("Sheet2").Cells(GYOU, 1).Value = Range("B2").Value Worksheets("Sheet2").Cells(GYOU, 2).Value = Range("B4").Value Worksheets("Sheet2").Cells(GYOU, 3).Value = Range("B6").Value End Sub とGYOUという変数に最終行の行番号をいれて指定した方がわかり易いでしょうか。 END(xlUp)以外は、基本のコマンドです。 Cells(GYOU, 1)は、Cells(行番号の数値, 列番号の数値)の事です。 なぜそう動きするのかは理解して応用してください。
- imogasi
- ベストアンサー率27% (4737/17070)
質問文章がわかりにくい。質問に実例を挙げないからだ。 質問の表現の見本を挙げてみる。参考にしてほしい。 ーー 入力シート(Sheet1) ーーーA列ーーB列 第1行ーーー 5 <ーID番号 第2行ーーー --- 第3行ーーー 名古屋工場 <-送付先 反映シート(Sheet2) ーーーID番号 送付先 第1行 1ーーー千葉化成千葉営業所 第2行 2ーーーK建設靜岡始点 第3行 3ーーー関東工場 第2行 4ーー 広島市 第3行 5ーー 名古屋工場 <-Sheet1の上記を追加 ーーー 入力する場所を固定して、こういうやり方にするのは、 VBAでも出来る人の考えることで、 エクセル向きではない。初心者向きではない。 Sheet2に直接データを入れていくのがエクセルの普通のやり方。 それもやるなら、普通は上記のSheet1はVBAでのユーザーフォームのテキストボックスなどが担うもの。 最終行を捉えるのもVBA向きである。 シートの変化を反映や、次の入力のための消去もVBA向き。 普通はこの機会に、データを採ってくれというキッカケを知らせるボタンなどをSheet1やユーザーフォームに持たせるものです。 ー それが無いので、Sheet1の発送先が変わったら、データ取得のキッカケにせざるをえない。 そのため下記コードの Application.EnableEvents = False などが必要になる。 ーーー 例データ Sheet1 4 靜岡建設 (エンターを押す直前) ーー Sheet2 1 東京工場 2 南支店 3 大阪 4 靜岡建設 <-今回セットする内容 5 6 7 <-前もって番号は、入っている前提 ーー コードSheet1のシートタブで右クリック コードの表示で出る画面に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$4" Then Application.EnableEvents = False n = WorksheetFunction.Match(Range("B2"), Worksheets("Sheet3").Range("A:A"), 0) ' MsgBox n Worksheets("Sheet3").Cells(n, "B") = Range("B4") Range("B2") = "" Range("B4") = "" Application.EnableEvents = True End If End Sub ========= VBAを使うよりも、 似たような機能で データーフォーム ガあるので勉強のこと。
お礼
どうもありがとうございます。 ためになりました。 至らない部分に関してはもっと勉強しておきます。
- hallo-2007
- ベストアンサー率41% (888/2115)
失礼しました。 Sub Macro1() Worksheets("Sheet2").Cells(Range("B2").Value, 2).Value = Range("B4").Value End Sub でした、B2をC2と打ち損じていました。 せっかくですので、別案ですが、一般的には Sheet2には 1 A社 2 B社 とID番号は準備せずに、マクロ実行すると、 1 A社 2 B社 3 D社 と一行づつ番号も増えていくほうが手間いらずだと思います。 例えば、B2セルには =MAX(Sheet2!A:A)+1 とします。 A列の番号の最大値より、ひとつ大きい数字が出ます。 VBAは Sub Macro1() Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1).Value = Range("B2").Value Worksheets("Sheet2").Range("B65536").End(xlUp).Offset(1).Value = Range("B4").Value End Sub Sheet2のA65536(一番下の行)から上に移動して空白でない行を探して ひとつ上に移動した所にB2やB4を入れます。 番号と送り先が一緒に入ると思います。
- hallo-2007
- ベストアンサー率41% (888/2115)
VBAを使用することになりますが、 Sheet2に 1 A社 2 B社 3 4 ・・・ 100と既に入っているとして (1)は関数で B2セルには =COUNTA(Sheet2!B:B)+1 Sheet2のB列の入力済みデータの数より1つ多い数 1行目に項目など有りましたら、調整してください。 (2) B4セルに D社と入力済み、VBAで標準モジュールに Sub Macro1() Worksheets("Sheet2").Cells(Range("C2").Value, 2).Value = Range("B4").Value End Sub をコピィ Sheet2のB2セルの数値の行の2列目(B列)にB4の文字を入れるマクロです。 B4に送り先入力後、マクロを実行します。 (3)VBAProjectのThisWorkBookを開いて Private Sub Workbook_Open() Range("B4").Value="" End Sub ブックを開いた時にB4セルは空白(B2セルは常に表示しています) (4)は以上で満足するはずです。
補足
(1)に関してですが、思っていた通りの動作を確認する事ができました。 ありがとうございます。 また、(2)についてですが、マクロを実行すると 「アプリケーション定義またはオブジェクト定義のエラーです。」 というメッセージが出てきてしまいます。 どうすれば、良いでしょうか。 もしよろしければ、ご教授お願い致します。
- RH01
- ベストアンサー率45% (37/82)
こんにちは。 (2)の回答だけなのですが、記載します。 ■B2のIDに対応した発送先をB4に自動で入力させる方法 B4のセルに以下の数式を入れてください。 =VLOOKUP(B2,seet2!A1:B9,2,FALSE) これはIDと発送先の一覧が 「seet2」のA1からB9だったと仮定した式なので 範囲が広かったら「A1:B80」などのように広げてください。 (もしくは、先に一覧に名前を定義させて、範囲のところに名前を指定する方法もあります。)
補足
こんにちは。 回答ありがとうございます。 さて(2)についてなのですが、 私のやりたい事は、sheet1のB4に入力した発送先を、sheet2のB列へ入力した順番に上から転記したいというものです。文章が分かりにくくてすみません。 また、=VLOOKUPでは、sheet1が変更されると、一緒にsheet2も変更されてしまうのではないでしょうか?
お礼
この度は丁寧に色々と教えていただき、ありがとうございました。 hallo-2007さんのおかげで、なんとかなりそうです。 あと、お礼ポイントの件なのですが、間違えて良回答を選ばずに締め切ってしまいました。ポイントでお礼したかったのですが・・・ 申し訳ありません・・・