だいたいこんな感じ

電子制御(Arduino), VBAプログラミング, 水中ドローン,趣味,他

【Excel VBA】会社で使える低コスト バーコード照合システム

【まえがき】

 PCが普及し、スマホが普及し、

 1次元のバーコード、QRコードによる照合システム化が進んできた昨今ですが、

 どこの企業でもバーコード管理化が進んでいるか?と言われれば答えはNo.です。

 進んでいるのは基本的に大企業ばかりで、中小は依然として進んでいない、

 というのが現状かと思います。

 コスト云々は確かにありますが、一番の原因は運用の仕方がわからない。

 事だと思います。

 

【2つの運用手段】

 バーコード照合システムの運用の仕方は、私の独断と偏見ですが、

 大きく2点に分かれる、と考えています。

 

 1つ目は、

 高額なハンディタイプのバーコードリーダーを使用するタイプのやり方。

 無線通信安定していれば、どこでも読み取ったデータがやり取りできたり、

 バーコードリーダー自体でOK/NG判定等の処理やビープ音が出せます。

 より高額なものは画面のレイアウトから送受信設定まで編集でき、

 C言語が習熟できていなくてもある程度プログラムを弄れるようになっています。

 但し数万単位で買える安価なものは、システムが脆弱ですぐにフリーズ

 してしまったり、データがなくなってしまうことがしばしばありますので、

 自動的に保証手厚い10万以上のリーダーを買わなければ心もとないです。

 

 2つ目は、

 読み取り専用のバーコードリーダを使用した方法です。

 この方法はバーコードリーダーで読み取ったデータを有線や無線で

 PCに飛ばすやり方です。

 こちらの最大の弱点は、

 単純に読み込むだけのバーコードリーダなので、

   ビープ音(エラー音)PCから発しないといけない事と、

 表示画面がないので読み取り結果はディスプレイを見なければならないことです。

 つまり、PC/ディスプレイを見ながら照合を行う必要があり、範囲が限定的です。

 (電子回路を組んでアンドン等に飛ばす等手段もありますが少し面倒かと)

 しかし、この条件下であれば、ネットワーク回線なしの環境下で運用できますし、

 購入しなければならないバーコードリーダーは

 2,3000円のものでも十二分に機能を発揮してくれます。

 そして、ほとんどの企業の社内帳票はExcelで管理してますので、

 読み取ったデータをExcel VBAを介して

 Excelに直接入力されるようにしまえば非常に合理的です。

 

 こちらの手法で簡単なバーコード照合システムを作っていきたいと思います。

 

【STEP1】 

  それでは、まずは前準備としてプログラムの実行ボタンをつくりましょう。

 

  開発タグから挿入ボタンを選択。

(※開発タグがない場合は、ファイル-オプションからセキュリティレベルを

  下げましょう。)

f:id:DPM:20190708202533p:plain

続いてフォームコントロールの中からボタンを選択し、

どこでも良いのでセル内をドラッグしてみしょう。

f:id:DPM:20190708203225p:plain

するとこんな画面が表示されます。

f:id:DPM:20190708204238p:plain

何も気にせずOKボタンを押します。

f:id:DPM:20190708204647p:plain

ボタンが作成されました。

ボタンをクリックしてみましょう。

f:id:DPM:20190708205016p:plain

エラーがでました。当然ですね。

何も情報を入れてませんので空っぽですよというメッセージです。

 

【STEP2】

Find 関数を使用しないで照合プログラムを作成する

 

バーコードリーダーやQRコードリーダーの処理方法は単純です。

読み取ると同時に “文字を一瞬で入力した後、Enterを押す”

というのがほとんどもリーダーの仕様です。

ですので、つくるプログラムは、入力した文字を押してエンターキーを押すと、

あらかじめ入れていたリストの文字と読み込んだ文字が一致するものを

探す処理を行い、一致/不一致した場合何らかの処理を行う、

というものを作れば良いわけです。

 

まずは基本からです。簡単な照合プログラムを作ってみましょう。

f:id:DPM:20190711204834p:plain

