CANPAN ブログ検索
Loading
  • もっと見る
<< 2019年06月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
カテゴリアーカイブ
最新記事
最新コメント
エクセルのマクロVBAを使った、繰り返し処理「For〜Next」「Do Loop」の違い [2019年02月07日(Thu)]

エクセルのマクロVBAを使った、繰り返し処理「ForNext」「Do Loop」の違い



 エクセルのマクロVBAを使って「表に行を挿入する」必要があり、ネットを参考にして「マクロ」を組みました。


 参考までに、エクセルの「表示」→「マクロ」→「マクロの記録」という機能を有効に使って、ネットで調べなくても、動くマクロを組みことができます。


 そのときに、大きな違いが分かりました。


 表に行を挿入するマクロ

 1頁に10行だけ印刷し、改ページをする

@「ForNext

       gyo_suu = 10

       gyo = 2

       I_end = 20

       for I = 4 to I_end

              If gyo = gyo_suu Then

                     '4行挿入

                     Rows((I + 1) & ":" & (I + 4)).Select

                     Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

                     ・・・・・

                     I = I + 4

                     I_end = I_end + 4

                     gyo = 1

              End If

              gyo = gyo + 1

       next I


A「Do Loop

       gyo_suu = 10

       gyo = 2

       I = 4

       Do While Cells(I, 1) > 0

              If gyo = gyo_suu Then

                     '4行挿入

                     Rows((I + 1) & ":" & (I + 4)).Select

                     Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

                     ・・・・・

                     I = I + 4

                     I_end = I_end + 4

                     gyo = 1

              End If

              I = I + 1

              gyo = gyo + 1

       Loop


 マクロの実行結果は

@「ForNext

 Iの値:「I = I + 4」で4増分

 I_endの値:「I_end = I_end + 4」としても、「I_end = 20」で「最終値」となります


A「Do Loop

 Iの値:「I = I + 4」で4増分

 I_endの値:「I_end = I_end + 4」で4増分



 私は、「Office 365 Business」を最新版にアップデートして、エクセルを使用しています。


 「ForNext」はよく使いますが、「カウンタ変数」の「最終値」を変更できないのは、「仕様」のような気がします。


Posted by 山田 雄一郎 at 22:13
「電池使用推奨期限」も月末日付で管理 [2016年03月29日(Tue)]
「電池使用推奨期限」も月末日付で管理


 包装を含めて、電池には「電池使用推奨期限」を表示しています。

 電池の液漏れなどを考えると、「電池使用推奨期限」を越えた電池を、「非常用ラジオ付き電灯」のような防災用の製品に使うことを避けた方が良いと思いす。

 ということで、「電化製品に内蔵している電池」をEXCELの表の「現況」シートに追加することにしました。

 「電池使用推奨期限」と「経過期間」の列を追加するだけの話ですが、「電池使用推奨期限」を入力するときに困りました。

 「電池使用推奨期限」は、例えば「04-2017」ならば、その月の月末の「2017/4/30」とするつもりでした。

 しかし、閏年もあり日付を間違える可能性があるため、マクロで自動的に計算することにしました。

 まず、「電池使用推奨期限」は、例えば「04-2017」ならば、その月の月初めの「2017/4/1」と入力します。

 マクロは、次のようになります。
@「I」行目「15」列目の「Cells(I, 15)」には、「2017/4/1」(「電池使用推奨期限」)というような日付が入っています。
 使用中のボタン電池のように「電池使用推奨期限」が不明の場合は、空欄になります。 日付が入っていれば、直ぐ下の処理を行いますが、空欄ならば処理を実行しません。
A日付が「1日」ならば、直ぐ下の処理を行いますが、月末の日付ならば処理を実行しません。
B日付変数「kigen」に「電池使用推奨期限」(「2017/4/1」)を入力します。
 日付変数「kigen」に「1月」を加えて(「2017/5/1」)、その後「1日」を引きます。(「2017/4/30」)
 日付変数「kigen」(「2017/4/30」)を「電池使用推奨期限」に入力します。

