• ベストアンサー

エクセルのマクロについて教えてください

シートが3つあります。Aシートはデータが打ち込んであり、Bシートは計算を行い、Cはその結果を返します。今、Aシートの各データには頭に通し番号がふってあり、Cシートの入力エリアにその番号を打つと、vlookupでAシートのデータの中身を引っ張ってきて、それでBシートにて計算が行われています。で、その結果が再びCシートに返されます。 ところで、その計算結果をAシートの該当データに貼り付けていきたいのですが、いちいちCシートでコピー、Aシートの該当行に形式を選択して貼り付け、とやっているのですが、これをCシートで入力した通し番号とAシートの通し番号を突合して一致したところの○番目のセルに結果を貼り付ける、といったマクロは可能でしょうか。教えてください。

  • kissa
  • お礼率88% (23/26)

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

  • ベストアンサー
回答No.3

遅くなりました。サンプルマクロを組んでみました。下記のコードをSheet1のモジュールシートにコピー&ペーストして下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As Range If Target.Address <> "$A$2" Then Exit Sub Set myRange = Worksheets(2).Range("A1:" & Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Address).Find(Range("A1").Value) MsgBox myRange.Address If Not myRange Is Nothing Then myRange.Offset(0, 1).Value = Range("A2").Value End Sub もし、シート2のA列にシート1のA1に入力した値が複数あるのであれば、上のコードではなく、下記のコードを使用して下さい。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As Range Dim myAdr As String If Target.Address <> "$A$2" Then Exit Sub With Worksheets(2).Range("A1:" & Worksheets(2).Cells(Rows.Count, 1).End(xlUp).Address) Set myRange = .Find(Range("A1").Value) If Not myRange Is Nothing Then myAdr = myRange.Address Do myRange.Offset(0, 1).Value = Range("A2").Value Set myRange = .FindNext(myRange) Loop While Not myRange Is Nothing And myRange.Address <> myAdr End If End With End Sub もし、ご不明な点・不具合等がありましたらご遠慮なくお知らせ下さい。

kissa
質問者

お礼

どうもありがとうございました。 ここまでずばり書いていただくと、コピーするだけでできてしまって、なんだか申し訳ないような気さえしてきます。どうもありがとうございました。

その他の回答 (2)

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

問題の説明がわかりにくかった。例でもあげていただくと良いが。Sheet2の演算のことが良く見えない。 テストデータととしてSheet1に (A列)(B) (C) (D) (E) 1 12 15 5   結果列 2 13 223 1 3 14 345 99   4 15 234 3 5 16 234 4 Sheet3のA1に番号を入力。仮に3とする。 VBEのModule1に Sub test01() Dim b(3) Dim x As Object a = Worksheets("sheet3").Cells(1, 1) Set x = Worksheets("sheet1").Range("a1:a100"). _ Find(What:=a, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, MatchCase:=False) For i = 1 To 3 b(i) = x.Offset(0, i) MsgBox b(i) Next i '----- c = x.Row For i = 1 To 3 Worksheets("sheet2").Cells(c, i) = b(i) Next i '----- Worksheets("sheet1").Cells(c, 5) = _ Worksheets("sheet2").Cells(c, 4) End Sub ----- Sheet3のA1セルの値の3で、Sheet1のA列を検索し 見つかった3行目のB3:D3のデータ値をSheet2の A3:C3にセットする。 Sheet2のD3には=Sum(A3:C3)の式があり(例として)、 答えは458で、その計算値をSheet1のE3にセットしている。 セル指定(Sheet3)-->Sheet1より該当行を探す-->Sheet1より データを採る-->Sheet2に値セット-->Sheet2で計算--> 結果をSheet1へセット、です

kissa
質問者

お礼

お礼がおそくなり申し訳ありません。 imogasiさんの回答にすでに答えは含まれているように思われます。今回は計算シートへの貼り付けは関係がなくて、そのあたりを質問で紛らわしくかいてしまいすみません。とりあえず、ご回答のとおりに実践してみようかと思うのですが、どこを削ればよいのかすこしやってみようと思います。無事完了し次第締め切ってポイントを割り振りますのでよろしくお願いします。

kissa
質問者

補足

 と、お礼に書いたとおりいろいろ削ってやってみたのですが、できませんでした。意味も分かってないのにできるわけないのですが...。ということですみません。引き続き教えてください。

回答No.1

初めまして。簡単にできます。貴方様が考えておられることをすぐに実行できるようなサンプルマクロを組んでみたいと思いますので、次のことを教えて下さい。 ・Aシートの列の項目名とCシートの列の項目名・それぞれの項目が入っている列の名前 お手数をおかけいたしますが、よろしくお願いいたします。

kissa
質問者

お礼

さっそくありがとうございます。 お返事が遅くなり申し訳ありません。 説明が悪かったのですが、端的に言うと、 シート1で「3」と入力すると、その番号をキーとしてシート2のデータを使いシート3で計算されます。そして結果がシート1に出ます。これが現状です。 シート1「A1」に「3」を入力、するとシート2のA列「3」を検索し、シート2「B列」の値を使ってシート3で計算、シート1「A2」に結果の「5」を返す。といった具合です。その結果のシート1「A2」の「5」をシート2の「A列」の「3」のデータの「B列」に貼り付けたいというのが質問です。つまり、シート1の計算結果(A2)をシート1で入力した番号(A1)と同じ番号を持つシート2(A列)のB列に貼り付ける作業ということです。計算シートのシート3はこの質問にあまり関係ありませんでした。すみません。