図のようにI列に読み込み対象、J列に照合対象と適当な言葉を入れました。

読み込み対象に入力されている文字“かきくけこ”が照合対象のリストにあれば、

対象をBold表示する、というプログラムをこれから作ってみます。

f:id:DPM:20190711205448p:plain

step1でつくったボタン1を右クリックしてマクロの登録という項目を選択します。

f:id:DPM:20190711205725p:plain

続いて新規作成をクリック。

f:id:DPM:20190711205922p:plain

プログラムの入力画面が開きました。

 

下記を入力していきます。

 

Sub ボタン1_Click()

Dim moji1 As String
Dim hensu1 As Integer

hensu1 = 3
Do Until Cells(hensu1, "J") = ""

If Cells(hensu1, "J") = Cells(3, "I") Then
Cells(hensu1, "J").Font.Bold = True
End If

hensu1 = hensu1 + 1
Loop
End Sub

 

------------------------------------------------------------------------------------------------

解説していきましょう。

Dim moji1 As String

・moji1 という文字を一時置きして格納するものを作ります、

と宣言しています。
Dim hensu1 As Integer

・moji1 という数値を一時置きして格納するものを作ります、

と宣言しています。

 

他にも色々な変数がありますが、複雑なプログラムでもなければ

String と Integer の2つだけおさえておけば大体問題ないと思います。

 

hensu1 = 3

・先ほど作成した数値を格納するためのhensu1は”3”とする。

 

Do Until Cells(hensu1, "J") = ""

hensu1=hensu1+1

Loop

 

・Do Until ~Loopの定型文です。かなりよく使う繰り返し演算の基本になりますので、

覚えておきましょう。

セルのhensu1行、J列が空白になるまでhensu1をhensu1+1を繰り返す。

これを入れておかないと永遠にLoopから抜け出せないのでエラーになってしまいます。

 

If Cells(hensu1, "J") = Cells(3, "I") Then
Cells(hensu1, "J").Font.Bold = True
End If

・IF ~ End If の定型文です。

もし、~だったら何々をする、です。

上記のDo Until とループの間に入れています。

上記でLoopしている間、セルhensu1行、”J”列のものがセル3行"I"列にあるのもと

一致しているときに、

Cells(hensu1, "J").Font.Bold = True

つまり、セルhyensu1行、"J"列のフォントのボールド化をTrue(有効)にする、

という内容になっています。

 

ここでは、(3,"I")と(4,"J")が"かきくけこ"で一致になりますので、

(4,"J")がボールド化されるというわけです。

 

実行してみましょう。

f:id:DPM:20190714111857p:plain

”かきくけこ”がボールド化されました。

 

Excelでバーコードを作成する

さて、これまでの作業で"検索"のプログラムができるようになりました。

これを応用すればバーコード照合プログラムが作れるようになるのですが、

その前に、バーコードリーダーによる照合プログラムは

一般的にどのように使われているのかを理解しておく必要があります。

また、Excel上でバーコード自体を作れるようにしておく事が重要です。

web上にはバーコードやQRコードの生成サイトは多数ありますが、

プログラム上でバーコードを作成できれば、

それだけ色々な応用が可能になってくる為です。

 

【バーコードフォントを手に入れる

QRコードは2次元の為画像として扱いますが、

バーコードは1次元なので文字列として扱われます。

つまり、フォントになります。

バーコード1つにしても、web上には様々なフォントが存在しますが、

一般的なものは code39 のフォントですので、そちらを準備しましょう。

(以下、code39の場合で解説をしています。)

 

web上からcode39を入手したら、フォントフォルダへデータを入れましょう。

Cフォルダで Fonts と検索すればヒットします。

f:id:DPM:20200811174516p:plain

次に、Excelを開いていた場合は一度閉じましょう。

再度開くと取り込んだフォントが反映されます。

f:id:DPM:20200811174933p:plain

これでcode39のバーコードがフォントリストに入りました。

 

【code39の仕様

code39の仕様については、専門のサイトに詳しく書かれていますが、

簡単に説明すると

*test*  ← "  *  "で前後を挟む事で、その内部の文字列を読み取りますよ、

