Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


22847 / 76738 ←次へ | 前へ→

【59266】Re:マクロでのオートSUM
発言  ichinose  - 08/12/4(木) 6:22 -

引用なし
パスワード
   おはようございます。

>Σをマクロで実施しようとするとこんなにも
>難しいコードになるのですね。
いえ、そうではありません。

tantanさんが記述された仕様だけを満足させれば良いのであれば・・、

Sub Macro1()
  Dim i As Long, j As Long, k As Long
  Dim target As Range
  With ActiveCell
    If .Row > 1 Then
      k = .Column
      i = .Row - 1
      If Range(Cells(1, k), Cells(i, k)).Count > 1 Then
       Set target = Range(Cells(1, k), Cells(i, k)).Find("=", Cells(1, k), xlFormulas, xlPart, , xlPrevious)
       If target Is Nothing Then
         Set target = Cells(1, k)
       ElseIf target.Address <> Cells(i, k).Address Then
         Set target = target.Offset(1, 0)
       End If
      Else
       Set target = Cells(1, k)
      End If
      .Formula = "=sum(" & Range(target, Cells(i, k)).Address & ")"
    End If
  End With
End Sub

上記のコードでも同じように作動すると思いますよ!!

つまり、get_findcellというコードはなくても動作はします。


では何故わざわざ長いコードを???  ですよね!!


理由1 汎用サブルーチンの品質向上のため

get_findcellと言うコードは、かなり以前に作成したプロシジャーです。
tantanさんが記述された仕様のために作成したコードではありません。

もっともMacro1の方も直前の投稿コードを1/3ぐらい引用させてもらいましたので
私がtantanさんの仕様のために新たに書いたコードはMacro1の2/3ぐらいなんです。


get_findcellは、
Findメソッド関連の処理を私自身が使いやすいインターフェースにしたものです。

RangeオブジェクトのFindメソッドを使うと、
指定セル範囲内の特定の文字列があるセルを複数取得することができますが、
そのアルゴリズムを毎回記述するのが面倒で、この処理を汎用的 且つ、簡単な
インターフェースで行いたかったのです。

HelpにFindメソッドを使って複数のセルを取得するコード例がありますから
調べてみてください。

このget_findcellを作成後は、Findメソッド関連の処理には、このFunctionを使うようにしています。

今回のようにもっと簡単に記述できる仕様でも・・・です。

だって、色んな事象に使えば、get_findcellのテストをより多く行えるので
それによって完成度が増すでしょう?

言ってみれば、汎用Functionのデバッグをしてもらうためです。


理由2 拡張性の考慮

私は、プログラミングするときには、拡張性ということにかなり重点をおいて
プログラム構造を考えているつもりなんです。

つまり、将来こんな仕様の変更にも対応できるように とか、
今はないけど、将来こんな機能追加も考えられるなあ なんて、考えた時に
それを視野に入れたプログラム構造を考えると言うことです。

今回の仕様って、
言わば、Sum関数からSum関数の間の小計をとる仕様ですよね?

本来のExcelの仕様では、
小計を算出したら、中計、大計も算出できるようになっています。

これも実現できるようになんて、機能追加が発生した場合は、
関数が入っている複数のセルを取得可能にしなければならないなあ・・
と考えました。

その時のためにたいしたコード量でもないのでget_findcellで処理しておけば、
変更が楽かなあ と考えたためです。


シンプルなコードが駄目とは思いませんが、

シンプル IS Best だとは、私は思っていないんです。

0 hits

【59109】マクロでのオートSUM tantan 08/11/29(土) 0:04 質問
【59110】Re:マクロでのオートSUM Yuki 08/11/29(土) 8:13 発言
【59111】Re:マクロでのオートSUM Hirofumi 08/11/29(土) 8:14 発言
【59116】Re:マクロでのオートSUM Hirofumi 08/11/29(土) 11:46 発言
【59130】Re:マクロでのオートSUM tantan 08/11/29(土) 23:06 質問
【59131】Re:マクロでのオートSUM Hirofumi 08/11/30(日) 0:18 回答
【59132】Re:マクロでのオートSUM Hirofumi 08/11/30(日) 0:43 回答
【59133】Re:マクロでのオートSUM tantan 08/11/30(日) 0:47 質問
【59134】Re:マクロでのオートSUM Hirofumi 08/11/30(日) 1:45 回答
【59151】Re:マクロでのオートSUM tantan 08/11/30(日) 18:54 質問
【59157】Re:マクロでのオートSUM Hirofumi 08/11/30(日) 20:48 回答
【59166】Re:マクロでのオートSUM tantan 08/12/1(月) 0:28 質問
【59168】Re:マクロでのオートSUM SS 08/12/1(月) 9:47 発言
【59195】Re:マクロでのオートSUM tantan 08/12/2(火) 0:57 質問
【59196】Re:マクロでのオートSUM ichinose 08/12/2(火) 8:09 発言
【59263】Re:マクロでのオートSUM tantan 08/12/4(木) 0:41 お礼
【59266】Re:マクロでのオートSUM ichinose 08/12/4(木) 6:22 発言
【59197】Re:マクロでのオートSUM Jaka 08/12/2(火) 9:33 発言
【59224】Re:マクロでのオートSUM Hirofumi 08/12/2(火) 18:43 回答
【59225】Re:マクロでのオートSUM Hirofumi 08/12/2(火) 19:24 回答
【59262】Re:マクロでのオートSUM tantan 08/12/4(木) 0:36 お礼
【59283】Re:マクロでのオートSUM Hirofumi 08/12/4(木) 19:29 回答
【59310】Re:マクロでのオートSUM tantan 08/12/5(金) 18:06 お礼
【59228】Re:マクロでのオートSUM n 08/12/2(火) 21:24 発言
【59264】Re:マクロでのオートSUM tantan 08/12/4(木) 1:50 質問
【59265】Re:マクロでのオートSUM n 08/12/4(木) 3:06 発言
【59311】Re:マクロでのオートSUM tantan 08/12/5(金) 18:08 お礼

22847 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free