USBにあるエクセルファイルのデータを参照して、PCにあるエクセルファイルで作業する機会があった。というのは、USBのエクセルファイルには、自分のPCに置いておきたくないような情報が入っていたので、そのファイルをPCに移してしまうことはせずに、PCのエクセルファイルからデータを読み出し、そのPC上のエクセルファイルで作業を進めたのだ。
イメージとしてはこのような感じ:
もうすこし具体的には、エクセルファイル1 (PC上のファイル) で
='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地という数式を入力して、PC上でUSB内のエクセルデータの値を参照していた。
想定としては、USBを抜いてしまえば、PCのファイルからは参照されたデータが見えなくなってしまうと思っていたのだが、そうでもなさそう。エクセルファイル1 を開いた際に、リンクを更新しなければ、エクセルファイル2 のデータが見えてしまう (ようだ)。
USBのデータがPCから見えてしまうのを避けたい。ということで、解決策として、上記の数式を値にしてしまうマクロ、つまりイコールを取ってしまうマクロを書いてみた。イコールを取られた値に対して実行すると、またイコールが付与された数式になります。次のようなイメージ:
='/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
↓↑'/Volumes/USB名/.../[エクセルファイル2.xlsx]シート名'セル番地
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
*変換したい範囲を選択してから実行します。
0 件のコメント:
コメントを投稿