という規則になっており、この場合、読み込んだ情報は test のみになります。

"  *  "が前後になくてもバーコードフォントにできますが、

"  *  "は読み取りのキーになっている文字ですので全く読み取ってくれませんので

注意が必要です。

 

【バーコード照合の仕組み

バーコード照合システムの簡単なフローを下にかきました。

f:id:DPM:20200812082546p:plain

一般的には先にマスターのバーコードを読み、照合先を読み込むと

一致しているか、ひも付きになっているか等のアクションを取る形になります。

VBAで作成するのは、図の青矢印部になります。

具体的にどのようなプログラムを実装しなければならないかというと

 

・読み込んだデータが一致していれば設定した処理を行う(OK/NG判定等)。

 →上記のLoop関数で1個1個の照合を行う方法や、Find関数を用いた方法で検索、

  条件分岐はIF関数を利用すれば作れます。

 

・読み取った記録を残す。

 →いつ、何を読み取ったのかログを記録します。記録が残らなければ

  本当に照合したのかしていないのかわかりません。

  

  ここで懸念があります。

  記録を残す処理自体はそれほど難しくはないのですが、

  照合するバーコード同士が全く同じものである場合、

  当たり前ですがどちらを読み込んでも同じ記録になります。

  そうするといつ、何につけられているバーコードを読み込んだのか

  記録に残りません。

 

  全く同じバーコードじゃないと照合できないんだから当たり前では?

  と思う方もいらっしゃると思いますが手はあります。

  気になる方は以下、読み取り方法のパターンを参照ください。

 

【バーコード照合のパターン

f:id:DPM:20200812084518p:plain

・運用パターン1

 対象A=対象B のパターンです。全く同じバーコード同士で

 完全一致している文字列の場合OK処理を行う、というタイプです。

 こちらは一番簡単で作りやすいのですが、先に説明した通り、

 どちらを読み込んでも同じ文字列の為、

 記録として残すには大きな欠陥が残る運用方法です。

f:id:DPM:20200812084943p:plain

・運用パターン2

 対象A≠対象B のパターンです。パターン1と異なり、対象A,Bの文字列が

 全く異なるタイプになります。

 全く違うバーコードなのになぜ?と思う方もいらっしゃると思いますが、

 Aをマスターとして読み込んだ場合、Bになれば一致というプログラムを

 作ってしまえばいいのです。

 

 例えば、あらかじめエクセルのセルに表を作成しておき、

 エクセル1行J列にmasterという文字を登録、

 隣の1行k列にsampleという文字列を入れておく。

 この状態で Aのバーコードを読み込んだとき、

 表(台帳)に登録されているかのエラー検知を行ったあと、

 Bのバーコードを読み込むと、Bのバーコードの文字列が隣列のJ列の文字列と

 一致しているかどうかの確認を行う、とういう仕組みにすればOKです。

 

f:id:DPM:20200812090908p:plain

・運用パターン3

 対象A≠対象B のパターンです。運用パターン2同様に異なる文字同士なのですが、

 頭の文字が1文字違うだけのものです。

 この方法は、読み込んだバーコードデータがA、Bどちら由来のものなのかを

 記録するために利用されたり、1番目にAを読み込まないとBの読み込みを

 できないようにする為に利用されます。

(運用パターン2でも可能です。そちらのほうが厳格に設定/応用できます。)

 こちらのパターンはAのバーコードを読み込んだとき、

 記録としては Psample として残し、照合使用時には sample として

 使用されます。その後、Bのバーコード読み取り時も同じ処理を行ったとき、

 それぞれの文字が一致しているかを照合します。

 こちらの方法のメリットはパターン2のようにリストを事前に作成しなくても

 トレースが取れる運用ができる点です。

 

 

_________________________________________________________________________________

【2点照合サンプル】     上記運用パターン3

 

簡単な2点照合プログラムを作成してみました。

P_XXXXX vs. S_XXXXX  にて部分一致を行い、

照合不一致の場合はエラーメッセージ。

一致した場合は履歴をセルに入れ込むプログラムです。

