他のファイルを参照し変数に代入しましたが
参照式まで代入されてしまいますが、これを回避したいです。
='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1
理由としては、参照先を知られたくないためです。

Dim A(9) As Variant
A(0) = Path & "!$A$1" 'ここの部分の書き方を教えてください。
.Range("B1").Value = A(0)

変数は入力ミスをした場合に元に戻すために使います。

A 回答 (6件)

マクロの前後にApplication.ScreenUpdatingを入れれば表示の更新止めれるので


ステータスバーにも数式バーにもばれたくないものは出ませんが。
これではだめなんですかね?

Private Sub Test()
Application.ScreenUpdating = False  'Screenの動作を止める

・・・・・・・
・・・・・・・

Application.ScreenUpdating = True  'Screenの動作を戻す
End Sub
    • good
    • 0

ちなみに数式バーに式が表示されなくてもメニューの編集→リンクの設定でどのファイルにリンクしてるのかが分かりますから「参照先を知られたくない」という条件はクリアできません。



またCSVを参照している場合には、起動時にデータの更新をする旨選択すると、更新が出来ないと表示されて参照先を開くことが出来ますので、結局参照先は知られてしまいます。
    • good
    • 0

参照式が見える見えない以前に


>='C:\フォルダ名\[ファイル名.csv]シート名'!$A$1

マクロでこの式をただセルに放り込んでも,肝心のCSVの値を引っ張ってこさせる事は出来ません。
そのやり口で値を取ってこさせるためには,原則として「事前に」目的のCSVを「開いておく」必要があります。


で,どうせCSVを事前に開くのなら,わざわざ参照式形式にしないで,開いたCSVの所定の値を直接読み取って「変数」に代入してしまえばおわりです。
そのための「CSVを開く方法(CSVから値を読み出す方法)」は,回答1などで寄せられているアドバイスのURLも大変役に立ちますし,また
application.screenupdating = false
workbooks.open filename:="c:\test\test.csv"
a(0) = workbooks("test.csv").worksheets(1).range("A1").value
workbooks("test.csv").close savechanges:=false
application.screenupdating = true
などのようにふつーに操作するのも簡単な方法です。
    • good
    • 0

変数 Path に ='C:\フォルダ名\[ファイル名.csv]シート名' を入れたいって事でしょうか



> 理由としては、参照先を知られたくないためです

どの時点で知られたくないのか分かりませんが
どちらにしても参照先が分からないような参照は出来ないと思いますが…

あと、セルに式を入れるのでしたら
Range("B1").Formula = A(0)
がよろしいと思われます。
    • good
    • 0

数式を隠したのならば、VBAで行わなくても次の方法は如何でしょうか。


(1)該当セルを選択→セルの書式設定→保護タブ→表示しないを選択、シート保護
(2)エクセルのグレードが不明ですので「シート保護」操作はキーワードで検索して下さい。
    • good
    • 0

やりたいことってこんなこと?



http://www.moug.net/tech/exvba/0060086.htm

ちょっと文章じゃイメージがわかないのですが。。??

この回答への補足

エクセルの数式バーに参照式が表示されてしまいます。
これは、必要ないので変数に代入しないで参照先にあるセルに表示されているデータのみを変数に代入したいのです。
質問の仕方が下手でした。ごめんなさい。

補足日時:2011/04/17 20:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル(マクロ記録)

よろしくお願いします。
エクセルで、印刷マクロを作ろうと考えています。
             (基本、入門者です)
マクロ記録で、作っていますが、
記録終了するたびに「 印刷 」がかかっては、
用紙が何枚あっても足りません。

いい考えがありましたら、お教えください。
お願いします。

Aベストアンサー

#3の回答者です。

>出来たら、この i=1 の意味を教えていただけませんでしょうか?
単に、それはページ数です。

ヘルプを引用します。(PrintOut で調べました)

式.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

From オプション 印刷を開始するページの番号を指定します。この引数を省略すると、最初のページから印刷します。
To オプション 印刷を終了するページの番号を指定します。この引数を省略すると、最後のページまで印刷します。

と出てきます。

Qexcel INDIRECT 他ファイル参照

INDIRECTの関数を使って,他のエクセルファイル(以下Bファイル)を参照すると,
Bファイルを開いているときは正しく数値を表示しますが,
Bファイルを閉じるとエラー表示になります。

回避する方法は無いでしょうか?

(元ファイルと,Bファイルの両方から参照先に関する情報を得ているので,INDIRECT関数は,必須かと思っています)

参考までに3種類試したソースを示します。
できれば3は避けたいと考えています。
ご意見よろしくお願いします。


1:=INDIRECT("'[★★★Bファイル.xlsx]"&$A27&"'!o$7")
エラー表示になります。

