• 締切済み

エクセル マクロを使った表について

エクセル初心者です。マクロを、教えていただけませんか。 シート1:入力シートです。 例えば以下のような表があります。         月 1日 2日 3日 4日・・・31日 個別物件名1   A  B  C  空白    D 個別物件名2   E 空白 空白  F    空白 個別物件名3  空白  G  H   空白   I シート2:シート1のリンクシートです。         月 1日 2日 3日 4日・・・31日 個別物件名1   ○  ○  ○ 空白    ○ 個別物件名2   ○ 空白 空白  ○   空白 個別物件名3  空白  ○  ○ 空白    ○ 上記のようにシート1には毎月、ある決まりに沿ってアルファベットを 入力するのですが、入力し終わったら(入力と同時でも構いません) シート2には、そのアルファベットを入力してある位置に印として ○を打ちたいんですが、どのように組んでいけばよいのか解りません。 すいませんが、ご教授ください。よろしくです。 補足 ・シート1とシート2の表の書式はまったく違うため、貼り付けは  できません。 ・結局は、シート1のあるセルに文字が入力されると自動的に  シート2のセルに○の印がつき、上記表で言えば、反映回数?は  9回ですが月によって反映回数は変わります。(入力と同時の場合) 説明が下手ですいませんがよろしくお願いします。

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

No2です。 > 質問のしかたが悪かったと思います。 はい、ほんとに悪すぎます。 掲示した表が間違っているなんてのは最悪です。 それにあなたは、「ある決まりに沿ってアルファベットを入力するのですが」と書いておきながら、実は物件名? 掲示した表にもちゃんと「物件名」と書いているにもかかわらず、なんでアルファベットだなんて余計なことを書くの? それに、さきほどの回答でも配置がわからないと行っているにもかかわらず、補足でも配置に触れないのは何故? 理解に苦しみます。 シート1のアドレスとシート2のアドレスは同じでないのなら、それぞれのアドレスがわからなければ回答したくとも出来ないです。 いくら初心者でもマクロをいじろうとするくらいなら当然それくらいはわかりますよね? 以上、今後のあなたの質問に適切な回答がつくためのアドバイスです。

rougansamm
質問者

お礼

表等を間違えてしまい、本当に申し訳ありません。 物件名を書くよりABC・・とアルファベット表示のほうが わかりやすいと思ったものですから。 配置はシート1は3行31列で、シート2は100数行31列 なんです。 シート1のある日付に物件名を入力すると、 シート2に書かれている物件名と日付が一致したセルに ○をつけるということなのです。 いろいろと、ご指導いただきありがとうございます。 もっと勉強していきたいと思います。

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

>マクロを、教えていただけませんか。 コードを書いてくれと取られかねない考えなら、丸投げで、この質問コーナーの規約違反と思います。 関数でも出来ることを、マクロのお勉強ですか。 大して難しくないのに自分でコードを作ることを考えること。 1つのヒントは(他にいくらも別のやり方がある。コード数は下記が 多分最少だと思うが) Sheet1(原データシート)とSheet2が全く同じ対応セルを考えるでよければ Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") For Each Cl In sh1.Range("B3:AF100") 'B-AF列、3-100行 If Cl <> "" Then sh2.Cells(Cl.Row, Cl.Column) = "○" End If Next End Sub シートSheet1のB3:AF100の範囲で空白でなければSheet2の対応セルに ○を入れている。 自分の場合に合わせて改良すること。 上記はバッチ処理であって、 即座にSheet2に反映させる手もあるが、イベント処理の考えの勉強をしてからということと、シートのChangeイベントは色々な操作のケースに対応しておかなければならないので、中級者以上の課題だと思う。

rougansamm
質問者

お礼

早速のご回答、有難うございます。 質問の表を間違えてました。すいません。 エクセル、マクロ、もっと勉強したいとおもいます。 すいません。 ありがとうございました。 今後とも宜しくお願い致します。

回答No.3

