• ベストアンサー

エクセルVBAの質問です

エクセル2000で勤務表を作成しています 2009年7月というシートに2つの表があり、「表1」はC列に10名の氏名があり 各行の(F~AJ)には6月21日~7月20日までの毎日の出退勤(○、休、半等) を記入します。 「表2」は「表1」を暦月に変換するため7月1日~7月31日(F~AJ)となっていて、 表1を作成するとC列の氏名及び7月1日~7月20日(Q~AJ)までの出退勤も(F~Y)へ 同時に入力されるようにしてあります。 さて、新規シート2009年8月を作り「表1」に氏名(入退社で増減等の変更が あります)と1ヶ月分の出退勤を入力後、以下のことをVBAで行いたいと思います。 ボタンにより、2009年7月シートの「表2」と氏名がマッチする行に「表1」の7月21日~7月31日(F~P) の出退勤のみを「表2」の(Z~AJ)にコピーするようにしたいのですが可能でしょうか。 皆様のお力添えをお願いできればと存じます。

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

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

この質問も課題丸投げで、コードを書いてください的な感じ。 規約違反。 質問文には具体的な(シートの)表の例があげてなくて、わかりづらいし、もし親切な回答者がいて、コードを書くとなれば、色んな事項をみな回答者が仮定で決めなければならない。手数がかかる。質問者は、回答者に手数がかからないように配慮すること。ひいては回答が質問者にとって判りやすく、具体的になり、修正もしやすいはず。 ーーー 表1と表2のデータを結びつけるのは、氏名しかないのかな。そして同姓同名の職員が居ないとして、表1の氏名で表2の氏名列を検索する。 1つしか見つからないはずなので、(セル範囲).Find(What:=氏名) で表2の見つかった行を知り、その行に、表1の当職員のデータをセットしていけばよい。 退職社員で表2に見つからない場合は何もしない。 ーー まず編集ー検索の操作をして、マクロの記録をとり、およそどういうコードになるかを勉強すること。 ーー 参考コード 表1の1行分の例(本当は全行繰り返し。ForNextなどで出来る) Sub test01() simei = "田中" '本当は表1の氏名列、全員の名で繰り返す Set f = Range("A1:A10").Find(what:=simei) 'Range("A1:A10").は本当は表2の氏名列のセル範囲 If f Is Nothing Then MsgBox "見つかりません" Else MsgBox f.Row '確認し安心用 r = f.Row For j = 2 To 4 'B-D列までの例 Cells(r, j) = j '本当は表1の該当氏名列データを持ってくるよう変える Next j End If End Sub

noname#226777
質問者

お礼

imogasiさん今日は。 規則違反とのご指摘猛省致します。今後気を付けます。 VBAは、ネットを色々検索し、書籍も購入致しましたが、 似たような例はあっても諸条件を組み合わせると思いどおり 記述できず、デバックも修正できません。 こんな輩に違反とおっしゃりつつ参考コードまで提示いただき 感謝しております。 ありがとうございました。 参考コードが無駄にならないよう再度勉強します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