***マクロ開始***
If Cells(I, 15) > 0 Then
'「1日」ならば月末の日付に変換
If Day(Cells(I, 15)) = 1 Then
kigen = Cells(I, 15)
kigen = DateAdd("m", 1, kigen)
kigen = DateAdd("d", -1, kigen)
Cells(I, 15) = kigen
End If
End If
***マクロ終わり***
Posted by 山田 雄一郎 at 09:42
EXCELマクロを自動実行させるときの注意事項 [2016年03月25日(Fri)]
EXCELマクロを自動実行させるときの注意事項


 失敗という経験が無ければ、身につかない事項があることがわかりました。

 EXCELマクロを20年以上使っていますが、同じ失敗は記憶にありませんでした。

 前提として、「電化製品に内蔵している電池」をEXCELの表(「現況」シート、「在庫」シート)で管理していました。

 「現況」シートの列の項目名は「NO 設置場所 種類 メーカー 購入日 経過期間 電池種類 電池本数 電池点検日 経過期間 電池交換日 経過期間 備考」としました。

 「在庫」シートの列の項目名は「NO 電池種類 電池使用数 電池在庫数 充電式電池在庫数 在庫電池の使用推奨期限 備考」

 まず、「現況」シートを開いてマクロを実行し、@本日までの「経過期間」を計算する A電池の種類ごとの本数を「在庫」シートで集計する ということを実行していました。

 「経過期間」は毎日変化しますので、この「現況」シートを開いて実行するマクロを、ファイルを開いたときに自動実行するように設定しました。

 それで、今日のことですが、電池を交換したので在庫が無くなり、電池の補充をすることにしました。

 新しく電池を買うと「在庫電池の使用推奨期限」(例04-2020)が変更になる場合があるので、「在庫」シートを表示してファイルを保存しました。

 しばらくして、電池を買ってきたのでファイルを開くと、「在庫」シートを表示してマクロを自動実行してしましました。

 つまり、「在庫」シートのデータが無くなりました。「Ctrl+z」を実行してもデータは元に戻りませんでした。

 データの変更を保存しないで、ファイルを閉じました。
(右上の「×」をクリックして現れた「保存しない」を、クリックする。)

 ネットで、探すと下のページが見つかりました。

***引用開始***
EXCELマクロを無効にして開く方法
質問日時:2012/10/12 12:09
http://oshiete.goo.ne.jp/qa/7744698.html
No.6
回答日時:2012/10/13 09:00
私が行う場合(Auto_Openの自動実行をさせないために)は、
 最初に、Excelで、新規ワークブックが立ち上げます。
 次に、Excelのメニューから、ファイル名を選び、
 Shiftキーを押しながら、ファイル名を選び、クリックします。
 そうすれば、Auto_Openは実行されません。
***引用終わり***

 EXCELマクロを無効にしてファイルを開き、「現況」シートを表示してファイルを閉じました。

 これで、今までと同じようにファイルを開けば、「経過期間」を計算するようになりました。

 二度とこのようなことが起こらないように、「現況」シートを開いて実行するマクロに、最初に「現況」シートを開くことを追加しました。
(例 Sheets("現況").Select)

 今回の反省点は
1 「ファイルを開くと自動実行するマクロ」と「シートを開いて実行するマクロ」を同一にしない。
2 やむを得ず同一にせざるを得ないときは、「ファイルを開くと自動実行するマクロ」に「シートを開いて実行するマクロ」を合わせる。

※ファイルを「保存しない」ことにすれば、マクロが変更させた部分を元に戻すことができる。
Posted by 山田 雄一郎 at 21:12
プロフィール

山田 雄一郎さんの画像
山田 雄一郎
プロフィール
ブログ
リンク集
http://blog.canpan.info/hofu_nanboku/index1_0.rdf
http://blog.canpan.info/hofu_nanboku/index2_0.xml