関連するQ&A

  • Excelについて 適した関数探してます

    シート1に下のようなデータがあり、 A1~A10が番号 B1~B10が○ C1~C10が△ D1~D10が□ E1~E10が× シート2に、A1に番号を入力すると B2に○ C3に△ D3に□ E3に× (○△□×は、数字やデータがはいってます) 解りづらかったらすいません。 要は、シート2のA1に、番号をいれると、シート2のB2~E3に、シート1のデータがでるようにしたいのです。 このような事をしたいのですが、VLOOKUPでできますか? 他に適した関数、式の立て方はありますでしょうか? 挑戦してるのですが、なかなかできません。 XPで、Excel2003です。 良かったらご意見くださいm(_ _)m

  • エクセル関数につきまして

    皆様の知識を頂きたく、投稿させて頂きます。 EXCELのVLOOKUP関数なのですが、2個の条件から一致する項目を選ぶ事は出来ないのでしょうか? たとえばですが、 ≪参照シート≫ A   B   C   コード 数量  日付 → タイトル行 1   1    1/1 2   1    1/1 1   2    1/2 2   2    1/2 ≪入力シート≫ A   B   C  ~ コード 1/1  1/2  ~ 1 2 といった感じで、入力シートと参照シートのコードと日付が一致するデータを取り出したいのです。 VLOOKUPを重ねて使用したりとか、HLOOKUPを使用したり等考えたのですが、うまくいきませんでした。 現在使用しているのは、Microsoft Office EXCEL2003になります。 どなたかご教授下さい。 よろしくお願い致します。

  • Excel 2007 vlookupについて

    Excel 2007 vlookupについて 同じシートでA列とB列の2列にある型番で一致するものをC列に表示させたいです。 実際A列の型番は一意の番号です。 B列の型番は同じ番号がございます。 型番1は100行ぐらい。 型番2は300行ぐらい。 C列にどのようなvlookupを記載すればよろしいでしょうか。 ※C2以降に結果が表示されるようにしたいです。

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • エクセルのデータを抽出後、自動的に並び替え

    こんばんは☆ うまく説明できるかわかりませんが、どうぞよろしくお願いします。 ・シート1に以下のデータが入っているとします。    A     B     C 1 番号   データ1  データ2 2        ●     ■ 3        ▲     × 4        ■     ■ 5        ◎     ▲ ・シート1のA列に番号を上から順ではなく、該当するデータ順(例えば処理した順)につけていくと、別シート(例えばシート2)に自動的に順番にデータが表示されるようにしたいのですが、どうすればよいのでしょうか…    A     B     C 1 番号   データ1  データ2 2        ●     ■ 3  2     ▲     × 4        ■     ■ 5  1     ◎     ▲    ↑    該当順に数字を入力したら、シート2に下記のように表示したいのです。    A     B     C 1 番号   データ1  データ2 2  1     ◎     ▲ 3  2     ▲     × 4 5  何卒お力をお貸しください(><)

  • EXCELでの検索マクロを作りたいのですが

    マクロの初心者です。氏名の検索マクロを作成したいのですが分かりません。 A列:名前 B列:郵便番号 C列:住所 と 名前等のデータを(ランダムに)入力したシート1を作成し、 シート2にシート1の「A列:名前」から性(たとえば青木)で検索して検索ボタン(マクロボタン)を押して該当データを表示させるようにしたいのですが。

  • エクセル 関数を使わずにデータを取りたい

    EXCELを使ってデータ入力をしたいです。 下の図のように、シート1のA列にコードを入力すると、シート2のテーブルから値を引っ張ってくるようにしたい。 たとえば、シート1のA1に"C001"を入力したら、B1に"赤"が自動入力されるようにしたい。 シート1 A列 B列 行1 C001 シート2 A列 B列 行1 C001 赤 行2 C002 青 行3 C003 黄色 ただし、シート1のB列の値は、入力後に編集するため、ここには計算式を入れたくないのです。 なので、通常ならばB列にVLOOKUP関数を使えばすむことですが、計算式を入れずに上記を実現する方法を教えてください。

  • エクセル 繰り返し計算

    エクセルで毎月同じ計算をさせるときの方法を教えてください。 シートとしては、入力用、計算用、出力用とします。 入力用シートにA2セルに1月のデータ、B2セルに2月のデータ、C2・・・と12月まであります。 計算用シートのA2に入力されれば、G2、G3、G4のセルに計算結果が出ます。 出力用シートのA2、A3、A4に1月の結果、B2、B3、B4に2月の結果、・・ というように演算させたいのですが計算用シートの引用式、出力用シートの引用式は どの様に作成すればいいのでしょうか? 宜しくお願いします。

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • ExcelのSUMIF関数について質問です

    A列 │B列 │C列│ ----十---十----十 田中│ 男│177 │ 鈴木│ 男│169 │ 吉田│ 女│162 │ 田中│ 女│161 │ 佐藤│ 女│164 │ 田中│ 男│174 │ 鈴木│ 女│166 │ 上記のようなデータがsheet1にあって、このうち A列が”田中”で、かつB列が”男”に該当する C列のデータの合計をsheet2で計算したいのですが これはどのようにすればいいのでしょうか。 下記のように記述するところまではやったのですが、 これに「なおかつsheet1のB列がsheet2のB3(男)に一致する場合」 という検索条件を付け加える方法が分かりません。 (↓Sheet2のC3セル) =SUMIF(Sheet1!A:A,Sheet2!A3,Sheet1!C:C) (sheet2のA3には”田中”、B3には”男”と入力してあり、 計算結果をC3に出力したいと思っています。) OSはWindows2000、エクセルはEXCEL2000を使用しています。 よろしくお願いします。

専門家に質問してみよう