[Mac][Excel] 数式を値に、値を数式に変換する (イコールを取ったり、つけたりする) マクロ Excel for Mac

USBにあるエクセルファイルのデータを参照して、PCにあるエクセルファイルで作業する機会があった。というのは、USBのエクセルファイルには、自分のPCに置いておきたくないような情報が入っていたので、そのファイルをPCに移してしまうことはせずに、PCのエクセルファイルからデータを読み出し、そのPC上のエクセルファイルで作業を進めたのだ。

イメージとしてはこのような感じ:

エクセルファイル2 をPCにコピーしたくなかったので、エクセルファイル1 で参照して作業

もうすこし具体的には、エクセルファイル1 (PC上のファイル) で

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
という数式を入力して、PC上でUSB内のエクセルデータの値を参照していた。

想定としては、USBを抜いてしまえば、PCのファイルからは参照されたデータが見えなくなってしまうと思っていたのだが、そうでもなさそう。エクセルファイル1 を開いた際に、リンクを更新しなければ、エクセルファイル2 のデータが見えてしまう (ようだ)。

"更新しない" をクリックすると、USBのデータが見えてしまう (みたい)

USBのデータがPCから見えてしまうのを避けたい。ということで、解決策として、上記の数式を値にしてしまうマクロ、つまりイコールを取ってしまうマクロを書いてみた。イコールを取られた値に対して実行すると、またイコールが付与された数式になります。次のようなイメージ:

='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
↓↑
'/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地

Sub mySecure() '数式を値に、値を数式に変換
Dim mycell As Range
Dim mystring As String
For Each mycell In Selection
If mycell.Value <> "" Then '空欄のセルには操作を加えない
'数式であればイコール(=)をとる
If mycell.HasFormula Then '.HasFormula は数式であれば True を返す
mystring = mycell.Formula
mycell.Value = Right(mystring, Len(mystring) - 1)
'数式でなければイコール(=)を加える
ElseIf Not mycell.HasFormula Then
If Left(mycell.Value, 8) = "/Volumes" Then
mycell.Formula = "='" & mycell.Value 'single quotation mark
Else
mycell.Formula = "=" & mycell.Value
End If
End If
End If
Next mycell
End Sub
view raw mySecure.xlsm hosted with ❤ by GitHub

*変換したい範囲を選択してから実行します。

0 件のコメント:

コメントを投稿

[Car] クイック板金(2回目)

車のバンパーを擦ってしまった。。。ということで、 イエローハットのクイック板金 にお願いしていました。別の店舗に持って行っての作業ということで数日かかりましたが、無事に車が帰ってきました。結果、とても綺麗に直してもらい、非常に満足しています。板金をしたと言われても、素人目にはわか...