2008年09月01日

Zoho Sheetマクロ機能の「エラー処理」について

一般にプログラムでのエラーには、コンパイルエラー、実行時エラー、論理エラーがあります。
Zoho Sheetマクロ機能では、コンパイルエラー(文法エラー)が実行時にも検出されます。


さて、エラー発生時のプログラム制御については、簡単な構造だけが処理可能です。具体的には、

  • On Error GoTo 行ラベル
  • On Error Resume Next
  • On Error GoTo 0
  • Exit Sub

が使えます。

しかし、MS-Excel VBAにある、

  • Resume
  • Resume Next
  • Resume 行ラベル

は、(文法エラーにはならず)期待される内容の実行はされません。


更に、エラー検出による制御は変わりますが、エラーコード(Err.Number)及びエラー内容(Err.Description)は返されません。実際には、エラーコードは常に0、エラー内容は"null"です。



これらは全て単純な構文で確認しています【2008年9月1日現在】。

posted by 鎌倉太郎 at 13:57| ☁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月29日

Zoho Sheetマクロ機能の「グラフの取り扱い」について

グラフのマクロ機能については、「マクロの記録」を使って確認するのが良いので、プログラミングに関わる点だけを抽出しておきます。


基本的に、Zoho Sheetにはグラフシートの概念が(現状は)ありませんので、埋め込みのグラフだけになります。グラフ作成は具体的には、

  • ChartObjectsコレクション.Add ( _
      Left:=左端位置 , Top:=上端位置 , Width:=幅 , Height:=高さ )


グラフの形態は、Chartプロパティを使って設定します。一例:

    With ActiveSheet.ChartObjects.Add(Left:=60, Width:=400, Top:=150, Height:=300)
        .Chart.SetSourceData Source:=Range("B2:F8"), PlotBy:=xlColumns
        .Chart.ApplyDataLabels Type:=xlDataLabelsShowValue
        .Chart.ChartType =xl3DColumnStacked
        .Chart.HasTitle = True
        .Chart.ChartTitle.Text = "地域別売上"
        .Chart.Axes(xlCategory, xlPrimary).HasTitle = True
        .Chart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "地域"
        .Chart.Axes(xlValue, xlPrimary).HasTitle = True
        .Chart.Axes(xlValue, xlPrimary).AxisTitle.Text = "売上"
        .Chart.HasLegend = True
    End With



地域別売上 - http://sheet.zoho.com


Zoho Sheetでは、(現状は)Nameプロパティが使えませんので、チャートの識別はインデックス番号(グラフの重なり順)による為、複数のグラフを扱う時には注意が必要です。

既にあるチャートの形態変更の方法の例:
  1.   ActiveSheet.ChartObjects(1).Chart.ChartType =xlLineMarkers

  2.     With ActiveSheet.ChartObjects(1)
        .Left = 131
        .Top = 128
        End With
    (埋め込みグラフが図形オブジェクトである事から指定できるようですが、Zoho Sheetには現状図形オブジェクトの概念はない・・・・)

グラフ作成の為の初期コードは、上述しましたが「マクロの記録」機能を流用するのが良いようです。Zoho Sheetでマニュアル設定できないものは、マクロ機能でも設定できません(隠れ機能は現状見つけていません)。



これらは全て単純な構文での確認によるものです【2008年8月29日現在】。

posted by 鎌倉太郎 at 21:32| ☀| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月28日

Zoho Sheetマクロ機能の「ハイパーリンクの設定」について


今回は「ハイパーリンクの設定」ですが、「セルへの設定における一機能」というべきかもしれません。実際にリンク先にできるのは、Webページとメールアドレスです。

具体的には、

  • Hyperlinksコレクション.Add Anchor:=Rangeオブジェクト , _
                Address:="URL|メールアドレス" , _
                SubAddress:="ブックマークなど" , _
                ScreenTip:=ポップヒント , TextToDisplay:=文字列



  1. 図形(現状、Zoho Sheetにはない概念ですが・・・・)にハイパーリンクは設定できません。
  2. 別ファイルをリンク先にする事はできません。ブック内(のシートへの)リンクもできません。