>エクセル初心者です。 マクロを、教えていただけませんか。 >シート2には、そのアルファベットを入力してある位置に印として○を打ちたいんですが、どのように組んでいけばよいのか 「シート2」には、「○」 と 「空白」 以外に何か別のものが入るますか? ただ単に、シート1のアルファベットに対応したセルに「○」を入れるだけいよいのであれば、次の関数で対応できますが。 シート1の名前を、“sheet1” とすると、シート2の”A1"セルに  =IF(Sheet1!A1="","",IF(AND(CODE(Sheet1!A1)>64,CODE(Sheet1!A1)<123),"○","")) をいれて、必要なところまで、ドラッグコピーすればOKです。 どうしても、マクロで対処したいのであれば、自分で組んだマクロを、補足欄に書いてください。 それを見て、あなたの出来そうな範囲のコードで添削する方法がベターでしょう。

rougansamm
質問者

お礼

早速のご回答、有難うございます。 エクセル自体、もっと勉強したいとおもいます。 すいません。 それと、質問の表を間違えてました。すいません。 ありがとうございました。 今後とも宜しくお願い致します。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> ・シート1とシート2の表の書式はまったく違うため、貼り付けはできません。 書式がちがうのはわかりましたが、配置はどうなのですか? 提示された表を見る限り、シート1とシート2は同じ配置に見えますが。 もし、Sheet1のアルファベットを入力するセルと、Sheet2の○を入力するセルのアドレスが同じなら、以下のように書くこともできます。 1. Sheet1のシートタブを右クリック、[コードの表示]。 2. 出てきた所に、下記のコードを貼付けます。 3. 右上の × でExcelの画面に戻ります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If InStr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Target.Value) = 0 Then Exit Sub Sheets("Sheet2").Range(Target.Address).Value = "○" End Sub

rougansamm
質問者

補足

早速のご回答ありがとうございます。 質問のしかたが悪かったと思います。 (参考表が間違ってました。すみません。) 質問補足としまして、シート1は物件名を入力します。(AとかBとかが物件ビル名にあたります。) シート2には物件数が100数件あり、シート1のアドレスとシート2のアドレスは同じではありません。 例えば、シート1に6月4日にAビル、6月5日、Bビルと入力した際 シート2にあるAビル、Bビル・・・(ビル数100数件)と日付が一致したセルに○の印を打ちたいのです。 月 1日 2日 3日 4日・・・31日    A  B  C  空白    D    E 空白 空白  F    空白   空白  G  H   空白   I A,B,C・・がビル名です。 この表をシート2の           月 1日 2日 3日 4日・・・31日 個別物件名A   ○  空白 空白 空白   空白 個別物件名B   空白 ○  空白 空白   空白 個別物件名C   空白 空白  ○ 空白   空白 ・・・ ・・・ ・・・100数件 お忙しいところ、恐れ入りますが上記の表で宜しくお願い致します。 すいません。

  • saki0314
  • ベストアンサー率41% (5/12)
回答No.1

マクロではなく関数でいけるんではないでしょうか? =IF(Sheet1!A1="","","○") ↑シート1のA1セルが空白の場合は”空白”そうでない場合は”○” これをシート2の丸を判別するセルに貼り付けてあげればいいんでは? マクロにする理由は??

rougansamm
質問者

お礼

早速のご回答、有難うございます。 マクロでないと、組めないと思ったものですから・・。 質問の表を間違えてました。すいません。 もっと勉強したいと思います。 ありがとうございました。 今後とも宜しくお願い致します。

