エクセルでBookを開かずにセルを参照する方法

このQ&Aのポイント
  • エクセルでBookを開かずにセルを参照する方法を教えてください。
  • 定型の帳票に複数のファイルパスをコピーして、そのファイルのシートのセル内容を参照する方法を教えてください。
  • セルを参照するためにINDIRECT関数を使用していますが、ファイルを開くために10枚のBookを開く必要があります。効率的な方法を教えてください。
回答を見る
  • ベストアンサー

エクセルでBookを開かずにセルを参照する(再)

昨日同じ内容で質問させていただいたのですが、添付図を付けることに思い至らずお手数をおかけしたので出直し質問です。 添付の図で製品毎の送付先連絡票という定型の帳票があり、毎日フォルダに追加されます。 この複数の帳票のフルパスを下の図の「送付先リスト」のB列にC&Pしたら、その製品のC列から行方向に帳票のシートのセル内容を参照するようにしたいのです。 このリストは新しいファイル(フルパス)が下にどんどん追加されます。 帳票(参照元)は同じ名前のシート1枚で、セルはA3、B5・・・と決まったセルです。 これが出来れば種々の定型帳票のリスト化に非常に有用なので宜しくお願いします。 開いたファイルのセル参照はINDIRECT関数で何とか出来ていますが10枚のBookを開いて、リストにフォルダのフルパスをC&Pして¥で区切り位置を使用して・・・でソロソロ限界ですので何卒HELPお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.11

以下が、シートモジュールに配置するコード 'このコードは、値を取得するシートモジュールに配置 Private Sub Worksheet_Change(ByVal Target As Range)    Dim tgCell As Range  Dim ColCnt As Long    For Each tgCell In Target   If ((tgCell.Column = SCol - 1) And (tgCell.Row >= SRow)) Then    ColCnt = SCol    Do     If Cells(SRow - 1, ColCnt).Value = "" Then Exit Do     Cells(tgCell.Row, ColCnt).Value = _     GetWsDate(Cells(tgCell.Row, SCol - 1).Value, _       ShName, Cells(SRow - 1, ColCnt).Value)     ColCnt = ColCnt + 1    Loop   End If  Next tgCell End Sub

akira0723
質問者

お礼

今回も何度も長コードをご回答いただき本当に感謝です! 繰り返しになりますがこれは、本当にVBAだと思いますので、有効に活用させていただきます。 最後に重ね重ねありがとうございました。

akira0723
質問者

補足

このVBAは本当に種々のデータ集計に展開できると思い始めワクワクで、早出して朝一で動作確認してみました。 結果、昨夜の動作(期待通り)を再現しました。 おまけに取説付きなので変更箇所が分かり易いのでマニュアル化し易いのも助かります。 更に想定エラー対応も贅を尽くした作りになっているのも感激です!! 尚、最初の補足質問でC3セルの >=IFERROR(IF(B3<>"",GetWsDate($B3,"Sheet1",C$2),""),"") >「意味は理解できます」と言ってしまいましたが、 意味は分かるが「意図」が理解できていなかったことを恥ずかしく思います。

その他の回答 (10)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.10