ハイパーリンクを削除するには「Delete」メソッドを使いますが、全てのハイパーリンクを削除するのは、

  • ActiveSheet.Hyperlinks.Delete

でできます。


尚、設定したハイパーリンクを実行する事(Followメソッド、FollowHyperlinkメソッド)は、現状は実現できていません。





posted by 鎌倉太郎 at 07:31| 🌁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月27日

Zoho Sheetマクロ機能の「行と列の取り扱い」について


新しい行や列の挿入やセルの高さや幅の変更は、行や列の単位で行いますが、Zoho Sheetのマクロ機能でも、同様に指定できます。

そこで今回は、「行と列の取り扱い」です。


まず、行と列の参照です。具体的には、

  • オブジェクト.Rows(行数)
  • オブジェクト.Columns(列数)

行や列の参照形式は、




指定したセル範囲を含む行全体又は列全体の参照指定もできます。具体的には、

  • Rangeオブジェクト.EntireRow
  • Rangeオブジェクト.EntireColumn


これらに対して「Insert」メソードや「Delete」メソッドで挿入や削除を実行します。


行や列に関する各種情報も取得・設定できます。具体的には、

行番号や列番号

  • Rangeオブジェクト.Row
  • Rangeオブジェクト.Column

尚、表の最後のセルの行番号と列番号は、次のように取得できるので便利。

Sub RowColumnLastCell()
    Dim tempRange As Range, cnt As Integer
    Set tempRange = Range("B2").CurrentRegion
    cnt = tempRange.Cells.Count
    MsgBox "表の最後のセルの行番号 :" & tempRange.Cells(cnt).Row
    MsgBox "表の最後のセルの列番号 :" & tempRange.Cells(cnt).Column
End Sub


行の高さ、列の幅
  • Rangeオブジェクト.RowHeight
  • Rangeオブジェクト.RowHeight = 設定値
  • Rangeオブジェクト.ColumnWidth
  • Rangeオブジェクト.ColumnWidth = 設定値


行や列の表示・非表示

  • Rangeオブジェクト.Hidden
  • Rangeオブジェクト.Hidden = True/False


行や列の幅の自動調整

  • Rangeオブジェクト.AutoFit

但し、行の高さや列の幅を標準のものに戻す「UseStandardHeight」プロパティや「UseStandardWidth」プロパティは、実現できていません。



注意:これらは全て単純な構文で確認しただけです【2008年8月26日現在】。

posted by 鎌倉太郎 at 11:07| ☔| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月23日

Zoho Sheetマクロ機能の「ブックの取り扱い」について


Zoho Sheetにおける(MS-Excelでいう所の)ブックは、現状では同時に扱えるのが1つのブックだけになります。用語としての「ブック」も無い様なものですが、マクロ機能から見たらファイル(マイシート、共有シート)名を取得しようとした時には必要な概念になります。(以下ではブックと呼称します)

現状としては、フォルダなどによるブックの蓄積場所の区分けもできません。


従って、Zoho Sheetにおけるマクロ機能から見た時には、「Open」も「Close」もありません、Workbooksコレクションもありません。また、アクセスPathもありません。
ただ、「Workbooks(Workbooks.Count).Name」は有効処理されているようです・・・・・
Path指定の「C:\kamakura\」などの構文は認識されていますが、Path指定の内容は無視されます。「"C:\kamakura\売上" & "0821"」では、ファイル名として「売上0821」となります。


Zoho Sheetにおけるマクロ機能から見たブックは、マクロを収めているブックだけです。これはオブジェクトとして
ActiveWorkbook 又は ThisWorkbook
で指定します。


ブックの保存については、かなり実現されています。具体的には、

オブジェクト.Save

オブジェクト.SaveAs ファイル名

オブジェクトSaveCopyAs ファイル名

ファイル名では、「FileName := ファイル名」も有効。