関連するQ&A

  • Excelの関数・マクロについて教えて下さい。

    Excelの関数・マクロについて教えて下さい。 公休一覧表を作り、加えたい機能があったので 前回質問させて頂き、解決することができました。 しかし公休一覧表ではなく乗務割表に変更して欲しい との指示を受けたため作りなおしました。 そのため教えていただいた関数ではできなくなってしまい また質問を立てさせて頂きました。 現在のファイルはD3~AH3までが1~31までの日付、 B5~B35までが従業員名、D5~AH35内の全てのセルに 出勤の「出」の字を打ち、休んだ都度「出」を消していき、 シートの右には「出」の数、公休(空白セル)の数を表示する というシステムになっています。 そこで教えて頂きたい加えたい機能なのですが、 一番最後に出勤した日(最初から全てのセルに「出」を 入力しているので一番右の出ではなく、空白セルの 左右どちらかの「出」が最後の出勤日になります)から 1週間後のセル(D5~AH35内)に 自動で印(塗りつぶしなど)を付けるという機能です。 14日が最後の出勤日であれば21日に印がつき、 15日が最後の出勤日になれば前日の印が消え 22日に印を付けたいのですが可能でしょうか? 前回はD5~AH35内の空白セルに休む都度公休の 「公」の字を打つという物だったので単純に 一番右の「公」から7列右に印を付けていけば良かったのですが、 今回は最初からD5~AH35内の全てのセルに「出」を 入力しているので同じようにはできません。 前回教えて頂いた関数↓  =AND(COLUMN(A1)-7=MATCH("ー",$D5:D5),OFFSET(D5,0,-7)="公") 関数やマクロその他も含め、何か手があれば御教授願います。 小さくて見えにくいかと思いますが添付画像は14日まで入力した分です。

  • エクセルの関数を教えて下さい。

    シート1の38列目のセルに、○(丸)印が入力されていて、シート2のセルに、シート1のそのセルが○印なら「合格」、空白なら「空白」と表示させたいです。 ちなみにシート2の他のセルには =VLOOKUP($A$10,"シート1の範囲",56,FALSE)と入力していて、そこはそれでOKなので、同じくVLOOKUPの検査値はA10のままで、○印なら「合格」、空白なら「空白」と表示させるやり方を教えて下さい。 シート1とシート2の行に番号をふって、その番号から検索できるようにしたいです。 分かりにくい文章で申し訳ありません。 どうぞ、よろしくお願い致します。

  • Excelのマクロについて教えて下さい。

    公休一覧表を作ったのですが加えたい機能があります。 2の行に1~31日の日付があり、 Bの列に30人の作業員名が入力されています。 休んだ日の所に都度、公休の公という文字を打っていき その月に何回休んでるかを シート右のAIの列に表示しています。 加えたい機能というのは、 B1の作業員の6日に公を入力したら 一週間後の13日に自動で×(印になるようなもの) を入力させたいです。 B1の作業員の7日に公を入力すると 13日の印が消え、7日の一週間後の14日に印が付く。 というような形で30人分自動で一週間後に印を付けたいです。 VBAなどマクロなど関数なども含め、何か手があれば初心者にもわかるよう 詳しく教えていただけると助かります。よろしくお願いします。

  • エクセルで出勤表から出勤者の名前を出したいのですが。

    エクセルで出勤表から出勤者の名前を出したいのですが。 介護施設に勤務しています。A~E(職員名とする)までの5人が勤務しているとします。今ここに、縦がA~E、横が月日のエクセルの表(表1とする)があるとします。 仮に6月1日はA,B,Cの3人が出勤で表の該当セルに○が入力されています。6月2日はB,D,Eが出勤で同様に○が入力されています。こんな感じで月末までの勤務表が出来ているとします。 ここで別のシートに「今日の出勤者」として当日の出勤者を表(表2)に出したいと思っています。 私が望んでいるのは、表1の希望の月日をクリック、もしくは入力すると、自動で表2のセルにその日の出勤者だけの名前が返せればいいのですが・・・。 本日の出勤者として本部に名前入りの表をあげないといけなく、これまでは表1から該当日の○を数えては、その職員名を手書きで書いて送っていました。この煩雑な作業を効率化したいと思っています。 よろしくご教授お願いいたします。

  • エクセルで表の内容を置きかえたい

    エクセルで同じフォーマットの表があり、月ごとのデータをとっています。(縦横10項目程度)これを別のシートに、年と月を入力するセルを設定しそこに数字を入れると、その月の表の内容が反映される、といったことをしたいのですが。。。 エクセルは2003です。 もしかして過去に同じような質問があるかもしれませんが、 うまく探せませんでした。 大変困っております。 どうかよろしくお願いいたします。

  • 総当たり表のエクセルマクロ

    総当たり表のエクセルマクロ エクセルで総当たり表を作るとします。分かりやすくするため,アからオの5人で,BからF列の1行目にアからオ,A列の2から6行目にアからオと入力された総当たり表だとします。 総当たり表の外のセルの2箇所をそれぞれ対戦者入力セルとして,そこに対戦者の名前(ア~オ)を入力すると,自動的に総当たり表に○をつけてくれるマクロを作成したいと思っています。1回の組み合わせで自動的に2箇所に○をつけるマクロです。 そんな面倒なことをしなくても表に直接○をつければいいと思われるかもしれませんが,実は対戦者が膨大なので1回の組み合わせで2箇所に○をつけるのが手間なのです。 それと,対戦者入力セルの1箇所に名前を入力すると,他のセルにまだ対戦していない名前が表示され(リストのような形で)クリックで他の対戦者を入力できるようにしたいと思っています。 エクセルは昔ちょこっとだけVBAをかじったことがある程度で,今は忘れてしまいました。 仕事で急遽依頼されており,困却しております。 心やさしい方,ご教示願います。

  • excelで各シートとリンクした一覧表でのセル表示について

    過去質問を読んで多々解決したのですがもう一息わからないので教えてください。 ワークシートが12ヶ月分12枚、一覧を1枚、一つのブックに作成してあります。 一覧シートに、各月のワークシート内容をそのまま縦に1月から12月までを一覧で見られるように、 =[sheet4月]4月!A2 という様なものを入れ、入力されたテキストや数値は きちんと反映されています。 困っている部分は、 「-」表示部分が「0」表示になり、 空白セルの部分が「#REF!」表示になってしまいます。 「-」表示→「-」のままに、 空白セル→空白のままに一覧表に表示させたいのですが、どのような方法がありますか?

  • エクセルを教えてください!!!

    エクセルを教えてください!!! sheet1(A5~A40)に文字が入力されたら(空白セルは、無視して)自動的にsheet2の指定部分(A1~A10)に空白セルは無視して順番に入力された所のみ反映されるようにするには、どうしたらいいのでしょうか? >例)sheet1(A5=あ・A2=い・A3=う)をsheet2(A1=あ・・・)では、なく。 Sheet1の指定されたセル(A5~A40)の中で文字が入力された場合のみsheet2の指定されているセル(A1~A10)へ反映されるという意味です。例えばsheet1の A5→あ、A26→う、A30→お、と入力されたら、sheet2の A1~A3 に あ、う、お と空白セルは除かれ入力される設定にしたいのです。

  • エクセルマクロを教えてください

    エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • エクセルでシフト表を作る(Excel 2007)

    説明がうまくできず、わかりにくかったらすみません。 このたび初めて職場のシフトを作ることになったのですが、 フォーマットは会社から渡されたものがあるのですが、 もう少し見やすいものにしたく改良したいと思っています。 フォーマットには、1ページ目にスタッフの名前、日付等を入力すれば 2ページ目以降のシフト表に自動的に表に名前や日付が反映されるようになっており、 あとはセルに*印(*=30分)を入力していけばその*印の数だけ 足し算されて勤務時間がカウントできるようになっています。 (例えば、9時~17時まで勤務の場合、*印を16個入力します) 私が改良したいのはこの*印の部分で、 見た目が*印の羅列のため、非常に見にくいのです。 この部分を例えば■等に変えれば、 16個*印が並ぶのではなく、帯のように見えて 一目でわかりやすいと思っています。 *印でフォーマットに登録されているところを ■等に置き換えたいという意味です。 そして、ワンクリックでセルに入力できるようにしたいのですが、 そのような方法はあるのでしょうか? あと、わがままなのですが、 ただセルを塗りつぶすと、それもやってみたのですが スタッフ同士の帯が全部つながって逆に見にくくなるので あくまで、*印を、セルに対して小さめの■に置き換えたいのですが、 どながか詳しい方がおられましたら、 ご教授ください。 よろしくお願いします。

専門家に質問してみよう