ika907さん 今日は! >ボタンにより、2009年7月シートの「表2」と氏名がマッチする行に >「表1」の7月21日~7月31日(F~P)の出退勤のみを「表2」の(Z~>AJ)にコピーするようにしたいのですが可能でしょうか。 マクロとはプログラムの作成です。初めてプログラムを組むのでしたら 其れなりの勉強が必要です。 先ず簡単なコードなり、ソースが公開されているプログラムを参考にして手法を身に付けるべきです。 ■Excel(エクセル)実用編:時給計算書の作成例(Excel2002/2003)↓ http://www.eurus.dti.ne.jp/~yoneyama/Excel/jituyou/jikyu.htm 内容:このページではエクセルで求めた時間から時給を計算する方法を説明しています。 時刻/時間の基本的な計算方法は→時刻の計算 基本的な、勤務時間の計算例は→勤務時間の計算例 サンプルファイル(jikyu-01.zip 約20KB)のダウンロードするとコードや関数の使用法が理解できます。 ■エクセルの勉強部屋(Excel2000/2002)↓ http://kiyopon.sakura.ne.jp/index.shtml 内容:エクセルの操作に関する図解説明 ワークシート関数の説明 エクセルの便利な使い方の説明 エクセルの操作とマクロに関する自習問題と解説 マクロの作成方法を解説、例題も パワーポイントによる操作説明とエクセルでの操作実習   エクセルでのみなさんの質問を寄せてください で「マクロの作成方法を解説、例題も」をクリックしますと、マクロの基本が解説されています。 また画面上部のソフトをクリックすると、色々と機能を使ったサンプルソフトをダウンロード出来ます。 ■Excel(エクセル)学習室(Excel2003)↓ http://www.kenzo30.com/ 内容:作品紹介をクリックして実用ソフトがダウンロード出来ます。 ■Excelの研究室↓ http://www12.plala.or.jp/nombo/index.html 内容:エクセル(Microsoft Excel)の関数・操作・VBA(マクロ)などの基本的な使い方、応用テクニックなどをわかりやすく紹介するサイトです。VBA(マクロ)をクリックするとVBAのヒント集が表示されます。 上部の関連ソフトを選ぶと一覧表が表示されます。 ■Excelでお仕事!(Excel全般)↓ http://www.asahi-net.or.jp/~ef2o-inue/top01.html 内容:全体のメニューよりVBA基本・VBA応用とダウンロードをクリックします。 この様に色々と見てVBAテクニックを身に付けましょう。 聞けば簡単ですが技は身に付きません。

noname#226777
質問者

お礼