このプログラムがあれば

P_XXXXX(Xは任意)とS_XXXXX(Xは任意)の文字列からなるバーコード、QRコードにて

照合確認が可能です。

 

先に述べた通り、リーダーは"文字を入れてエンター"をするだけの道具なので

コードでは"文字を入れてエンターキーを押されたとき"から始まる照合プログラムを

作成するだけで良いです。

 

この処理は以下のコードを入れて実行します。

___________________________

Private Sub TextBox1(任意)_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then

end If

end sub

____________________________

※KeyCode=13は世界共通でEnterキーに割り当てられている数字です。

細かい事はまず置いておき、コード入れる環境を作ります。

 

 

・ユーザーフォームの作成

エクセル上の任意のセルを使う方法でも構いませんが、

特定のセルをクリックしてから処理を行うのは億劫です。

 

この場合はユーザーフォームを作成し、タグをプログラムでコントロールするのが一般的だと思います。

よって、今回はユーザーフォームにて照合を行うようにしました。

開発画面からユーザーフォームを作成し、照合用に2つのTextBoxを入れ込みます。

 

上側がTextBox1、下側の項目がTextBox2となっていることをプロパティで確認。

プロパティにてTabStopがTrueになっているとEnter入力時に自動でタブ移動を

します。

自分でコントロールしたいのでTextBox2側のTabStopはFalseに設定しておきます。

次に、ユーザーフォーム呼び出しボタンを作成します。

 

※ファイル起動時に自動起動するように設定できますが、

今回はボタンクリックイベントで呼び出すようにします。

 

"開発"→"挿入"ボタンで"ボタン"を選択→任意のセルでドラッグしてボタンを設置。

 

マクロの登録ボタンでUserFomCall_Clickと命名します。

(タイピングミスでFormでなくFomとなってしまいましたが気にしない…)

_______________________

Sub UserFomCall_Click()
UserForm1.Show
End Sub

________________________________________________________

ユーザーフォームを呼び出すコードは

ユーザーフォーム名.Show のみです。簡単ですね。

念のため、動作確認して次に進みます。

 

 

あとは

"UserForm1"→"右クリック"→"コードの表示" で以下のコードを入れ込みます。

少々長いですが、IF関数が多いだけなのでじっくり読み込めば理解できると思います。

_______________________________________

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
'ここに照合処理を入れ込む
    If Len(TextBox1.Value) > 2 Then
        If Left(TextBox1.Value, 1) = "P" Then
                


        'TextBox2のプロパティ初期値は"TabStop"を"False"に設定しています。
        TextBox2.SetFocus
        'TextBox1のタブ移動制御。勝手にTextBox1へタブ移動させないようにします。
        '(コードで制御する)
        TextBox1.TabStop = False
        Else
        MsgBox "Pから始まるデータを入れてください"
        TextBox1.Value = ""
        End If
    Else
    MsgBox "文字数が不正です"
    TextBox1.Value = ""
    End If
End If
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim P, S As String
'初期化
P = ""
S = ""

If KeyCode = 13 Then
        
'ここに照合処理を入れ込む
    If Len(TextBox2.Value) > 2 Then
        If Left(TextBox2.Value, 1) = "S" Then
        
            P = Right(TextBox1, Len(TextBox1) - 1)
            S = Right(TextBox2, Len(TextBox2) - 1)
            
                If P = S Then
                MsgBox "照合一致"
                '履歴をセルに残すコードを呼び出します。
                'このまま記述しても問題ありませんが、若干コードが読みづらくなるので別でコードを書いてます。
                Call InputCell
                Else
                MsgBox "照合不一致"
                End If
        '正しい処理が完了したらTextBox1の値も空白(="")にする。
        TextBox1.Value = ""
        Else
        MsgBox "Sから始まるデータを入れてください"
        GoTo Esc
        End If
    'TextBox1の"TabStop"を"True"に設定にしてTextBox1へタブが戻るようにしています。
    TextBox1.TabStop = True
    Else
    MsgBox "文字数が不正です"
    TextBox2.Value = ""
    End If