新規ブックやバックアップなどは、「SaveAs」や「SaveCopyAs」メソッドを使います。

ブックの属性として、プロテクトはできません。一度保存してから変更がされているかを確認する「Saved」プロパティも使えません。ブックの名前を調べる「Name」プロパティだけのようです。



尚、MS-Excelのマクロ「SaveAS」メソッドで指定できるFileFormat、Password、ReadOnlyRecommended、・・・・などはできませんが、Zoho SheetにおいてFileFormatを変換して出力する事は、エキスポートで実現されていますネ。




posted by 鎌倉太郎 at 08:06| ☁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月19日

Zoho Sheetマクロ機能の「色々なセル参照」について


シート関連のプログラミングではセルの参照が基本的な処理対象として行われますが、ここでZoho Sheetマクロ機能のセルを参照する色々な形式をまとめておきます。



基本的にはMS-Excelと同じで「Range」と「Cells」になります。その参照方法も殆どが実現できています。

まず、「Range」プロパティについて
  • オブジェクト.Range(セル指定)
    又は
    オブジェクト.Range(セルの先頭,セルの終端)

具体的には、





「Cells」プロパティ
  • オブジェクト.Cells(行番号,列番号)
や、選択しているセルを参照する「Selection」と「ActiveCell」プロパティ
  • オブジェクト.Selection
  • オブジェクト.ActiveCell
も実現されています。

更には、セルの選択をする「Select」メソッド、セルをアクティブにする「Activate」メソッドも使えます。
しかし、「Goto」メソッドは実現されていません。



便利にセルの参照ができる「CurrentRegion」、「Offset」、「End」、「Resize」などの各プロパティを初め、「SpecialCells」メソッドも実現できています。

当然ですが、「SpecialCells」メソッドはZoho Sheetで実現できている機能の範囲です。

具体的には、
  • xlCellTypeBlanks
  • xlCellTypeComments
  • xlCellTypeConstants
  • xlCellTypeFormulas


「Resize」プロパティを使うと、表の行見出しや列見出しに色などの書式設定によって表の体裁が整えられますので、必要な範囲は十分実現できていると思われます。



また、「Union」、「Intersect」の各メソッドは実現できていません。
尚、Zoho Sheetで結合セルの実現が横方向だけ(?・・・のようです)で、「MergeArea」プロパティの動作が確認できていません。

posted by 鎌倉太郎 at 19:10| ☔| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月16日

Zoho Sheetマクロ機能の「ワークシート操作」について


Zoho Sheetマクロ機能の「ワークシートの操作」には、追加・削除・移動・コピーなどの基本的な操作がありますが、いずれも実行できます。具体的には、

  1. ワークシートの追加
    WorkSheetsコレクション.Add(Before:=ワークシート,After:=ワークシート,Count:=追加数)

  2. ワークシートの削除
    WorkSheetオブジェクト.Delete

  3. ワークシートの移動
    オブジェクト.Move(Before:=ワークシート,After:=ワークシート)
    ここでオブジェクトは、WorkSheetsコレクション、Sheetsコレクション、またはWorkSheetオブジェクト。

  4. ワークシートのコピー
    オブジェクト.Copy(Before:=ワークシート,After:=ワークシート)
    ここでオブジェクトは、WorkSheetsコレクション、Sheetsコレクション、またはWorkSheetオブジェクト。
よくワークシートの削除で、ダイアログボックスによる確認が行われますが、現状はMsgBoxが表示のみの為にできません。
Application.DisplayAlerts = True/False
も無視されますので、アップロードしたMS-Excelマクロとの互換上は問題ありません(というか、操作上の影響は小さい)。



ワークシートの参照として、
  • WorkSheets(インデックス).Select
  • WorkSheets(インデックス).Select Replace:=True/False
  • ActiveSheet
などが使えます。「WorkSheets(インデックス).Select」と「WorkSheets(インデックス).Select Replace:=False」を組合せて複数のシートを選択し、
  • WorkSheetオブジェクト.Activate