2:=INDIRECT("'"&MID(CELL("filename",$A$1),1,FIND("[",CELL("filename",$A$1))-1)&"[★★★Bファイル.xlsx]"&$A26&"'!o$7")
エラー表示になります。(パスまで含めて参照)

3:='C:\Users\test\[★★★Bファイル.xlsx]213旅費'!O$7
正常(常に数値を表示します)

Aベストアンサー

>回避する方法は無いでしょうか?
INDIRECT関数を使っている限り、回避できません。

外部データの取り込み機能で一時的にデータをすべて持ってくれば、同一ブック内になるので参照できます。
(閉じるときに取り込んだデータを破棄できます)
手間が状況に左右されるので、マクロで3のようにしてしまう方が簡単かもしれません。

Qエクセル マクロコードの記述の勉強

独学でエクセルでのマクロのコード記述ができるようになりたいのですが、コードがかける人はどのようにしてかけるようになったのでしょうか?

プログラミング関係にはまったくの初心者なので、入門本を立ち読み程度読んでみたのですが、「面白そうだが、かなり手強そう」というような印象でした。

現実的な問題として、実際にコードをかける人は、プログラミング関係の学校等で学んだ人ぐらいしかいないのでしょうか?

めざすレベルはエクセルでこうしたいと考えたものを調べながらコードをかける程度のレベルです。

Aベストアンサー

> 実際にコードをかける人は、プログラミング関係の
> 学校等で学んだ人ぐらいしかいないのでしょうか?

そんな事ないです。私も独学で覚えましたから。

エクセルはマクロ記録がありますので、実際の操作を記録して書かれたコードを追っていったり、書き直したり出来ます。
VisualBasicEditor画面でコードにカーソルを置き、F1キーを押すとVBAヘルプ(たしか標準ではインストールされないので追加インストールの必要がある)が開くので、意味を調べたり、サンプルコードを見たりして覚えて行きました。
ネットにも沢山サンプルがありますし。

変数の使い方とforやif等を覚えてマクロ記録を直すだけでも結構便利になります。

Q他のブックファイルのセルの参照が上手く行きません

こんにちはよろしくお願いいたします。
エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。

しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となっています。式は,キーボードを使って変更しました。もちろん,(Book3.xls)は,(Book2.xls)と同様のシート形式をもち,データも入力されています。

このような状態になると,先に挙げたように,”=”を入力して参照するブックファイル(Book3.xls)のセルをクリックしても,ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という式そのものが表示された状態となったままで,(Book3.xls)のデータは表示されません。
(Book2.xls)と(Book3.xls)のセルのデータは,文字列です。

気になるのは,(Book1.xlsx)はoffice2010で作成されたファイルであること,(Book2.xls)と(Book3.xls)は,互換モードと表示されるファイルであること,また表示されているファイルを見ると,フルパスで参照している点です。「 ='C:\aaa\bbb\・・・・・[Book3]Sheet1'!$A$1 」という参照式になっています。3つのファイルはすべて同一ファイルに入っています。

何が,参照を阻んでいるのでしょうか?教えてください。よろしくお願いします。

こんにちはよろしくお願いいたします。
エクセルのブックファイル(Book1.xlsx)に,他のブックファイル(Book2.xls)のセルの値を参照しようと思い”=”を入力し参照するブックファイルのセルをクリックし,「 =[Book2]Sheet1!$A$1 」のような参照を行いました。こうしてきちんと表示されました。

しかし,この参照の式を「 =[Book3]Sheet1!$A$1 」のように,他のブックファイル(Book3.xls)のセルに変更したところ,参照できなくなりました。ブックファイル(Book1.xlsx)には,「 =[Book3]Sheet1!$A$1 」という...続きを読む

Aベストアンサー

式が文字列で表示されてしまったセルの書式設定が,文字列の設定になっています。
セルを右クリックして書式設定から表示形式の中で,とりあえず標準に戻してから改めて数式のを開始し,そのままEnterしてください。

Qエクセルについているマクロが出てこない・・・

 エクセルをひらき、ツール→マクロ→マクロでマクロの作成ができると聞きましたが、私のエクセル2002ではマクロのその機能が空欄状態です。復帰や回復できる方法を教えて下さい。

Aベストアンサー

(1)自分でマクロの記録を採る。
    ツールーマクロー新しいマクロの記録
(2)または他人がマクロの記録をとった。
   (3)他人がVBAコード(プログラム)を組んだ
    ツールーマクローVBEープログラム作成
場合に出てくる。(1)(2)(3)ともやっていないから、出てこないのは当然。
(1)なぞはマクロの画面でマクロー編集でコードが見れます。
ーーー
本でもWEBでも、マクロに関する本1冊か、「エクセル マクロ」でWEB照会して、勉強し。予備知識をえるべきです。