>毎回B列の上から再度取得するので、 >100個位パスを埋めてみたらかなり時間がかかります。 今更ですが、これらが想定されたので、 https://okwave.jp/qa/q9797142.html で =GetWsDate(C3,D3,E3) といった関数をセルに埋める解を紹介したんです。 今までのやり取りから、 この関数を埋める手法ではなく 必要な時にマクロを自前で実行する手法の方のほうが マッチしているものと思いますので、 後者の延長でコードを書いてみました。 後記のマクロたちを、一部はシートモジュールに 一部は標準モジュールに配置します。 使い方は以下です。 DataGetAllマクロを実行すると、 B列の先頭行から最終行までデータの取得作業が行われます。 DataGetNewマクロを実行すると 取得結果の埋まっていないセルたちだけに絞って 取得作業が行われます。 対象が絞られるので、短時間で済むはずです。 また、B列が書き換わると シートモジュールに配置したコードが実行され 書き換わった行だけを対象に取得作業が行われます。 以下注意点です。 このマクロ実行が実行された後で、 参照先ブック (C:\Users\papa\Desktop\新しいフォルダー\製品B.xlsxといったブック) を誰かが書き換え、その後、このマクロブックを起動した場合 最新の情報は取得されません。そのような場合は、 ・DataGetAllマクロを実行する ・古い値の埋まったセルを空にして   DataGetNewマクロを実行 ・B列の該当行のフルパスを書き換える この何れかの処理が必要です。 以下、今度のコードで追加した考慮 ・取得できない場合は、エラーメッセージをセルに書き込む ・参照しようとしたブックを別な方が開いているときを考慮 以下が、標準モジュールに配置するコード Public Const ShName = "Sheet1"   '取得するシート名 Public Const SRow = 4  'データの開始行番号 Public Const SCol = 3  'データの開始列番号 Sub DataGetNew()  DataGet "New" End Sub Sub DataGetAll()  DataGet "All" End Sub Sub DataGet(SW As String)  Dim RowCnt As Long  Dim ColCnt As Long    RowCnt = SRow  With ThisWorkbook.ActiveSheet     If .Cells(SRow, SCol - 1).Value = "" Then    MsgBox "フルパスの指定がありません"    Exit Sub   End If   If .Cells(SRow - 1, SCol).Value = "" Then    MsgBox "参照先セルのアドレス指定がありません。"    Exit Sub   End If      Do    If .Cells(RowCnt, SCol - 1).Value = "" Then Exit Do    ColCnt = SCol    Do     If .Cells(SRow - 1, ColCnt).Value = "" Then Exit Do     If SW = "New" Then      If .Cells(RowCnt, ColCnt).Value = "" Then       .Cells(RowCnt, ColCnt).Value = _         GetWsDate(.Cells(RowCnt, SCol - 1).Value, _         ShName, .Cells(SRow - 1, ColCnt).Value)      End If     Else      .Cells(RowCnt, ColCnt).Value = _        GetWsDate(.Cells(RowCnt, SCol - 1).Value, _        ShName, .Cells(SRow - 1, ColCnt).Value)     End If     ColCnt = ColCnt + 1    Loop    RowCnt = RowCnt + 1   Loop  End With End Sub '//--------------------------------------------------------- '// データ取得関数 '//--------------------------------------------------------- Function GetWsDate(MyPath As String, _   ShName As String, _   MyAddress As String) As Variant  Dim SQL As String  Dim cn As Object  Dim rs As Object    On Error GoTo myError    If MyPath = "" Then   GetWsDate = ""   Exit Function  End If  If FileExists(MyPath) = False Then   GetWsDate = "Error:ブックが見つからない"   Exit Function  End If    If isBookOpen(MyPath) = True Then   GetWsDate = "Error:ブックが既に開いている"   Exit Function  End If    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"  cn.Open MyPath  SQL = ""  SQL = SQL & "select F1" & vbCrLf  SQL = SQL & "FROM [" & ShName & "$" & MyAddress & ":" & MyAddress & "]" & vbCrLf  rs.Open SQL, cn  GetWsDate = rs("F1")  rs.Close  cn.Close  Set rs = Nothing  Set cn = Nothing  Exit Function myError:  GetWsDate = "Error:シート、またはセルが見つからない" End Function '//--------------------------------------------------------- '// ファイル有無判定関数 '//--------------------------------------------------------- Function FileExists(ChkFile As String) As Boolean  FileExists = True  On Error GoTo ErrorHandler ' エラー処理ルーチンを定義  FileDateTime (ChkFile)  On Error GoTo 0      ' エラーのトラップを無効にします。  Exit Function       ' エラー処理ルーチンが実行されないように Sub を終了 ErrorHandler:        ' エラー処理ルーチン  FileExists = False  Resume Next End Function '//--------------------------------------------------------- '// ファイルがすでに開いていないかを判定する関数 '//--------------------------------------------------------- Function isBookOpen(ChkFile As String) As Boolean  On Error Resume Next  Open ChkFile For Append As #1  Close #1  If Err.Number > 0 Then   isBookOpen = True  Else   isBookOpen = False  End If End Function

akira0723
質問者

お礼

今本チャンのシートで少し修正して一覧表が出来上がったところです。 参照セルは17個(列)あり、これをコード中に挿入ではなくセルヘの直接書き込みなので非常に助かります。 改めてご回答を見てみたら、お礼の枠が空いていることに気付きました。 他のお礼枠にしたかもしれませんが改めてお礼申し上げます。 完璧です!

akira0723
質問者

補足