で特定のワークシートをアクティブにできます。



しかし、MS-Excelでは可能な複数のシートを一度に選択する事は現状できません。例:
WorkSheets(Array(1,2)).Select

選択している複数のシートに対して、削除やコピーなどの処理をする時にMS-Excelで使う、
SelectedSheets
も現状は利用できません。

いずれも個々のワークシートに操作する必要があります。




ワークシート名の変更やワークシートの枚数カウントはできます。
・WorkSheetオブジェクト.name=設定値
・WorkSheetsコレクション.Count


しかし、シート見出しの色変更はできません。(現状、Tabが未サポート)



「制御構造」の一つである「For Each オブジェクト変数 IN コレクション」は、WorkSheetsコレクションにも使えますので、同じワークシート名があるかを確認するのに便利です。
例:
Sub CheckSameName()
    Dim CheckSheet As Worksheet
    For Each CheckSheet In Worksheets
        If CheckSheet.Name = "太郎" Then
            MsgBox "「太郎」と同名シートがあります"
            Exit Sub
        End If
    Next
End Sub



尚、WorkBooksにおけるOpenメソッドなどが現状で未サポートであり、別ブックに対するシートの移動・コピーなどの操作はできません。



注意:上記は2008年8月16日時点で、簡単な構文により確認した範囲で記述しています。
尚、できていない事を強調してZoho Sheetマクロ機能を否定する意味ではない事をご理解ください。



posted by 鎌倉太郎 at 17:08| ☁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月11日

Zoho Sheetマクロ機能の「制御構造」について


MS-Excel VBAの制御構造として多くの構文がありますが、Zoho Sheetマクロ機能では全て実現できています。

具体的には、

  1. 1つの条件で実行
    If 条件式 Then 処理
    又は
    If 条件式 Then
      処理
    End If

  2. 1つの条件で振り分け実行
    If 条件式 Then 処理1 Else 処理2
    又は
    If 条件式 Then
      処理1
    Else
      処理2
    End If

  3. 複数条件で振り分け実行
    If 条件式1 Then
      処理1
    ElseIf 条件式2 Then
      処理2
    ElseIf 条件式3 Then
      処理3
       ・・・・・・
    Else
      処理4
    End If

  4. 1つの対象条件で振り分け実行
    Select Case 条件判断の対象
    Case 条件式1
      処理1
    Case 条件式2
      処理2
       ・・・・・・
    Case Else
      処理3
    End Select

  5. 条件を満たす間は繰り返し実行
    Do While 条件式
      処理
    Loop

  6. 条件を満たさない間は繰り返し実行
    Do Until 条件式
      処理
    Loop

  7. 少なくとも1回は処理を実行
    Do
      処理
    Loop While 条件式
    又は
    Do
      処理
    Loop Until 条件式

  8. 指定回数の繰り返し実行
    Dim カウンタ変数
    For カウンタ変数 = 初期値 To 最終値 (Step 加算値)
      処理
    Next(カウンタ変数)

  9. 同型オブジェクトに実行
    Dim オブジェクト変数
    For Each オブジェクト変数 IN コレクション
      処理
    Next(オブジェクト変数)

  10. 繰り返し処理のネスト



但し、これらは全て単純な構文で確認しただけです【2008年8月9日現在】。

テーブル(リスト)やマトリックス内のセルを繰り返し実行するのに、参照したいセルを条件式や処理でダイナミックに変更したい場合に、ActiveSheetに対してMS-Excel VBAでは、

    Dim i As Integer, j As Integer
    For i = 3 To 7
        For j = 2 To 6
        Cells(i, j).Value = Cells(i, 1).Value + Cells(2, j).Value
        Next j
    Next i

という表現が許容されるのに対して、オブジェクトを明確に記述する必要があります。

    Dim i As Integer, j As Integer
    For i = 3 To 7
        For j = 2 To 6
        ActiveSheet.Cells(i, j).Value  _
           = ActiveSheet.Cells(i, 1).Value + ActiveSheet.Cells(2, j).Value
        Next j
    Next i