QEXCELでセル参照の際に、参照元セルの色を参照先セルの色を反映させたい。

はじめて質問します。宜しくお願いします。
現在の手書き伝票をEXCELで再現・作成したいと考えております。
手書き伝票は、複写式で合計4枚になります。
経費削減のため、SHEET1の1枚入力欄に記入すると、
SHEET2に入力内容が反映され、印刷ではA3用紙1枚が出力され、
印刷したものをカッターで4分割して4枚として使用したいです。

現在は、会社名や住所、電話番号の変更があった際は、伝票横の余白に「⚪︎⚪︎変更あり」と
かいておりますが、文字が見にくくなったり、見落としたりする可能性があります。
EXCELでは変更のあったセルをわかりやすくしたいのです。
ただし、カラーは使用せず、白黒のみとしたいので、
「太字・斜体・変更したセルを薄いグレーの網かけにする」を考えています。

しかし、セルの参照では、参照元セルの文字だけが参照先セルに入力され、
参照元の書式が反映されなくて困っています。

そこで、皆様のお知恵をお借りしたいのですが、
EXCELのVBAはわかりませんので、できるだけ簡単なものでできると助かります。
VBAが必要でしたら、勉強しますので、できるだけわかりやすくお願いします。

最後に、上記のような伝票を作成する上での注意点などがありましたら、
あわせてアドバイス頂けますと大変嬉しいです。

何卒、宜しくお願いいたします。

はじめて質問します。宜しくお願いします。
現在の手書き伝票をEXCELで再現・作成したいと考えております。
手書き伝票は、複写式で合計4枚になります。
経費削減のため、SHEET1の1枚入力欄に記入すると、
SHEET2に入力内容が反映され、印刷ではA3用紙1枚が出力され、
印刷したものをカッターで4分割して4枚として使用したいです。

現在は、会社名や住所、電話番号の変更があった際は、伝票横の余白に「⚪︎⚪︎変更あり」と
かいておりますが、文字が見にくくなったり、見落としたりする可能性があり...続きを読む

Aベストアンサー

一案です。
一枚分の入力の作業が終わったら
一枚部分の範囲を選択、コピー
A3全体を選択
張り付け、形式を選択して貼り付け
書式にチェックを入れて OK

これで良ければマクロの記録で
VBA化してみてください。

Qエクセル2010で作成したマクロ

エクセル2010で作成したマクロブックがあります。
このエクセルを知人にメールで送りました。

知人のエクセルは2007です。
マクロブックのフォームボタンを押しても何も動作しない状況との事です。

エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

素人の質問で申し訳ありませんが、ご指導お願いいたします。

Aベストアンサー

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイルの形式をマクロ有効ブックにして保存したのを送ったか再確認する
といったところをよく確認してください


先方に対してあなたが確認すべきポイントとしては、
○「何も起こらない」とは、具体的にどんな状況なのか再確認する
 ・ホントにうんともすんとも反応が無いということなのか
 ・実は何かエラーメッセージっぽいダイアログが現れて、OKをクリックしてもマクロが動作した様子が無いとかの状況では無かったか



具体的な状況が明らかになったら、ようやく対処を検討する事ができるようになります。
●そもそもどういうマクロを作成したのか、ご自分の作成したマクロをよく確認して、「反応が現れない」マクロを書いてたんじゃないのか再確認する
 たとえば無意味にon error resume nextのような仕込みをしてたりしないか
 たとえば不適切なデータに対して何も作動せずに終わってしまうようなそもそも作りにしてたんじゃないか
 とか。

●実は何かダイアログが出てたのなら、具体的にどんなダイアログなのか正確に聞き取って、あなたの方で対処を考える
 「マクロが無効になってる」のなら、マクロを有効にして実行するように伝える
 とか。

>エクセル2010で作成したマクロブックはエクセル2007と互換性がないのでしょうか?

ご相談の状況からすると、まずそういう事はありません。
まぁ2010でしか動かない内容であなたがマクロを作成した可能性は確かにありますが、その場合でも「何も動作しない」という事はありません。ふつーにエラーが出て止まります。



一応あなたの側で確認しておくべきポイントとしては、
○間違ったブックを送っていないか再確認する
 ・ちゃんとマクロを付けたブックを送ったか確認する
 ・名前を付けて保存でファイル...続きを読む

Q変数を使ってセルの参照

初歩的な質問ですいません。
セルの参照で
   A     B   C
1  あ     い
2  う     え


='D:\A¥B\[B1.xlsx]Sheet1'!合計