こんばんわ! 帰宅早々試してみました。 今朝は、最初のご回答から順を追って確認しようとして失敗しましたので、今度は最新版を試してみました。 いや、イヤ、いや、イヤ・・・完璧!!!!! 今朝の投稿の後、最初のご回答で、処置シートとリストシートを分けて、処理シートの結果の行を選択しリストシートの最下行に追加転記することで十分使用に耐えると考え始めていました。(マクロボタンを2回クリックするだけ) 目的シートの最下行への転記マクロは「マクロの記録」の手直しで汎用に使用しているので、「これで行ける!」と思っていたところです。 とにかく、100%(以上)思っていた通りの動作です。 月曜日に実際のシートで動作確認してから改めて御礼させていただきます。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.9

前回のコードは、取得した結果を格納するシートが、 そのブックの1枚目にある前提だったので、 これを、選択中のシートに変更してみましたので 試してみてください。 Function GetWsDate... ↑の行以下は修正する必要はありません。 添付した画像を例にすると  Const SRow = 4 'データの開始行番号  Const SCol = 3 'データの開始列番号 という指定になります。 Sub DataGet()  Const ShName = "Sheet1" '取得するシート名  Const SRow = 4 'データの開始行番号  Const SCol = 3 'データの開始列番号  Dim RowCnt As Long  Dim ColCnt As Long    RowCnt = SRow  With ThisWorkbook.ActiveSheet   Do    If .Cells(RowCnt, SCol - 1).Value = "" Then Exit Do    ColCnt = SCol    Do     If .Cells(SRow - 1, ColCnt).Value = "" Then Exit Do     .Cells(RowCnt, ColCnt).Value = _       GetWsDate(.Cells(RowCnt, SCol - 1).Value, _       ShName, .Cells(SRow - 1, ColCnt).Value)     ColCnt = ColCnt + 1    Loop    RowCnt = RowCnt + 1   Loop  End With End Sub Function GetWsDate(MyPath As String, _   ShName As String, _   MyAddress As String) As Variant  Dim SQL As String  Dim cn As Object  Dim rs As Object  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"  cn.Open MyPath  SQL = ""  SQL = SQL & "select F1" & vbCrLf  SQL = SQL & "FROM [" & ShName & "$" & MyAddress & ":" & MyAddress & "]" & vbCrLf  rs.Open SQL, cn  GetWsDate = rs("F1")  rs.Close  cn.Close  Set rs = Nothing  Set cn = Nothing End Function

akira0723
質問者

補足

おはようございます。 つい先ほどセルの指定方法に気づいて最初のご回答に補足で返事したのですが間に合わなかったようで申し訳ありません。 あれから少しダミーシートで確認していて気付いたのですが、毎回B列の上から再度取得するので、100個位パスを埋めてみたらかなり時間がかかります。 また、Bookの保存も遅くなるようです。(あわててこれを書き始めたので再現性未確認) 保存時の時間はあまり気になりませんが動作に関しては直ぐの対象事案がすでに200-300個はあるので少し問題かもです。(実シートでの確認は月曜になります) 追加の行(パス)だけを対象に動かすようなことは無理でしょうか? あまりコードが大きくなるようなら、毎回作業用(別)のVBAシートで実行して、結果を予め開いておいたリストシートに行のコピペ、これもできればVBA、難しければ手作業で対応することは全く問題ないので、すでに目的の80%は完成していますが、今回の動作があまりにすごいのつい贅沢な要求です。 眠気が吹っ飛びました。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.8

> パスを一応確認したのですが社内のPC Noには気付きませんでした。 それよりも、エクセルのメニューの「何をしますか」の上を見てください。◯松 ◯◯って…。

akira0723
質問者

お礼

本当にありがとうございました!!!! 以後気を付けます!

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.7

HohoPapaです。 補足します。 添付画像の例であれば、 (先に示したコードが配置されていれば) C3セルに =IFERROR(IF(B3<>"",GetWsDate($B3,"Sheet1",C$2),""),"") という計算式を埋め、 これを必要数、下方向、右方向に複写します。 (今後増えるだろう範囲にまで複写しておきます。) そうすれば、フルパスをB列に埋めるだけで、結果を得られます。 むろん、B列にフルパスを埋めてから 新たに得たいセルに計算式を複写する という順番でもOKです。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.6

