• 締切済み

シートの可視セル部分のみに「名前の定義

お世話になっております。 EXCEL2013で作ったシートの可視セル部分のみに「名前の定義」を設定する方法を教えてください。 「名前の定義」で設定した範囲をACCESSでインポートしたいと考えているのですが、 可視セルのみに名前の定義を付ける方法が分かりません。 よろしくお願いします。

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 データ範囲に名前を付けて、その一部行・列を非表示にしたままでも、普通にAccessからリンクテーブルにして「非表示行列を含む全体が」取得できましたので、本筋には関係ないですが、一応訂正しておきます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

当方xl2010ですが、Excel VBAでシート中のUsedRangeの、SpecialCells(xlCellTypeVisible)に名前を付けるのは下記の様にできます。手動でもホーム/検索と選択/条件を指定して選択で同様に出来ると思います。(xl2010の場合) Sub test() Dim myWbk As Workbook Dim mySh As Worksheet Dim myRange As Range Dim myArea As Range Set myWbk = ThisWorkbook Set mySh = myWbk.Sheets(1) Set myRange = mySh.UsedRange.SpecialCells(xlCellTypeVisible) myWbk.Names.Add Name:="testName", RefersTo:=myRange For Each myArea In myRange.Areas Debug.Print myArea.Address Next myArea End Sub '出力 '範囲中に非表示の行と列が存在する場合です。Areaは4つ存在しています。 '$B$3:$D$14 '$K$3:$L$14 '$B$22:$D$30 '$K$22:$L$30 '名前の管理で確認 'testName {...} =Sheet1!$B$3:$D$14,Sheet1!$K$3:$L$14,Sheet1!$B$22:$D$30,Sheet1!$K$22:$L$30 ブック ただ、こうやって付けた名前は、Accessからインポートしようとしても認識されませんし、試しにADOでワークシートに接続しようとしても、 「オブジェクト 'testName' が見つかりませんでした。」という実行時エラーになってしまいます。 非表示行・列を無くして上記コードを実行してから接続すると問題なく接続できました。 非表示が行だけならArea毎に名前をつけてインポートしてやれば良いですが、列の非表示もあると面倒ですね。 非表示は解除して、ワークシートをリンクテーブルにして、Access側で非表示にする条件でクエリを作成して取り込んではどうでしょうか。 または、エクセル側でSpecialCells(xlCellTypeVisible)を選択してコピーし、別シートに貼り付けると非表示行・列は切り詰めて貼り付けられますので、そちらを利用する案も考えられます。 ご参考まで。

LETMEKNOW13
質問者

お礼

ありがとうございます。

関連するQ&A

専門家に質問してみよう