のフォルダBとファイルB1を変数にして
C1に
='D:\A¥あ\[い.xlsx]Sheet1'!合計

C2に
='D:\A¥う\[え.xlsx]Sheet1'!合計
としたいのですが、

その場合どう表記すればいいのですか?
INDIRCT関数の場合も教えていただければありがたいです。

Aベストアンサー

こんばんは。

作成例:
sub macro1()
 dim b as string
 dim b1 as string
 b = range("A1").value
 b1 = range("B1").value
 range("C1").formula = "='D:\A\" & b & "\[" & b1 & ".xlsx]Sheet1'!合計"
end sub

作成例:応用
sub macro2()
 range("C2").formula = "='D:\A\" & range("A2").value & "\[" & range("B2").value & ".xlsx]Sheet1'!合計"
’以下オプション
’range("C2").value = range("C2").value
end sub

作成例:INDIRECT関数を使う場合
sub macro3()
 dim myPath as string
 dim myFile as string
 dim w as workbook
 mypath = "D:\A\" & range("A1").value & "\"
 myfile = range("B1").value & ".xlsx"
 set w = activeworkbook
 workbooks.open mypath & myfile
 w.select
 range("C1").formula = "=INDIRECT([" & myfile & "]Sheet1!合計)"
 workbooks(myfile).close false
end sub



#補足
INDIRECT関数では、「閉じたブック」への参照を可変にすることは「できません」。

こんばんは。

作成例:
sub macro1()
 dim b as string
 dim b1 as string
 b = range("A1").value
 b1 = range("B1").value
 range("C1").formula = "='D:\A\" & b & "\[" & b1 & ".xlsx]Sheet1'!合計"
end sub

作成例:応用
sub macro2()
 range("C2").formula = "='D:\A\" & range("A2").value & "\[" & range("B2").value & ".xlsx]Sheet1'!合計"
’以下オプション
’range("C2").value = range("C2").value
end sub

作成例:INDIRECT関数を使う場合
sub macro3()
 dim myPath as string
 dim myFile...続きを読む

Qエクセルで作成したマクロが他のシートに反映しない

必要に迫られ始めてマクロをエクセル上で作成してみました。(初心者)
そのマクロを違うエクセルファイル上でも反映させたいのですが
マクロを作ったおおもと(最初)のファイルを閉じてしまうと違うエクセルファイルを開いてもマクロが反映されていません。
マクロでの命令内容としては 
エクセル上の数字の羅列→グラフ作成→上書き保存 という手順で作りました。
他のエクセルファイルも同じように数字の羅列があります。それを同じ作業(グラフ作成→上書き保存)したいのです。
一度作ったマクロを他のエクセルファイルにも反映させるにはどうしたら良いのでしょうか?
説明がわかりにくくてすみません。
よろしくお願いします。

Aベストアンサー

マクロの記録先を「個人用マクロブック」にするのが良いと思います。
一回マクロの記録を行い「保存先」を「個人用マクロブック」にします。するとPERSONAL.XLSという特別なブックが作成されます。

このブックの標準モジュールシートに先に作ったマクロを貼り付けてください。

そうすればエクセルを開くと、どのブックでもマクロが実行可能になります

Q別のSubで宣言されている変数を別のSubで参照

よろしくお願いいたします。

環境:Excel2003

以下のようなイメージで別Sub内で宣言された変数を同じ変数名で別のSub内で参照したいです。

Sub hoge()
nn As Integer
nn = 1
End Sub

Sub hogehoge()
MsgBox (nn)
End Sub

Sub hogehogehoge()
Call hoge
Call hogehoge
End Sub

エラーが発生する為、typeについて検索をかけてみました所、以下のような変数参照方法は出てきましたが、別のSubで宣言されている変数を同じ変数名で別のSub内で参照する方法はないでしょうか?

Type PData
   hoge As String
   hogehoge As Long
End Type

Sub Sample1()
   Dim Pppp(5) As PData
End Sub

よろしくお願いいたします。

Aベストアンサー

初めのうちはグローバル変数を使う方法でもいいのですが、
慣れてきたらグローバル変数ではなく、
HogeHogeに引数を持たせる方法を使った方がいいでしょう。
なぜ?
それは慣れてくれば分かってきます。

'-----HogeHogeを引数付きでコールする------

Sub Hoge()
  Dim nn As Integer
  nn = 1
  Call HogeHoge( nn )
End Sub

'-----これに引数を持たせる-------

Sub HogeHoge( nn As Integer)
  MsgBox nn
End Sub

'------Hogeだけをコールする-----

Sub HogeHogeHoge()
  Call Hoge
End Sub

'--------------------------------

以上ここまで。
 


人気Q&Aランキング

おすすめ情報