B列に送付先リストをコピペしたタイミングで参照したいということなので,以下の方法でやってみました. 参照するだけなのでブックを開く必要はありません. ただし,参照元のファイルを削除したり移動させた場合にはマクロブックを開いたときにエラーが起きます. 逆に参照元のデータを更新した場合はマクロブックも開いた時に更新されます. これで不都合がある場合は,参照設定したセルを値にして貼り付けるように変更してください. マクロはマクロブックの Sheet1に記述してください. Private Sub Worksheet_Change(ByVal Target As Range) ' 注文票ファイルの保存パスを定数に設定 (xxxの部分は自分で設定してください) Const MY_PATH = "C:\Users\xxx\Documents\新しいフォルダー" ' 使用する変数の宣言 Dim strPath As String Dim strAddress As String Dim strFileName As String Dim rngLoop As Range Dim rng As Range For Each rngLoop In Target If rngLoop.Column = 2 Then ' B列のセル値が変更された場合 If rngLoop.Value = "" Then ' B列のセル値が削除された場合 rngLoop.EntireRow.ClearContents ElseIf InStr(LCase(rngLoop.Value), LCase(MY_PATH)) <> 1 Then ' B列に無効なデータが入力された場合 rngLoop.EntireRow.ClearContents Else ' B列に有効なデータが入力された場合 strPath = rngLoop.Value strFileName = Mid(strPath, InStrRev(strPath, "\") + 1) Set rng = rngLoop.Offset(0, 1) Do strAddress = Cells(2, rng.Column).Value strAddress = Left(strAddress, InStr(strAddress, "(") - 1) rng.Value = "='" & MY_PATH & "\[" & strFileName & "]Sheet1'!" & strAddress Set rng = rng.Offset(0, 1) Loop Until Cells(2, rng.Column).Value = "" End If End If Next End Sub

akira0723
質問者

お礼

ご回答ありがとうございました。 質問内容に不備があり、数百(以上)のパスの下に新規に入力して毎回B列の全パスで実行することに無理があることに気づきませんでした。 お手数をおかけしてしまい申し訳ありませんでした。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.5

前回の質問に私が答えたコードを流用し紹介します。 以下のコードたちを標準モジュールに配置し DataGetマクロを実行しみてください。 Sub DataGet()  Const ShName = "Sheet1" '取得するシート名  Const SRow = 3 'データの開始行番号  Const SCol = 3 'データの開始列番号  Dim RowCnt As Long  Dim ColCnt As Long    RowCnt = SRow  With ThisWorkbook.Sheets(1)   Do    If .Cells(RowCnt, SCol - 1).Value = "" Then Exit Do    ColCnt = SCol    Do     If .Cells(SRow - 1, ColCnt).Value = "" Then Exit Do     .Cells(RowCnt, ColCnt).Value = _       GetWsDate(.Cells(RowCnt, SCol - 1).Value, _       ShName, .Cells(SRow - 1, ColCnt).Value)     ColCnt = ColCnt + 1    Loop    RowCnt = RowCnt + 1   Loop  End With End Sub '別ブックからセル値を取得する関数  '第一引数:フルパス  '第二引数:シート名  '第三引数:セル番地 例えば、A3とかD6 Function GetWsDate(MyPath As String, _   ShName As String, _   MyAddress As String) As Variant  Dim SQL As String  Dim cn As Object  Dim rs As Object  Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=NO;IMEX=1"  cn.Open MyPath  SQL = ""  SQL = SQL & "select F1" & vbCrLf  SQL = SQL & "FROM [" & ShName & "$" & MyAddress & ":" & MyAddress & "]" & vbCrLf  rs.Open SQL, cn  GetWsDate = rs("F1")  rs.Close  cn.Close  Set rs = Nothing  Set cn = Nothing End Function

akira0723
質問者

お礼

おはようございます。 これはすごすぎます!!!! 今 朝一でご回答を期待して何度も確認していて、セル指定がないのはどうもおかしいと思いながら、ふとセル指定はリストのシートの2行目では?と思いつき飛び起きて確認したらしら~と結果が出ました。 これはすごい!!!!感動で眠気が覚めました。 念のため会社の実際のシートで確認後改めて結果報告いたします。 追記のご回答の意味が分かります。 先ずはおろかな補足へのご返信前に報告のみ。

akira0723
質問者

補足

毎度お世話になります。 まだ動かないのですが、ご回答のコードが当方の期待の動きに一番近いように思われるので、本当~に基本的なことを教えていただきたく。 コードを標準モジュールにコピペし実行してみました。 >Const ShName = "Sheet1" '取得するシート名 のSheet1に参照元(帳票)のシート名を入れた段階で先ず実行してみたのですが、なにも怒らず、エラー表示もなく。 で、よく考えたらセルを指定してなくて・・・ >'第一引数:フルパス >'第二引数:シート名 >'第三引数:セル番地 例えば、A3とかD6 これらの引数はどこで指定するのでしょう??? ●>例えば、A3とかD6・・・・ (3,1)とか(6,4)でコード中のどこかに記載するのだと思うのですが、試行錯誤では当たらず。 ●フルパスはリスト(結果)シートのB列に貼り付けただけで良いのでしょうか? ●シート名はコードの1行目に入れただけでよいでのでしょうか? >Const SRow = 3 'データの開始行番号 >Const SCol = 3 'データの開始列番号 この数字を変えれば結果表記の開始場所が任意に決められるようなですが、フルパスはこの行列の-1(2,2)の場所から順次下に張り付けていけば良いのでしょうか? ご回答の添付図を見てこのような結果が得られると本当に助かりますので、何卒よろしくお願いします。 既に展開する対象帳票がいくつも思いついていますので。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.4

前回紹介した ブックを開かないでセルのデータを読む http://officetanaka.net/excel/vba/tips/tips28.htm をもとに、とりあえず一個だけですが B3で指定されているブックから転記するコードです。 Sub Test() Dim OpenFileName As String, SheetName As String, Target As String, buf As String Dim i As Long ''対象ブックを選択します OpenFileName = Sheets("Sheet1").Range("B3").Value ''ファイル名に[]を付ける OpenFileName = Replace(OpenFileName, Dir(OpenFileName), "[" & Dir(OpenFileName) & "]") ''対象ワークシート名を取得 SheetName = "Sheet1" '参照元のシート名 Target = "'" & OpenFileName & SheetName & "'!" ''ワークシート名が正しいかどうか(存在の有無)、まず読み込んでみる On Error Resume Next buf = ExecuteExcel4Macro(Target & "R1C1") If Err <> 0 Then MsgBox "ワークシート [ " & SheetName & " ] を読めませんでした。", vbExclamation Exit Sub End If On Error GoTo 0 buf = ExecuteExcel4Macro(Target & "R3C1") ''【アクティブシートに出力する】 ActiveSheet.Cells(3, "C") = buf buf = ExecuteExcel4Macro(Target & "R5C2") ''【アクティブシートに出力する】 ActiveSheet.Cells(3, "D") = buf buf = ExecuteExcel4Macro(Target & "R6C3") ''【アクティブシートに出力する】 ActiveSheet.Cells(3, "E") = buf End Sub

akira0723
質問者

お礼

ご回答ありがとうございます。 動作確認し、1行目のパスで指定したコード中のA3,B5,C6のセル内容をB列以降の列に参照することを確認しました。 おそらく後はこれを繰り返すと期待通りになることが確認されたと思います。 ただし今回はNo11さんのご回答で解決できました。 何度もお手数をおかけしました。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.3

> このリストは新しいファイル(フルパス)が下にどんどん追加されます。 「10枚のBookを開いて」という事は毎回確実に10個のブックのフルパスが追加されるのでしょうか。 転記をしたいブックのフルパスをC&Pした一番最初のセルを選択してボタンを押したら、そこから始めて10個分下に転記をする。 のでしょうか。手順の詳細を箇条書きで記載してください。ご自身でご自身の環境に合わせてコードを手直しできるのでしょうか。

akira0723
質問者

お礼

前回の質問から継続してお手数をおかけしてしまいました。 質問以外でもお手数をおかけし申し訳ありません。 色々条件が抜けておりかなりのストレスを感じさせていること申し訳なく。 質問ができないということはコードの手直しもできないわけで本当に申し訳なく。 毎回反省してもレベルが上がらないのは寄る年波のせいだとご容赦ください。 今後ともよろしくお願いいたします。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

添付画像に個人名があります、削除依頼しています。

akira0723
質問者

お礼

ありがとうございます。何から何までおせわになります。 フルパスがサーバだとまずいと思いデスクトップにフォルダを作って、パスを一応確認したのですが社内のPC Noには気付きませんでした。 ご回答以外までお手数をおかけしてしまいました。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.1

とりあえず送付先連絡票を開いて、1件分のデータを送付先リストに転記するマクロを作ってみてください。 あとは、それをFor Each Nextで回すだけなので。 ブックを開かずに処理するのは、その後に修正すれば良いです。

akira0723
質問者

お礼

早々のご回答ありがとうございます。 ご指摘の内容は理解できるのですが、残念ながらマクロの記録を参考に編集する程度のレベルにつき1から作るこちは出来ないのが悲しい現実です。

関連するQ&A

  • エクセルでフォルダ内のBookのセルの参照

    いつもお世話になっております。 決まったフォルダ内の複数のBook「個別情報(製品名)」のフルパスを別のBook「リスト」のA列に入れると、「個別情報(製品名)」のシート(規格)の指定のセルを「リスト」のシート(規格一覧)に行方向に引っ張ってくるようにしたいのですが。 1度に参照するシートは5-10枚。 参照するセル番地は決まっていて、多いと15個程度。 参照セルは「リスト」のシート(規格一覧)の最下行のセルに入るようにしたい。 閉じたままのBookのシートを指定して、セル参照が出来ることを少し前に知ったのですが、当方には難易度が高そうで躊躇していましたが最近コロナで時間が出来たのでチャレンジしてみようかと。 当方永遠のVBA初心者ですのでその辺もご配慮の上よろしくお願い致します。

  • エクセルで別ブックのセルを参照する式

    エクセルで別ファイルのセルを参照する方法をお教えください。 一日1シートに在庫を記録しているブックがあります。 ブックは一か月ごとの、新しいブックになります。 シートの名前は11月1日なら、「1101」というふうにしています。 各シートのセル、C17~E17、C18~E18 、C19~E19の部分だけを別ブックに参照して表を作りたいのです。 別ブックのセルを参照する時は、='パス名[ブック名]シート名'!セル名 みたいなので ='D:desktop[2012.11.xls]1101'!C17 という式を作りました。(パス名は適当です。) シート名の「1101」を「1102」…と簡単にしていく方法をお教えいただけないでしょうか。 QNo.5943822のinu-nekoさんの質問など参考にさせていただきましたが、回答にたどり着くことができませんでした。 ご存知の方がいらっしゃいましたら、どうかよろしくお願いいたします。

  • Excelで別のブックのセルを参照させるとき

    Excel2007です。 データ名「売上集計4月」・・・(1)のA1セルに、データ名「売上リスト4月」・・・(2)のA1セルの数値を表示させます。 データ(フォルダ)の階層は、 デスクトップ→売上フォルダ→売上集計→2011年度→売上集計4月 ・・・(1) デスクトップ→売上フォルダ→売上リスト→2011年度→売上リスト4月 ・・・(2) デスクトップ→売上フォルダ→売上集計→2010年度→売上集計4月 ・・・(3) デスクトップ→売上フォルダ→売上リスト→2010年度→売上リスト4月 ・・・(4) となっています。 ※2010年度と2011年度はフォルダで区別はされていますが、末端の階層だけをみると同じ名前のデータが存在する状態です。 (1)と(2)のデータを開いた状態でセルを選択して参照させると、 「売上集計4月」・・・(1)のA1セルには、='[売上リスト4月.xls]Sheet1'!A1と入ります。 この時、A1セルでは、(2)と(4)のデータは区別されているはずだと思うのですが、='[売上リスト4月.xls]Sheet1'!A1という表示内容からは、それが読み取れません。 例えば(2)のデータを誤って削除してしまった場合は、(4)のデータが勝手に参照されてしまったりするのでしょうか? (2)と(4)のデータ名自体に2010年度と2011年度の区別をつけた方がいいのでしょうか? ふと気付いて作業が止まってしまいました。 宜しくお願いします。

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

  • 複数セル指定の内容を1行に並べるには

    はじめまして、よろしくお願いいたします。 EXCELで作られた帳票(定型フォーム)の入力内容(セルの結合も有り)を複数選択(CTRLキー)により指定し、これらの選択したセルの内容を、別のシートに1行に並べたい(レコード化したい)のですが、どのようにすればよいでしょうか。並び順は、別途修正するものとして問いません。 また、同じ帳票のBookが複数あり、シートは1シートで、同じ帳票(定型フォーム)とした場合、これらのBookを次々と読み込み、上記の様に別シートに行を変えて追加してゆく方法はないものでしょうか。 読み込むBookは特定のフォルダに置いてあるものとします。添付データ「image.jpg」を参照ください。 申請書、見積書などを依頼し、これを回収してデータ化して管理台帳を作る場合がよくあり、上記のような質問をいたしました。 なにとぞ、よろしくお願いいたします。m(_ _)m

  • 【エクセル関数】参照するセル

    エクセル関数で教えていただきたいです。 セル参照で、参照するセルを、ある法則道理に参照していきたいのです。 例えば、シートA,シートB、とあったときに、 シートBのC3に → シートAのC3を参照、 シートBのC6に → シートAのC4を参照、 シートBのC9に → シートAのC5を参照、 シートBのC12に → シートAのC6を参照・・・・ ・・・・・・・・・・・ という風に、参照元の列は1行づつ増やしていきたいのですが、 それをシートBでは、3行ごとに表示したいのです。 自分でいろいろ試してみましたが、うまくできません。 こういったことは、関数でできるのでしょうか? もし、あれば、教えていただけると助かります。 よろしくお願いします。

  • 他ブックのセル参照するのに名前をセルで指定して参照させたい。

    他ブックのセル参照するのに名前をセルで指定して参照させたい。 題名が適当でないかもしれませんが、よろしくお願いします。 オフィス2000もしくは2002です。 200604.xls、200605.xlsという日付を基にした名称の規則的なブックがあります。 ファイル自体はネットワークの共通ドライブにあります。 それぞれsheet1に同様の形式で値のデータ(文字)が入っています。 その中のA1、B1、C1~・・・の値を 別ブック(仮にtest.xls)のA1に2006、A2に5と入力させることによって test.xlsの3行目に200605.xlsのA1、B1、C1~・・・の値を表示させたいです。 ブック名 test.xls    A列  B列  C列 ・・・・・・ 1行 2006 2行  5 3行 200605.xlsのA1、B1、C1~の値を表示させたいです。 4行 フォルダー名\[200605.xls]sheet1'!A1、次B1、次C1、と都度埋め込んでいけば値自体は出るのですが、 ブック名が手軽に変えられなくて困っています。 test.xlsのセルに埋め込んだ ='フォルダー名\[200605.xls]sheet1'!A1の [カッコ内]の文字をA1,A2セルに入れた値で参照させたいのですが、、、。 (A2は5ですが、参照したいのは2006の05というのも少々ミソです) 結果が同じなら手段はそんなには問いません。 よろしくお願いします。

  • Excel2010でセルの参照について

    こんにちは。 Excel2010のセルにリストを設定しました。 この設定を別のシートのセルにも適用したいのですが、 ・リストの設定を参照して、選択される値は参照先の自由に。 ・参照元のリストの項目が追加されると、参照先でも追加される。 ということを行いたいのですがExcelではどのようにすればよろしいでしょうか。 コピー&ペーストでは、参照元のリストの項目が増えても、参照先では増えません。 =シート名!セル位置で行うと、参照元でセットされた値だけが参照先に表示される。 となり私の期待したものになりません。 上記のようなことは可能でしょうか?

  • Excelセルの参照

    Excelにdataとnという2シートがあります。dataシートのA列3行目~22行目にデータが縦入力されており、以降B列、C列とデータ入力が繰り返されます。 nシートでdataシートの入力値参照のため、あらかじめdataシートの参照リンクを貼っておきたいのですが、nシートのデータは横並びであるせいか、参照リンクをうまくコピーすることができません。 dataセルのA3セルの値をnシートのD1に=data!A3と貼り付けて、W1(=data!A22)まで数式を自動コピーできないでしょうか。また、D2~W2まで=data!B3~=data!B22など参照リンクをコピーで作成できないでしょうか。 よろしくお願いいたします。 横並びに参照する必要があるのですが、

  • Excel 別シートのセル参照

    Excel で、二つのシート間でセル参照したいのですが、シートに書き込んでおくコマンドの書き方を教えてください。 (操作) Sheet2 でA列のどこかのセルをダブルクリックしたとき、B列およびC列の該当行の値を、Sheet1 の二つの固定セルにそれぞれ表示させる。 よろしくお願いします。

専門家に質問してみよう