Esc:
'処理が終わったら値を空白(="")にする。
TextBox2.Value = ""
End If
End Sub

 


Public Sub InputCell()
Dim LastRow As Integer
'F列の最終行を取得します。
LastRow = Cells(Rows.Count, "F").End(xlUp).Row

'F列最終行にTextBox1の値を入れます。
Cells(LastRow + 1, "F") = TextBox1.Value
'G列最終行にTextBox2の値を入れます。
Cells(LastRow + 1, "G") = TextBox2.Value
'H列最終行に日付と時間を入れます。(Date と Time)
Cells(LastRow + 1, "H") = Date & "_" & Time

End Sub

_______________________________________

これで完成です。

動作が完了したら、あとは有線or無線のリーダーをPCに繋ぐだけです。

 

______________________________________

・急所

・If KeyCode = 13 Then ・・・

 上記の通り、エンターキー(KeyCode)が押されたときのみ・・・

 

・If Len(TextBox2.Value) > 2 Then・・・

 テキストボックスの文字数制限を設けています。

 2文字以下はエラーにするようにしています。文字数指定は任意です。

 

・If Left(TextBox2.Value, 1) = "S" Then・・・
 Left関数で1文字目のみ抜き取り、これが”S”の場合のみ処理を行うように

 しています。これを入れる事で、"S"から始めるコード以外は

 全く受け付けないようにしています。        

・P = Right(TextBox1, Len(TextBox1) - 1)・・・

 Right関数で右からTextBox1の文字列数-1の文字(Len関数)を

 抜き取って変数Pに格納しています。

 P_XXXXX と S_XXXXX での照合を行うのではなく

    1文字目を抜き取った _XXXXX と _XXXXX で完全一致しているか否かの確認を

 プログラム上で行う為です。

 

・LastRow = Cells(Rows.Count, "F").End(xlUp).Row・・・

 よく使うコードです。入力セルの最終行を取得しています。

 上記のコードでは空のセル(最終行+1行)を指定し文字入力するために

 行の変数を格納するために使用しています。

 

 

プライバシーポリシー

 

広告の配信について

当サイトは第三者配信の広告サービス「Googleアドセンス」を利用しています。(予定)

広告配信事業者は、ユーザーの興味に応じた広告を表示するために「Cookie(クッキー)」を使用することがあります。

Cookieを無効にする設定およびGoogleアドセンスに関して、詳しくはちらをクリックしてください。

また、『だいたいこんな感じ』は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイトプログラムである、Amazonアソシエイト・プログラムの参加者です。(予定)

三者がコンテンツおよび宣伝を提供し、訪問者から直接情報を収集し、訪問者のブラウザにCookie(クッキー)を設定したりこれを認識したりする場合があります。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。

このトラフィックデータは匿名で収集されており、個人を特定するものではありません。

この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

この規約に関して、詳しくはこちらをクリックしてください。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。

これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。

当サイトでは、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。

 

・特定の自然人または法人を誹謗し、中傷するもの。

・極度にわいせつな内容を含むもの。

・禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。

・その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

免責事項

当サイトで掲載している画像の著作権・肖像権等は各権利所有者に帰属致します。権利を侵害する目的ではございません。

記事の内容や掲載画像等に問題がございましたら、各権利所有者様本人が直接メールでご連絡下さい。確認後、対応させて頂きます。

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

運営者:DPM

初出掲載:2018年07月29日

 

水中ドローンの旅

BW Space 水中ドローンなるものを買ってしまいました。

https://prtimes.jp/main/html/rd/p/000000001.000035670.html

 

最高スペックを買いましたので…お値段なんと23万5400円 (汗)

リーマンには痛い金額ですが、私の好きな漫画に

“憧れは止められない”というフレーズが脳に焼き付いておりますし、

へそ曲がりな人間なので、人と同じことをしていても人生つまんない理論で

購入した次第です。

 

私は海なし県に住んでいるので海中撮影はなかなか機会がなく厳しいのですが、

その分湖の多い地形なので、淡水撮影ができます。

 

しばらく記事を書いていなかった(電子回路で挫折した)のですが、

