14
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BoxAdvent Calendar 2023

Day 9

Box EditでもExcelマクロは使えるか?

Last updated at Posted at 2023-12-08

はじめに

Box Edit とは、Boxに格納されているOffice文書をofficeデスクトップアプリケーションで開ける機能です。

Boxに関わらず、通常、ExcelマクロはOffice Onlineでは実行できません。
そのことから、BoxとExcelマクロの関係について、
 「ファイルサーバからBoxに移行したらExcelマクロは使えなくなる」
 「ExcelマクロはBox Driveでしか使用できない」
のようなイメージを持っている人も多いのではないでしょうか?

今回は、Box Edit を使用して Excelマクロ が動作する であろうケースについて、いくつか実際に検証してみました。

結果

結果はこうなりました。
image.png

1つ目は、1ブック内でマクロが完結しているケース

このケースは、以下の動画の通り、問題なく動作しました。

<検証動画>

この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. そのファイル内に予め作成しておいたマクロでフォームを開く
3. 範囲を選択して、書式設定用のマクロが関連付けられたボタンをクリック
4. 予め設定された条件(Deploy<80, Active<50)に従って、書式設定(赤字網掛け)される

使用したコードは以下の通り。

Private Sub Format_Active_Click()
'
' Deploy率が80%以下を赤くする
'
    Selection.FormatConditions.Add _
        Type:=xlCellValue, _
        Operator:=xlLess, _
        Formula1:="=50"
        
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

Private Sub Format_Deploy_Click()
'
' Deploy率が80%以下を赤くする
'
    Selection.FormatConditions.Add _
        Type:=xlCellValue, _
        Operator:=xlLess, _
        Formula1:="=80"
        
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

2つ目は、外部のテキストファイルを読み込むケース

このケースも、マクロから参照するファイル(データファイルなど)が絶対パス参照出来る環境(PC上などのBox外)にあれば動作しました。
一方で、Box内にあるファイルはUNCを含めたパス指定が出来ないため、Box Editから参照することはできませんでした。

<検証動画>

この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. 絶対パス参照出来る位置にデータファイルを置く(C:\ExcelVBA\data2.txt)
3. 外部ファイル参照用のマクロを実行
4. データファイル内の文字列を読み込んで表示される

使用したコードは以下の通り。

Sub 外部ファイル参照_絶対()
    Dim n As Integer, i As Integer, txtLine As String
    
    If Dir("C:\ExcelVBA\data2.txt") = "" Then
        MsgBox "ファイルが存在しません"
        Exit Sub
    End If
    
    n = FreeFile
    Open "C:\ExcelVBA\data2.txt" For Input As #n
    
    Do While Not EOF(n)
        i = i + 1
        Line Input #n, txtLine
        MsgBox txtLine
    Loop
    Close #n
End Sub

3つ目は、Boxに格納された複数のExcel間でデータをやり取りするケース

このケースも、関連するExcelブックを予め開いておけば、問題なく動作しました。
一方で、マクロ内で参照するBox内のファイルに直接アクセスすることは出来ないため、ファイルを開いている状態で作業する必要があります。

<検証動画>

この検証では、次のことを行っています。
1. Box内に保存されているExcel(マクロ有効化ファイル)をBox Editで開く
2. Box内に保存されているExcel(通常のファイル)をBox Editで開く(データファイル)
3. Active Book 間のデータ転送用マクロを実行
4. 片方のExcelからデータが読み込まれて、もう片方のExcelへ書き込まれる

使用したコードは以下の通り。

Sub Box内のExcelファイル間データ転送()

    For i = 1 To 10
        ActiveCell.Value = Workbooks("データ.xlsx").Worksheets("データ").Cells(i + 1, 2)
        ActiveCell.Offset(1, 0).Select
    Next i

End Sub

まとめ

BoxとExcelマクロは相性が悪いと思われがちですが、実はマクロの作り方次第で、多くのユースケースがBox Editでも実行可能であることが分かりました。
WebアプリケーションからのExcelマクロ活用の一助になれば幸いです。

14
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?