• 締切済み

Excel VBA 条件指定による別シートの参照について

下記のように、Excelでマクロを組みたいのですが 組み方がわかりません。 この組方さえわかれば、仕事の便利なツールがいろいろ 作れますので、ご協力いただけませんでしょうか? シートA、シートBがある シートA 日時  曜日 名前 時間  内容  TEL  完了日時 7月1日 水  aaa  終日  正常  無し         bbb  終日  正常  無し         ccc  終日  正常  無し 7月2日 木  aaa  終日  正常  無し         bbb  終日  正常  無し         ccc  終日  正常  無し 7月3日 金  aaa  終日  正常  無し         bbb  終日  正常  無し         ccc  終日  正常  無し シートB 5月2日 木  aaa  11:00  エラー 有り 11:30 7月2日 木  bbb  11:00  エラー 有り 11:30 シートAにマクロをくみ、シートBを参照して、シートA'を作成したい。 (シートAがシートA'のようになればよく、新規にファイルを作成したり リネームする必要は無い) シートA' 日時  曜日 名前 時間  内容  TEL  完了日時 7月1日 水  aaa  終日  正常  無し         bbb  終日  正常  無し         ccc  終日  正常  無し 7月2日 木  aaa  終日  正常  無し         bbb  11:00 エラー 有り 11:30         ccc  終日  正常  無し 7月3日 金  aaa  終日  正常  無し         bbb  終日  正常  無し         ccc  終日  正常  無し どのようにマクロをくめばよいですか? 数ヶ月前から困っています。 よろしくお願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 最近、似たような質問がありましたが、Accessとは違いますますから、Excelでは、「正規化」は、ちょっと痛いですね。 http://oshiete1.goo.ne.jp/qa5106303.html #8 のようにすると、「正規化」しなかったら、もう少し簡単になったと思うのですが……。 私は、一旦、すべて、配列変数の中に入れて処理させます。なお、書き換えても、それほどには実害がないとは思いますが、一旦、バックアップか、保存をしてから、マクロを実行してください。 Aシートと、Bシートの名前の部分の比較も、不安があります。おそらく、どちらも手入力ですから、失敗があるかもしれません。 '------------------------------------------- 'Option Explicit Sub Test1()   Dim sh1 As Worksheet   Dim sh2 As Worksheet   Dim r As Range   Dim r2 As Range   Dim i As Long, j As Long, k As Long   Dim n As Long, m As Long   Dim buf1 As Variant   Dim buf2 As Variant   Dim ar() As Variant   Dim ari() As Long   Set sh1 = Worksheets("Sheet1") 'データ基本シート   Set sh2 = Worksheets("Sheet2") 'エラーシート      Const iRW As Integer = 2 'データ初期行(タイトルを抜く)   Const sERR As String = "A1" 'エラーシート・左端上初期アドレス      With sh1     Set r = .Range(.Cells(iRW, 1), .Cells(Rows.Count, 3).End(xlUp).Offset(, 4))     ReDim ar(r.Rows.Count - 1, r.Columns.Count - 1)     With r       For i = 1 To r.Rows.Count       If .Cells(i, 1).Value <> "" Then buf1 = .Cells(i, 1).Value: buf2 = .Cells(i, 2).Value         j = i - 1         ar(j, 0) = buf1: ar(j, 1) = buf2: ar(j, 2) = .Cells(i, 3).Value         ar(j, 3) = .Cells(i, 4).Value: ar(j, 4) = .Cells(i, 5).Value         ar(j, 5) = .Cells(i, 6).Value: ar(j, 6) = .Cells(i, 7).Value       Next i     End With   End With   With sh2     Set r2 = .Range(sERR, .Cells(Rows.Count, 1).End(xlUp).Offset(, 6))     With r2       For i = 1 To .Rows.Count         For j = LBound(ar, 1) To UBound(ar, 1)           '日付と文字の比較(難あり)           If ar(j, 0) = .Cells(i, 1).Value And Trim(ar(j, 2)) = Trim(.Cells(i, 3).Value) Then             ReDim Preserve ari(1, k)             ari(0, k) = j: ari(1, k) = i: k = k + 1           End If         Next j       Next i     End With   End With   If ari(0, 0) = 0 Then     MsgBox "該当するエラーデータがありません。", vbExclamation     Exit Sub   End If   With sh1     Application.ScreenUpdating = False     For i = LBound(ari, 2) To UBound(ari, 2)       m = ari(0, i): n = ari(1, i)       r.Cells(m + 1, 3).Value = r2.Cells(n, 3)       r.Cells(m + 1, 4).NumberFormatLocal = r2.Cells(n, 4).NumberFormatLocal       r.Cells(m + 1, 4).Value = r2.Cells(n, 4)       r.Cells(m + 1, 5).Value = r2.Cells(n, 5)       r.Cells(m + 1, 6).Value = r2.Cells(n, 6)       r.Cells(m + 1, 7).NumberFormatLocal = r2.Cells(n, 7).NumberFormatLocal       r.Cells(m + 1, 7).Value = r2.Cells(n, 7)     Next i     Application.ScreenUpdating = True   End With   Set sh1 = Nothing: Set sh2 = Nothing   Set r = Nothing: Set r2 = Nothing End Sub '-------------------------------------------

