🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

488閲覧

VBAについて、条件分岐がうまくいかない。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2019/11/27 01:36

編集2019/11/27 04:06

Excelのカレンダーに管理表を作成し、月にやる作業を
管理しています。
毎月、手打ちで作業日等を入力していますが、自動化
して欲しいとのことで、VBAを組むように依頼を受けましたが、初心者で分からない点が多いので教えてほしです。
※今までは、やりたい条件が1つしかなかったので
IF文で作成してました。
以下のような感じで作ってました!
=IF($L16=S$13,IF($A16="完了","●","◎"),"×")

やりたいこと。
1、作業日(L列の16)を入力すると
横にあるカレンダー(N列から)の対象日にマークがつく。

2、マークだが、以下のパターンに分かれている。
※条件に合ったマークがつくようにする。

条件1
本番(G列の16)が完了以外(ステータスA列の16)の場合、◎

条件2
本番(G列)が完了(ステータス)の場合、●

条件3
テスト(G列)が完了以下(ステータス)の場合、△

条件4
テスト(G列)が完了(ステータス)の場合、▲

どの条件にも、当てはまらない場合、×

※ステータスは、完了以外にいくつかのステータスがあります。
例:完了、依頼、定期、緊急等
完了以外は、◎、△でマークを付けたいです!

使用しているExcelは以下のような形です。

イメージ説明

イメージ説明

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/11/27 02:18

タグにExcelを追加ください。
退会済みユーザー

退会済みユーザー

2019/11/27 04:06

つけました。
guest

回答3

0

ベストアンサー

以下のマクロ(関数)を標準モジュールに登録してください。

VBA

1Public Function SetStatus(ByVal rng As Range) 2 Dim day As Variant 3 Dim adr As Variant 4 Dim wcol As String 5 Dim wrow As String 6 Application.Volatile 7 adr = Split(rng.Address, "$") 8 wcol = adr(1) 9 wrow = adr(2) 10 If Range("L" & wrow).Value = Range(wcol & 13).Value Then 11 SetStatus = "×" 12 If Range("G" & wrow).Value = "本番" Then 13 If Range("A" & wrow).Value = "完了" Then 14 SetStatus = "◎" 15 Else 16 SetStatus = "●" 17 End If 18 End If 19 If Range("G" & wrow).Value = "テスト" Then 20 If Range("A" & wrow).Value = "完了" Then 21 SetStatus = "▲" 22 Else 23 SetStatus = "△" 24 End If 25 End If 26 Else 27 SetStatus = "" 28 End If 29End Function

そして、N16のセルに
=SetStatus(N16)
と入力し、オートフィルで右へ31日までコピーしてください。
下へ、同様に必要な行までコピーします。
これで完了です。
L16以降に日付を入れるとステータスが自動的に設定されます。

投稿2019/11/27 05:40

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/29 04:56

うまくいきました! ありがとうございます!!
guest

0

条件がよくわかりませんでしたが、複数の選択肢に対してそれぞれ回答を用意する場合、LOOKUP関数が利用できます。

G16が("本番完了","テスト完了","テスト中")に対して回答を用意する場合、以下のように書きます。

excel

1=IFERROR(LOOKUP(G16,{"本番完了","テスト完了","テスト中"},{"●","▲","△"}),"×")

投稿2019/11/27 04:26

woria

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/27 06:10

G16に、テストと商用、2つの段階があり、 A16に、完了なのか、依頼のままなのかのステータスがExcelに記載できるようになっております。 送ってくださったコードだと、G16しか見に行っておらず A16(ステータス)もプラスでみて、完了なら◎、依頼なら〇としたいです。 ※説明が下手ですみません。。。
woria

2019/11/27 06:26

つまり、条件分岐は以下でしょうか? {A16,G16} {完了,商用} = ● {完了以外,商用} = ◎ {完了,テスト} = ▲ {完了以外,テスト} = △ {それ以外,それ以外} = ×
guest

0

ちょっと条件がよくわかりませんが、分岐が増えるのでしたらSWITCHを利用すると良さそうです

ステータス一覧があって多少シートにデータを追加していいならVLOOKUP+IFERRORを使うと良さそうですね

投稿2019/11/27 03:46

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問