とする必要があります【2008年8月11日現在】。


posted by 鎌倉太郎 at 12:26| 🌁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月09日

Zoho Sheetマクロ機能の全般的な実現範囲について

Zoho Sheetでマクロ機能が実現されています。オンライン表計算としては現状で唯一のサービスとの事で、MS-Excelと同等レベルを実現しようとしてるようです。


前回の投稿「Zoho Sheetに『マクロの記録』機能が追加【2008年08月08日】」でも書いたとおり、Zoho Sheetマクロの実現できている範囲は順次拡大しているといえども、全てが実現できている訳でもない(そして、完全な互換性要請は必要ない)段階です。特に、実現されているプロパティ、メソッドでも、MS-Excel VBAと比べて部分機能に留まっている場合もあります。


しかし、もう既に活用できるケースの範囲も広いのです。


そこで実現できている(できていない)範囲を知った上で、Zoho Sheetの活用を考えていく必要があります。


今回は、マクロ機能の全般的な範囲で実現できていない(事を確認した)機能を、MS-Excel VBAと対比させながら確認をします。
クドクお断りしますが、できていない事を強調してZoho Sheetマクロ機能を否定する意味ではない事をご理解ください。

【以下の指摘は2008年8月8日時点です】
  1. インポート機能で、MS-Excel 2007からサポートされる新形式xlsmには対応していません。
  2. 変数名、プロシージャ名に漢字コードは使えません。文字列定数やコメントの中での日本語コードは使えます。
  3. 制御構造の「Do  ・・・・・ Loop While 条件」は使えません。「Do While 条件 ・・・・・ Loop 」は使えます。
  4. ユーザ・フォーム及びそれに伴うイベントプロシージャは利用できません。
  5. InputBoxは、未だサポートできておらず、MsgBoxも「メッセージ出力のみ」が実現できています。



これらを見ると、インタラクティブな操作に未だ向いていない事がわかります。

今後はプロパティ、メソッドレベルで確認していきます。



【追記:2008/8/9】制御構造「Do  ・・・・・ Loop While 条件」について


posted by 鎌倉太郎 at 03:30| ☁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする

2008年08月08日

Zoho Sheetに「マクロの記録」機能が追加


オンデマンドサービスの表計算機能 Zoho Sheetに、「マクロの記録」機能が追加されました。

Zoho Sheetについては、以前の投稿「Zohoオンデマンドサービスの表計算機能の試行(1)【2007年11月19日】」で紹介しました。



その後、MS-Excelと同様に「マクロ機能」が追加されました(併せて、ピボットテーブル機能も!)。
Zohoブログ(5月29日)「Zoho Sheet の新機能:マクロ、ピボットテーブルなど





マクロの実現範囲などを調べていくうちに、「マクロの記録」機能も実現されました。MS-Excelのマクロ(VBA)を始める時には、まず「マクロの記録」で実際に生成されるマクロ・コードを見る事が多いと思いますので、今後マクロの作成がし易くなります。
Zohoブログ(8月8日)「Zoho Sheet の新機能 : マクロの記録と実行、豊富なテンプレート




但し、記録が取得できる範囲に制限があります。ここを参照。


Zoho Sheetに対しては、マクロ(VBA)を含めてMS-Excel並みを目指しているようで、現状としてかなりのMS-Excel対応(VBA)に対応しています。ここを参照。



しかし、一つの例として、メッセージ用のMsgBoxを取ってみると、その一部機能である「メッセージ出力のみ」が実現されています。今後、Zohoマクロ機能として実現できている範囲を確認していこうと思っています。
勿論、Zoho Sheetは、MS-Excelと全く同じマクロ機能を持つ(互換性の要請)必要はなく、徐々に実現範囲を広げていく訳ですから、確認をした時点での状況と理解したい。



posted by 鎌倉太郎 at 17:46| ☁| Comment(0) | TrackBack(0) | 体験利用-Zoho Sheetマクロ | 更新情報をチェックする