2019年09月16日

試作1 セルに1が入力されていたら隣のセルにOKを表示する / Excel / VBA

 さてと、ここから本題です。前回の「一覧表から帳票を自動で印刷させる」の中で処理の流れを言葉で書き出してみましたが、その中でまず最初に取り掛かるのは 4.の「所定の列に印刷指示が入力されていたら受注票を作成する」です。なぜそこからかと言うと。。。慣れてくればおいおい分かって来ますので(?)まずそこから片付けていきます。
 ただ、いきなり受注票は作らないと言うか、受注票はマクロじゃなくてExcelの関数を使おうと思っているので、受注票は作らない別の試作をまず作ってみようと思います。

試作の目的は条件を満たしているかどうかによって処理を分岐させることです(条件分岐)。Excleの関数で考えるとIF関数です。
「所定のセルに印刷指示が入力されていたら」が条件分岐になります。

試作ではセルA2に“1”が入力されていたらセル“B2”に“OK”と表示し“1”の入力がなかったらセルB2に“NG”表示させてみます。
20190916-01.jpg図1

条件分岐のVBAはIFを使用します。

If 〜:条件を指定します
Then〜:条件を満たしたときの処理を指定します
Else〜:条件を満たさなかった時の処理を指定します(省略すると条件を満たさない時は何も行いません)
End If:条件分岐の終了

セルの値は
Cells(行番号,列番号)で指定します。
かっこの中は行番号と列番号の数字になります。例えば、セルA1だったら(1,1)、A2だったら(2,1)、A2だったら(2,1)となります。

セルA1が“1”は
Cells(1,1)=1 と記入します。

同様にセルB2に“OK”を表示させるのは
Cells(2,2)="OK" と記入します

標準モジュールを追加して次の様にコーディングします。

Sub Macro1()


If Cells(2, 1) = 1 Then
     'セルA2が1の時
Cells(2, 2) = "OK"         'セルB2に“OK”を表示
Else              'そうでなかったら
Cells(2, 2) = "NG"        '“NG”を表示

End If            '条件分岐の終了 


End Sub

こんな感じです
20190916-02.JPG図2

標準モージュールの上で「F5」キーを押してマクロを実行させます。
セルA2に“1”が入力してあると
20190916-03.JPG図3

試しに“2”と入力してみると
20190916-04.JPG図4

と表示されました。
以上で、条件分岐の試作ができました。
サンプルExcelファイル)試作1 セルに1が入力されていたら隣のセルにOKを表示する.xlsm
これで、セルに印刷指示がある時に受注票を印刷させる条件分岐はなんとかなりそうです。
なんか複雑そうに見えるマクロでも単純な形に変えてみてそれらの組み合わせになるように考えていけば比較的楽に出来る様になりますよ。


 ところで、Windows10の2019年5月のアップデート以来、Chromeが遅いと言うか、Chromeを開いてこうしてブログを書いているとパソコンがフリーズ寸前みたく処理が全然進まなくなってしまうんだけど。。。
 XPからVistaかた10と、OSのサポートが切れるとそれに合わせてPCを最新OSの物に買い替えているのだけど、新しいPCになっても画期的に早くなったと感じないのは俺だけ?10万位のPCだから?20万位の高いPCなら早い?Chromeも早くなる?
 っと、ネットで調べてたらマイクロソフトのサイトに「Windows 10 で PC のパフォーマンスを向上させるためのヒント」と言うのがあったので、皆さんも参考にしてみては?
因みに、そこに出ていた様にスタートアップをほぼ全部停止させたら、早くなったように思います!


前のページ:一覧表から帳票を自動で印刷させる
次のページ:VLOOKUPで一覧表から帳票を作成してみた

関連ページ
Excel VBA メニュー
VBAを使えるようにしてみました!



鯉口と言って袖口がやや窄まっている和装の下着なのだが今は庭師や料理人の作業着やお祭り衣装として使われてます。
日本人には日本古来の作業着がよく似合う!



posted by haku1569 at 16:21| Excel VBA | このブログの読者になる | 更新情報をチェックする
' + adSrc + '<' + '/body>'); d.close(); } loadAd(); window.setTimeout(loadAd, reloadSec * 1000); window.setTimeout(function() {adDiv.style.display = 'none'}, hideSec * 1000); }); }