[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『二つの条件 VBA』(yama)
シート1 A B C D 手配NO 品名 数量 完了日 1 131212-01 aaa 100 12/30 2 131212-01 bbb 100 12/20 3 131212-01 ccc 150 12/17 4 131211-01 bbb 90
シート2 A B C D 手配No 数量 完了日 品名 1 131212-01 aaa 2 3 4 5
このような状況の時に、シート2のB列とC列をシート1を参照し自動で入力したい。 D列は事前に入力済みで、A列に手配NOを入力すると、B列、C列が入力される。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
上記二つの条件が満たされていれば、SUMIFS関数で計算できそうです。
[SUMIFS関数:MicroSoft Office On Line]
http://office.microsoft.com/ja-jp/excel-help/HA010342933.aspx 現在参照不可
シート1のC2数式例
=SUMIFS(Sheet2!$B$1:$B$20, Sheet2!$A$1:$A$20, $A2, Sheet2!$D$1:$D$20, $B2)
(みやほりん) 2013/12/12(木) 11:09
みやほりんさん、感謝です。
関数ですと入れておかなければならないので、可能であればマクロ等の処置を希望です。 理由:シート2は抽出結果で行の増減があります。列はPまでで固定。
(yama) 2013/12/12(木) 11:15
さて、私の問いかけが2点あります。
私ならコード内でSUMIFSワークシート関数を使いますし、
他の方がマクロを組む場合にも必要な情報だと思いますので。
(みやほりん) 2013/12/12(木) 11:26
みやほりんさん。感謝です。
>さて、私の問いかけが2点あります。 すいません。回答させて頂きます。
>シート1のA列とB列の組み合わせはユニーク(重複のないデータ)でしょうか。 重複は致しません。
>また、日付はシリアル値(表示形式を数値にした時に数値表示)でしょうか。 その通りです。
シート2は入力後印刷する予定でして、関数が入っていると印刷ページを設定するのが 面倒だったのでVBAとリクエストさせて頂いました。 なので、品名がある行だけ、関数が入力されるようなのも問題なしです。 また、印刷後入力データをクリアし、別の内容で再度抽出→印刷を繰り返します。 *シート2は印刷用フォーマットのような物です。 (yama) 2013/12/12(木) 13:28
こんなのでいいでしょうか?
Sub Sample()
'
Dim ShtNm1, ShtNm2, I, J ' ShtNm1 = "シート1" ShtNm2 = "シート2"
For I = 2 To Sheets(ShtNm2).Range("A" & Rows.Count).End(xlUp).Row For J = 2 To Sheets(ShtNm1).Range("A" & Rows.Count).End(xlUp).Row If Sheets(ShtNm2).Cells(I, 1) = Sheets(ShtNm1).Cells(J, 1) Then If Sheets(ShtNm2).Cells(I, 4) = Sheets(ShtNm1).Cells(J, 2) Then Sheets(ShtNm2).Cells(I, 2).Value = Sheets(ShtNm1).Cells(J, 3).Value Sheets(ShtNm2).Cells(I, 3).Value = Sheets(ShtNm1).Cells(J, 4).Value End If End If Next J Next I
End Sub
(パオ〜〜ン) 2013/12/12(木) 14:59
changeイベントの方が良いかもしれないですけど Sub sample() With Sheets(2) If Application.CountA(.Range("A2:A100")) Then .Range("B2:C2").Resize(.Range("A" & Rows.Count).End(xlUp).Row - 1).Formula = _ "=sumifs(sheet1!c:c,sheet1!$a:$a,$a2,sheet1!$b:$b,$d2)" End If End With End Sub (Jera) 2013/12/12(木) 16:03
パオ〜〜ンさん、jeraさん、感謝です。 今日は時間がなく、後日教わった内容で挑戦したいと思います。 (yama) 2013/12/12(木) 17:58
遅くなりましたが、挑戦した結果ですが・・・。うまくいきませんでした。 そこで伝え漏れをしておりましたので下記行があった場合どのようにすればよろしいでしょうか?
シート1 ↓ここ追加 A B C D E 手配NO 計画No 品名 数量 完了日 1 131212-01 12 aaa 100 12/30 2 131212-01 bbb 100 12/20 3 131212-01 ccc 150 12/17 4 131211-01 102 bbb 90 *新規入力は下に記入していきます。 *計画Noは初めから決まっている時と、後から決まる場合があるので、空白が存在します。
シート2 ↓ここ追加で「完了日」と「数量」が入れ替わります。 A B C D E ・・・ 手配No 計画No 完了日 数量 品名 ・・・ 1 131212-01 aaa ・・・ 2 3 4 5 *E行以降をここではお伝えしておりませんが、シート3がありそのデータマスタからフィルタオプションで抽出しています。 その時に、E行の入力されている行の分、A行には「手配No」を入るようにしてあります。 *手配No毎の印刷作業の為、シート2のA行には違う「手配No」は今のところ入る予定はありあせん。
(yama) 2013/12/16(月) 08:58
シート1にもシート2にも計画Noという項目(列)があったのですね。
で、シート2には、手配Noと品名が入っているとき、マクロを動かして
計画No、完了日、数量を入れればいいのでしょうか?
であれば、
Sub Sample()
'
Dim ShtNm1, ShtNm2, I, J ' ShtNm1 = "シート1" ShtNm2 = "シート2" For I = 2 To Sheets(ShtNm2).Range("A" & Rows.Count).End(xlUp).Row For J = 2 To Sheets(ShtNm1).Range("A" & Rows.Count).End(xlUp).Row If Sheets(ShtNm2).Cells(I, 1) = Sheets(ShtNm1).Cells(J, 1) Then ’手配Noが 等しい If Sheets(ShtNm2).Cells(I, 5) = Sheets(ShtNm1).Cells(J, 3) Then ’品名が等しい Sheets(ShtNm2).Cells(I, 2).Value = Sheets(ShtNm1).Cells(J, 2).Value ’計画Noを移送 Sheets(ShtNm2).Cells(I, 3).Value = Sheets(ShtNm1).Cells(J, 5).Value ’完了日の移送 Sheets(ShtNm2).Cells(I, 4).Value = Sheets(ShtNm1).Cells(J, 4).Value ’数量の移送 End If End If Next J Next I End Sub (パオ〜〜ン) 2013/12/16(月) 09:21
パオ〜〜ンさん、さっそくのご連絡感謝です。
希望しているものが出来上がりました。
ありがとうございます。 (yama) 2013/12/16(月) 09:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.