taiyo33_20
質問者

お礼

ありがとうございます。 事情があって本日は試せないので、明日か明後日に確認します。 感謝感謝です!!

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

条件が良く判りません。 シートA/Bに同じ日付があった場合はシートBのデータが優先? 表示対象はシートAで表示されている月のみが対象?

taiyo33_20
質問者

補足

説明が下手ですみません。 シートBを基準に、毎日のエラー報告書を月単位で作成したいのです。 シートBのデータで、エラーが発生していない日は、[aaa  終日  正常  無し]を追加したいのですがわかりますか? すみません シートBにエラーがある日は、aaa~cccの該当する名前の場所に、その内容、エラーがない日は、aaa~cccに[終日  正常  無し]という表を作成したいです。 よろしくお願いいたします。

関連するQ&A

  • エクセル 別シートに反映

    入力用シートを作り    A    B     C     D    E 1  品名  申込日  申込者  住所   電話  2 ●    11/3   aaa ****** 123-456 3 ◆    11/30   bbb ****** 456-789 4  ▲    11/30   ccc   ****** 111-333 5 ◆ 12/1 aaa ****** 111-777 6 ▲    12/1   ttt   ****** 668-125 7 ●    12/2   ppp   ****** 555-779 と入力すれば シート●には    A    B     C     D       申込日  申込者  住所   電話  1 11/3   aaa ****** 123-456 2  12/2   ppp   ****** 555-779  シート◆には    A    B     C     D       申込日  申込者  住所   電話  1 11/30   bbb ****** 456-789 2  12/1 aaa ****** 111-777 同じ様にシート▲ と言う風に出来ないでしょうか?? よろしくお願いします

  • ■マクロを使い別のワークブック&シートを参照して表示させる

    ■マクロを使い別のワークブック&シートを参照して表示させる AとBのワークブックがあり、集計をしてワークブックBシートaに( ) の中身を入れたい場合マクロで記述するにはどうしたらいいでしょうか ? ワークブックA(出荷部門報告) No. 商品番号 注文数 出荷完了(1:完了、0:未完) 1  AAA   50   1 2  BBB   30   0 3  CCC   10   1 4 DDD 20 0 ワークブックB シートa(管理) 未出荷商品番号 残必要数 必要日数 (BBB)    (15)  (1) (DDD) (19)  (19) シートb(生産部門報告) 商品番号 生産完了  BBB 10 BBB 5 CCC 10 DDD 1 シートc(調達部門報告) 商品番号 生産必要日数/1 AAA   25 BBB   30 CCC   3 DDD   1 <ワークブックBシートaに入るのは出荷未完(0)のみ> <シートb、cは追加(変更)されていきます> 質問で意味が分からない部分がありましたら、追加いたしますのでよろ しくお願い致します。

  • Excelシートの統合するマクロなどがありましたらお教えください。

    各支店(約200)からExcelシートで送信されてくる報告内容を別のシートに一気にまとめるマクロ等はないでしょうか?ご存知の方よろしくお願いします。 (例) A支店  項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0               以下約300件 B支店  項目  aaa    bbb    ccc    ddd    eee        11    22     33    0     0         9    9      0     0      0               以下約300件      別シートに 項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0        11    22     33    0     0         9    9      0     0      0                   以下省略           よろしくお願いします       

  • 【VBA】シートの内容を別シートへ転記する方法

    1シート目のA列には品番が沢山並んでおり、B列、C列に内訳、D列に合計が有ります。例)参照 下記の処理をしたいです。 ------------------------------------------------------------------- 2シート目へ1行目の見出しとAAAの品番の行を転記 3シート目へ1行目の見出しとBBBの品番の行を転記 同様に、A列最終行迄繰り返しシートを作成 ------------------------------------------------------------------- A列の品番が変わる行迄を一まとまりとして行選択する方法にて コードをお教え頂きたく、宜しくお願いします。お教え頂いた内容は理解する様努めます。 例) 内訳1 内訳2 合計 AAA ○○○ ○○○ ○○○ AAA ○○○ ○○○ ○○○ BBB ○○○ ○○○ ○○○ BBB ○○○ ○○○ ○○○ CCC ○○○ ○○○ ○○○ CCC ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ DDD ○○○ ○○○ ○○○ 以下略

  • 別シートへコピーする関数

    エクセルの関数について詳しくないので質問させてください。 下記のような文書を完成させる関数の式を教えていただけますか? Sheet1の文字列を、顧客ごとに別シートにコピペして、伝票を作成します。 同顧客の2行目以降もコピーする式(sheet2のA2以降に入れる式)がわかりません。 【Sheet1】  A    B    C    D 1 顧客a 111  AAA  ○○○ 2 顧客a 222  BBB  ▲▲▲ 3 顧客b 333  CCC  □□□ 4 顧客c 444  DDD  ●●● 5 顧客c 555  EEE  △△△ ・・・ 【Sheet2】  A    B    C 1 顧客a 2 111  AAA  ○○○ 3 222  BBB  ▲▲▲ 【Sheet3】  A    B    C 1 顧客b 2 333  CCC  □□□ 顧客ごとの件数は毎月変わります。 本当はマクロを組むべきだと思うのですが、マクロの知識はないので、可能であれば関数で作成したいと思っています。 分かりづらい点ありましたら補足いたします。 よろしくお願い致します。

  • エクセル、複数行のデータを別シートに集計するには?

    複数行のデータを別シートに、伝票番号別、品名別に反映させるにはどのような関数にすればいいですか? 例えば、 [シート1] 伝票番号   品名   数量 aaa      りんご   50 aaa      バナナ   30 aaa      もも     15 bbb      バナナ   20 bbb      りんご   33 ccc      りんご   10 ccc      バナナ    40 [シート2]    A      B    C    D    1         aaa  bbb  ccc 2 りんご    50   33   10 3 バナナ    30   20   40 4 もも      15 [シート1]の様なデータがあり、それを[シート2]のセルB1に伝票番号を入力したらセルB2、B3...と数量が反映するようにしたいです。 わかりづらくてすいません。 どなたかわかる方がいらしたらお願いします。    

  • EXCELのデータを別シートへ抽出したい

    お世話になります。 エクセル初心者ですが、例えば下記のような作業をしたい場合、 どのような処理をすればよろしいでしょうか? 使用しているのはEXCEL2003です。 ネットで調べて、VLOOKUPという関数を使ってみたのですが、うまくいきません、、、、 シート(1) 製品 1月分 2月分 3月分 AAA \100 BBB \200  \300 CCC  DDD \120  \100 EEE      \500 FFF ・・・ シート(2) 製品 3月分 BBB \100 DDD \150 AAA \50 このシート(1)の3月分のところに、シート(2)の金額を入れたいのです。 (実際はもっと件数が多いです) 今は、1つ1つ手作業で入力している状況です。。。 初歩的なことかもしれませんが、調べてみましたがうまくいきません。 お力添えをお願いできませんでしょうか。 よろしくお願いいたします。

  • 別シートの値を検索して一致したものを合計する

    excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1       シート2   シート3 AAA 100     AAA 50      BBB 20 BBB 200   CCC 150   CCC 30 DDD 300   QQQ 250   DDD 10 EEE 400     WWW 350  RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。

  • Excel 条件に一致したセルの隣のセルを返す

    エクセル初心者です。どうかご指導ください。 シート1の処理1・処理2・処理3に、シート2で一致したコードの隣の値を返したいのですが可能でしょうか? シート1                 シート2 コード 処理1 処理2 処理3   コード  処理名  1   AAA               1   AAA  2   BBB AAA           2   BBB  3   BBB               3   BBB  4   CCC AAA           2   AAA  5                      4   CCC                         4   AAA

  • エクセルで入力するデータを別シートで集計する方法

    エクセル初心者です。 いままでの質問と重複しておりましたら申し訳ございません。 不定期に打込むデータを、別シートで集計したいと思っています。 イメージ下記のような感じです。 宜しくお願いします。 (1)〔Sheet1〕にランダムに打込む。 (2)〔Sheet2〕に個人別に集計 (2)点数10点満点で、8点以上が合格 (3)8点以上には1000円の金額が合計欄に加算 (4)8点以下には100円の金額が加算欄に加算 〔Sheet1〕 名前  点数 aaa   8 bbb   10 ccc   7 bbb   5 aaa   10 bbb   9 〔Sheet2〕 名前  合格   小計  不合格   小計   合計 aaa    2    2000    0       0    2000 bbb    2    2000    1      100   2100 ccc    0      0    1      100    100

専門家に質問してみよう