動画編集はある程度経験もありますし、動画が物足りないとき

に入れたい簡単な絵等は得意な部類ですので、続けられるかなぁ?…と。

 

次回の投稿では写真をつけようと考えておりますが、水上から見た景色と、

水中から見た景色って結構違うんですよ。

 

近郊の湖は現在箇所撮影し、動画も溜まってきておりますので、

近いうちにyoutube等に投稿しようとしています。

 

ちなみにですが、水中のドローン使用は空中ドローンに比べて限定的と

思われがちですが、飛行物体を扱うリスクやプライバシーには関わってこないので、

“水の中限定”ですが、結構遊べるところがあるんですよ。

 

ここらへんの魅力を今後紹介していきたいとおもいます。

 

以上

デザイナーという仕事

私、数年前までデザイナーの仕事を請けていました。

かっこよくいればフリーランスでの仕事、

悪く言えば内職みたいなものでしたが…

やってみてわかったことは、"ストレス"が恐ろしくのしかかる仕事、

という点です。

 

私は主にソーシャルゲームに使用されるイラストをメインに受けてました。

厚塗りイラスト、アニメ塗りイラスト、フラッシュアニメーションなんかも

やっていました。

仕事で絵を描きたい、と思って練習をはじめ、

7年目くらいでやっと仕事がもらえました。はじめは本当に嬉しかった。

才能のある人は上手くいけば2年ほどでもらえるようになるみたいです。

うらやましいですね。

 

話を戻しますが、デザイナーって結局個人プレーなんです。

 

 

個人の力量が全てで、お客様の要求に沿わなかった場合、

次からは仕事がもらえないのではないか。という不安に駆られます。

そして、基本的に超短納期がほとんどです。

スピードなんて後からついてくる、なんて言われますが

そうでもないのです。先に身につけておくべきです。

作業を短くするためのツールの勉強に割く時間があまりとれなくなるためです。

 

デザイナーでも、他の仕事でも、最後は

"物事を合理的に処理できる人間"

が勝ち抜いていくのだと、最近常々思います。

 

 

駄文でした。

 

 

Excel VBA プログラム Find関数でVLOOKUPと同様の処理を行う

VLOOKUP関数やMATCH関数を使えば、

プログラムを使わずに検索できます。

しかし、私は上記の関数を使ったことがないため、

使い方がいまいちわかりません。

VBAでプログラムを組んでしまえば、簡単に文字の検索ができる為です。

f:id:DPM:20180730110332p:plain

添付は、以前紹介しました文字を検索するプログラムになります。

例では、プリキュアという文字列打ち込み、検索ボタンを押すと

該当する文字列の右隣に◎がつくというプログラムです。

これをFind関数を使用するサンプルを以下に示しました。

 

 

--------------------------------------------------

Sub 検索()

Dim kensaku As Range
Set kensaku = Range("C5:C14").Find(What:=Cells(2, "D"), LookAt:=xlWhole)

Dim GYO As Integer
GYO = 5

Do Until GYO = 14


If Cells(GYO, "C") = kensaku Then
Cells(GYO, "C").Offset(0, 1) = "◎"
End If


GYO = GYO + 1
Loop


End Sub

--------------------------------------------------

LookAt:=xlPart)

・Find関数はRangeで範囲指定しなければなりません。

参照するRangeを kensaku とします。C5からC14内のセルの中から、

Cells(2,"D")に完全に一致するものをkensaku内に格納します。

・検索される文字列については5列目から順に14列目まで読み込まないといけません。

この業の変数は文字列なので変数は Integer、こちらをGYOとします。

・GYOは14行まで1ずつ足してチェックしていかなればなりませんので、

Do Until (~まで) Loop を使用します。

列が14になるまでGYOに1足すのでGYO=GYO+1

・Loop処理の間で、kensaku(検索ワード)と参照しているCells(GYO,"C")の

値が完全に一致している時、その右に1つ隣Offset(0,1)に"◎"を記入します。

 

部分一致を行いたい場合

LookAt:=xlWhole を LookAt:=xlPart

にかえるだけ!!

 