ARIKENさん、今日は。 エクセルに関するサイトは、それなりに観たつもりでしたが ご教示いただいたサイトはまだでした。 親身にご回答いただき感謝申し上げます。 VBAの基本がどうしても理解できず 半年以上悩んで意を決してここで質問してみました。 あきらめかけておりましたが、是非参考にしてもう一度トライ してみようと思います。 質問の出し方も気を付けます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAについて教えてください

    エクセル2003 シート1     A       B      C 1  3月1日 A 100     *A列はカレンダーコントロールより選択としています 2  4月1日 B 100 3  3月1日 C 200     *B列はコンボボックスより選択としています 4  3月1日 D 200 5  4月1日 E 300     *C列は直接入力としています 6  4月1日 F 300 7  3月1日 G 100 8  4月1日 H 200 9  3月1日 I 200 10  4月1日 J 100 上記シート1の表のC列を下記シート2のC列に条件集計する シート2    A       B       C 1  3月1日   A~E     500    *選択した日付ごと及びA・B・C・D・Eの集計  2  3月1日   F~J     300    *選択した日付ごと及びF・G・H・I・Jの集計     3  4月1日   A~E     400    *選択した日付ごと及びA・B・C・D・Eの集計    4  4月1日   F~J     600    *選択した日付ごと及びF・G・H・I・Jの集計  すいませんが上記コードを教えてください 困ってます よろしくお願いします      

  • エクセルデータ整理をVBAで行いたい

    シート1(表1)                シート2(表2)  A列 B列 C列 D列            A列 B列 C列 D列 1名前 開始日 内容 終了日      1名前 開始日 内容 終了日  2鈴木 21年1月1日 AAA ○○○    2鈴木 ○○○ ○○○ 21年11月1日  3高橋 21年1月8日 BBB ○○○    3山田 ○○○ ○○○ 21年11月1日  4鈴木 21年1月20日 AAA ○○○   4高橋 ○○○ ○○○ 21年11月10日 5鈴木 21年2月10日 BBB ○○○   5高橋 ○○○ ○○○ 22年9月30日 6山田 21年2月13日 AAA ○○○ 7佐藤 21年3月3日 CCC ○○○ 8高橋 21年11月24日 CCC ○○○ 9高橋 21年11月24日 AAA ○○○ 上記の表について下記の表になるように求めたいのですが、シート1のデータ数は約17万行、シート2のデータ数は約6万行になります。 他の方の質問を参考に関数で求めようとしましたが、処理が非常に重く、入力した関数も成功しませんでした。 「VBAを使って作業をする」という結論に達しましたが、プログラムを組む知識がなく時間もないため皆さんの力をお借りしたいです。 条件 表2のB~C列は表1を参照し、表1のD列は表2を参照する B列は、求めるセルのA列(名前)が一致する行を対象として、複数の行が該当する場合はその中でも終了日に最も近い開始日を求める もし同じ数値があった場合は先に検索で該当した方の値を参照し、求めているセルの文字を赤字へ変更する(下記の表ではシート2のB5が赤字で表示される) また、開始日<終了日である C列はB列で該当した開始日のある行のC列の値を求める D列は各行のA~C列の値が一致した行のD列の値を求める シート1(表1)                   シート2(表2)  A列 B列 C列 D列                A列 B列 C列 D列 1名前 開始日 内容 終了日          1名前 開始日 内容 終了日 2鈴木 21年1月1日 AAA ○○○       2鈴木 21年2月10日 BBB 21年11月1日  3高橋 21年1月8日 BBB 21年11月10日  3山田 21年2月13日 AAA 21年11月1日  4鈴木 21年1月20日 AAA ○○○      4高橋 21年1月8日 BBB 21年11月10日 5鈴木 21年2月10日 BBB 21年11月1日  5高橋 21年11月24日 CCC 22年9月30日 6山田 21年2月13日 AAA 21年11月1日 7佐藤 21年3月3日 CCC ○○○ 8高橋 21年11月24日 CCC 22年9月30日 9高橋 21年11月24日 AAA ○○○ 説明がへたくそで申し訳ないですが、よろしくお願いします。

  • EXCEL VBA  人数分新規ブックを作成

    お世話になります。 A.xlsというブックがあります。 A.xlsの中に[X月X日振込み]というシートがあります。 この[X月X日振込み]シートは以下のような感じです。 A列に氏名 B列には前月繰越額 C列には交通費 が人数分入力されています。 となりに[内訳表]というシートがります。 やりたいこと [X月X日振込み]シートに[集計]というボタンを作成してボタンをクリックすると以下の動作を実現したいです。 (1)[X月X日振込み]シートのA2からデータのある最下行まで人数分(i)READして (2)[X月X日振込み]シートA列(i)の氏名を[内訳表]シートのC2へ入力 (3)[X月X日振込み]シートB列(i)の前月繰越額を[内訳表]シートのD10へ入力 (4)[X月X日振込み]シートc列(i)の交通費を[内訳表]シートのD11へ入力 (5)以上の3項目を[内訳表]シートへ入力したら、デスクトップの[データ]というフォルダ配下に新規ブックを作成して保存。できればブックの名称も[シート名]+A列の氏名にしたいです。 ・・これで1データの処理が終わり・・ あとは上記(2)~(5)を人数分実施 というようなイメージです。 どなたかロジックをご教授いただけますでしょうか? 何卒よろしくお願い致します。 環境 Windows7 Excel2013

  • エクセルでこんなジャンプ出来ますか

    Sheet2    A     B   C  D    E   F   G     H 3  no.   氏名     no.   氏名     no.   氏名 4 100001 山本A   102001        104001 伊藤F 5 100002        102002 佐藤D   104002  6 100003 鈴木B   102003        104003 中村G 7 100004 高橋C   102004 山田E   104004 :   :    :       :     :       :     : Sheet1    A     B    C   3  no.   氏名  回数   4 104003 中村G   3 5 100004 高橋C   5 6 102003 :   :    :    : Sheet2の表を基にSheet1のような表を作成したい。 Sheet2には約2万件の番号が登録されています。 Sheet1のA列のno.は番号順に入力されるわけではない。 Sheet1のA列にno.を入力するとSheet2より該当の氏名をB列に表示、 該当氏名が空白の場合は、Sheet2の該当セルにジャンプし、氏名入力後Sheet1のC列にジャンプして戻る。 また、Sheet2において例えば、B1に104001を入力するとH4にジャンプしEnterを押すとB1に戻り、100002を入力するとB5にジャンプ氏名入力後Enterを押しB1に戻る。・・・ということもしたいのですがマクロではなく関数で出来るでしょうか?

  • エクセル 日付を色で表わすには?

    わかりにくいタイトルですみません。 エクセルで、例えばsheet1で氏名をA1、期間の開始日をB1、終了日をC1に入力し、 sheet2でA列に氏名、1列目横軸に年と月を入力していきます。 sheet1で入力した内容が、そのままsheet2の氏名欄、そして期間に該当する月のセルを色付きで塗るにはどのようにしたらよろしいのでしょうか? というより、もしかしてこういうことはできないのでしょうか? よろしくお願い致します。

  • エクセルの並べ替えについて

    A列に個人コード、B列に氏名、C列に4月分の日数といった表がSheet1にあります。sheet2にはA列に個人コード、B列に氏名、C列に5月分の日数の表があります。表にでてくる人は同じなのですが順番がバラバラです。sheet1に並んである氏名の順番にsheet2も並び替えをしひとつの表にしたい場合どうすればいいでしょうか??かなり困っています。アドバイスよろしくお願いします。

  • エクセル シート自動作成

    A1に2016年、B1に8月などと入力した時 A2~A15に日付を自動出力 B2~B15に曜日を自動出力 C2~C15に文字列&日付で自動表示するファイルを作成しました A1 2016年 B2 8月 A列  B列  C列 1日 月曜日 名前8月1日 2日 火曜日 名前8月2日 3日 水曜日 名前8月3日 ・ ・ C列のC2~C15の名前でシートを自動的に作成出るようにしたいのですが たとえばボタンを作成しボタンを押したときにシートが自動的に作成される または年と月を入れた際に自動的にシート作成されるようにしたいのですが さらにシートは原本を作っているのでそれをもとにコピーされるように したいのですが? どうすればいいでしょうか? お手数ですが宜しくお願いします。

  • エクセルマクロで出来るでしょうか。

    マウスでクリックしたセル位置の入力内容を、別のセル位置に表示するようなマクロは出来るでしょうか?。 考えているのは、弁当注文の集計表の作成です。 A列に氏名、B列に店名、C列に品名、D列に金額と、予め入力してある表で、 当日注文する分を、個人毎に、氏名・店名・品名・金額・とクリックすれば、 同じシート内に作成した集計表に、クリックした順番に表示していくというようなものです。 予めの入力は、各列5行目から行っています。 また集計表は、F列、G列、H列、I列の5行目から下に、クリックした順番に表示できればと思っています。

  • Excelの関数を使ったら出来ますか?

    いま、Excelで以下のような表を作成しています。 (Sheet1) A列 該当者氏名 B列 該当者整理番号 C列 D列 (Sheet2) A列 書類番号  B列 該当者氏名 C列 該当者整理番号 (Sheet1)の該当者番号を入力したとき (Sheet2)に、(Sheet1)に入力した該当者番号と同じものがあった場合 (Sheet1)の C列に「○」を自動的に表示させたいです。 さらに、できれば同様に (Sheet1)の該当者番号を入力したとき (Sheet2)に、(Sheet1)に入力した該当者番号と同じものがあった場合 (Sheet1)の D列に(Sheet2)のC列の書類番号を自動的に表示させたいです。 関数でできるようであれば、教えてください。 自分なりに考えついたもので試してみたのですが どうも、うまくいかないんです。。。 よろしくお願いします。

  • エクセルに関して質問させて頂きます。

    エクセルに関して質問させて頂きます。 シートA A    B(日付がA列、○×がB列、年がC列の意味) 1 1月1日、○、2000年 2 1月5日、○、 3 1月6日、×、 4 1月8日、×、 5 1月12日、×、2001年 6 1月15日、○、 7 1月18日、×、 8 1月20日、○、 9 1月23日、○、 10 1月25日、○、 年を記入するマスが一定でないとした場合、年ごとの○から×を引いた値と何年の数値かを出すにはどうしたらよいのでしょうか? >何年の数値 例   列F    列G 1 2000年  0 2 2001年 +1 などです。 >年を記入するマスが一定ではないとした場合 例えば、シートAでは2001年が列Cの5に記入されています。この2001年がCの7やCの8と変化しても関数を書き換えることなく年ごとの「○から×を引いた値」を表示させたいのです。 わかる方がいらっしゃいましたら、どうか力をお貸しください。 説明に至らない点があるかもしれません。そのときはご指摘頂けると有難いです。

専門家に質問してみよう