f:id:DPM:20180730111500p:plain

こうすると、プリキュアという文字列の"プ"でも"キュア"でも

1文字でも同じものが含まれていた場合、一致したものが◎表示されるように

なります。

 

 

Excel VBA if関数とLoop関数、Offset関数を用いた簡易プログラム例と簡単な解説

検索するプログラムが作りたい!

 

セルの列の中から、特定のワードを検査し、該当があったら

真横のセルに◎をつけるプログラミングサンプルです。

Loop関数を使用せず、Find関数でも良いのですが

VBAをはじめたばかりの方には少し複雑なので、今回はシンプルな3つの

関数について紹介です。

 

 作成例 (サンプル)

 

 Cell(2,"D")に"プリキュア"という文字を入れて検索を押すと

f:id:DPM:20180729232159p:plain

プリキュアと書かれたセルの横に"◎"が書かれるというプログラムです。

f:id:DPM:20180729232505p:plain

 

無事プリキュアに◎がつきました。

以下のプログラムが検査ボタンに組み込まれています。

--------------------------------------------------

Sub 検索()

Dim kensaku As String

kensaku = Cells(2, "D")

Dim GYO As Integer

 

GYO = 5

Do Until GYO = 14


If Cells(GYO, "C") = kensaku Then
Cells(GYO, "C").Offset(0, 1) = "◎"
End If


GYO = GYO + 1
Loop


End Sub

--------------------------------------------------

・検索する文字を入れるCells(2,"D")の値は文字列になるので変数は String

これを kensaku とします。

・検索される文字列については5列目から順に14列目まで読み込まないといけません。

この業の変数は文字列なので変数は Integer、こちらをGYOとします。

・GYOは14行まで1ずつ足してチェックしていかなればなりませんので、

Do Until (~まで) Loop を使用します。

列が14になるまでGYOに1足すのでGYO=GYO+1

・Loop処理の間で、kensaku(検索ワード)と参照しているCells(GYO,"C")の

値が完全に一致している時、その右に1つ隣Offset(0,1)に"◎"を記入します。

 

 

これらの関数は非常によく使いますので、すらすら打てるくらいまで

いろいろ想定して作ってみるといいかもしれません。

 

 

ダンゴムシを良い感じに利用し、合理的に処理する

ダンゴムシの生態

 

庭先で植物などを育てていると、よく目にするのがダンゴムシ

危険が迫ると丸くなり、身を守る姿はとても面白い。

彼らは枯れはなどを食べるが、その排泄物が土壌の栄養源になるため、

ミミズ同様、分解者の役割を担っており、地球環境には欠かせない。

だが、彼らが食べるのは枯れ葉だけではなく、葉や花まで食べてしまう。

 

数が少なければ野放しでも構わないが、数が多いと自分の育てているものを

食い散らかす厄介な輩だ。

 

彼らの分解者としての役割だけ利用し、役割を終えたら切り捨てられないだろうか。

 

f:id:DPM:20180729203353p:plain

彼らは春にやってくる

ダンゴムシは冬、冬眠する。甲殻類は冬眠するのがポピュラーなようだ。

ダンゴムシ甲殻類なので春先に目覚め、生きるため、子孫を残すために

食べ続ける。一番食べ、繁殖するのは秋。

 

いつ切り捨てるか?

彼らの生態を理解する事は、彼らに対抗する1番の手段だ。

1年のサイクルは以下のようになっており、寿命は4年前後らしい。

 

春(目覚め)→夏→秋(冬眠の為いっぱい食べる)→冬(冬眠)

 

多くの園芸植物は春→夏の終わりまでが一般的なので、

この間に防衛すれば、新芽や花を食べられるリスクは減るのではなかろうか。

 

合理的に処理する

ダンゴムシには固形の殺虫材が効果的だ。

(数が多く、夜行性の為、食べさせて中毒死される手段が一番良い)

秋の終わり11月頃に固形の駆除剤を撒き、

春先、目覚めはじめる4月~5月に固形の駆除剤を撒けば、

合理的に彼らを淘汰できるのではなかろうか。