Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6719 / 13644 ツリー ←次へ | 前へ→

【43482】非表示してる行を参照している側でも非表示したい スプーン 06/10/17(火) 8:19 質問[未読]
【43487】Re:非表示してる行を参照している側でも非... Jaka 06/10/17(火) 12:46 発言[未読]
【43494】Re:非表示してる行を参照している側でも非... Kein 06/10/17(火) 15:17 発言[未読]
【43547】Re:非表示してる行を参照している側でも... ハチ 06/10/19(木) 9:57 発言[未読]

【43482】非表示してる行を参照している側でも非表...
質問  スプーン  - 06/10/17(火) 8:19 -

引用なし
パスワード
   どうも始めまして
初歩的な事かもしれませんがお願いします。


数量などを別ファイルから参照してるのですが
例えば
=[在庫表.xls]sheet1!A1

その別ファイルで非表示されてる行を
参照してる側のファイルでも
非表示にしたいのです。


VBAでなくエクセルの機能でできそうな気もしますが
色々検索などしてもどうしてもわからなかったので
こちらで質問させて頂きます。
宜しくお願いします。

【43487】Re:非表示してる行を参照している側でも...
発言  Jaka  - 06/10/17(火) 12:46 -

引用なし
パスワード
   ▼スプーン さん:
>初歩的な事かもしれませんがお願いします。

>数量などを別ファイルから参照してるのですが
>例えば
>=[在庫表.xls]sheet1!A1
>
>その別ファイルで非表示されてる行を
>参照してる側のファイルでも
>非表示にしたいのです。
>
>VBAでなくエクセルの機能でできそうな気もしますが
>色々検索などしてもどうしてもわからなかったので
>こちらで質問させて頂きます。
2003の事は解りませんが、こういった遠隔操作機能の事は、今まで聞いた事は無いです。
2003でも、このような機能は多分無いと思います。

無いと言う前提で話しますが、
マクロでやると、初歩レベルでできると思えないです。

まず、非表示になっている行ないし列がどこかを調べ、行または列のセルを総当りでリンク関数が入っているか1個1

個確認し、セルに書かれている参照関数からブック名やシート名等を抜き出し、それを元にやりたい事を実行してい

くといった作業になると思います。
また、リンク先のブックが、開かれている状態なのか、閉じているかでもコードの書き方が変わってきます。

リンク先のブック名は、これでも取れるのでこれを元にリンク関数が書かれているセルをFing等で探したほうが早く

すみますが....。

Sub リンク先ブック名取得() '関数の場合
LinkBookTB = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(LinkBookTB) Then
  For i = 1 To UBound(LinkBookTB)
    MsgBox "リンク " & i & ":" & Chr(13) & LinkBookTB(i)
  Next i
End If
End Sub

なんか、色々御託並べちゃったけど、
非表示の列、行から「[」が含まれているセルの値を別ブックや別シートに抜き出してから、そのセルの値をブック名、シート名、列や行番号を抜き出してから、それを元に手作業でやったほうが良いと思いますけど...。
(参照ブックを非表示にする手間だけ手作業にしただけで、最初に書いた内容とほとんど同じですね。すみません。)

【43494】Re:非表示してる行を参照している側でも...
発言  Kein  - 06/10/17(火) 15:17 -

引用なし
パスワード
   別ファイルで、行を非表示にしている"条件"は何ですか ? リンク先ブックにおいても、
それと同じ条件を満たしているかを判定できるなら、普通に Hidden すれば良さそう
に思いますが・・。

【43547】Re:非表示してる行を参照している側でも...
発言  ハチ  - 06/10/19(木) 9:57 -

引用なし
パスワード
   ▼スプーン さん:
>どうも始めまして
>初歩的な事かもしれませんがお願いします。

先の回答されているお二方も書かれている通り、簡単ではないです。
なぜ、そうしたいのか?をハッキリさせると別案もあるかもしれません。

>数量などを別ファイルから参照してるのですが
>例えば
>=[在庫表.xls]sheet1!A1
>
>その別ファイルで非表示されてる行を
>参照してる側のファイルでも
>非表示にしたいのです。

興味が湧いたので作ってみました。
参照されているBook(別ファイルと書かれているBookです)に
下記のマクロを記述して先に開いて置くのが前提です。
別のBookを開くときにチェックがかかります。
対象であれば使用している全セルをチェックするので
正直、実用的なサンプルとは言い難いですが・・・
テストでは動作しましたが、バグがあるかもしれません。
自信なしです。お暇なら程度で見てください。

ワークシート分析の参照元のトレース を使ってみました。
リンクのチェックがJakaさんがUPされているマクロをお借りしました。

'ThisWorkBookモジュール
Option Explicit
Dim WithEvents App As Application

Private Sub Workbook_Open()
  Set App = Application
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set App = Nothing
End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
  Call LinkChk(Wb)
End Sub

'標準モジュール
Option Explicit

Sub LinkChk(Wb As Workbook)
'このBookにLinkされているかチェック
  Dim i As Long
  Dim LinkBookTB As Variant
  
  LinkBookTB = Wb.LinkSources(Type:=xlLinkTypeExcelLinks)
  If Not IsEmpty(LinkBookTB) Then
  For i = 1 To UBound(LinkBookTB)
    If LinkBookTB(i) = ThisWorkbook.FullName Then
      Call Hidden_Link_Hidden(Wb)
      Exit Sub
    End If
  Next i
End If
End Sub

Sub Hidden_Link_Hidden(Wb As Workbook)
'ワークシート分析-参照元のトレース を使用する。
'参照元の行が非表示であれば、参照先も非表示にする。
'NavigateArrow ArrowNumber 1が外部リンクになると仮定。間違ってたらゴメンナサイ
  Dim R As Range '参照先Range
  Dim R2 As Range '参照元Range
  Dim Ws As Worksheet
  Dim i As Integer
  
  Application.ScreenUpdating = False
  For Each Ws In Wb.Worksheets
    For Each R In Ws.UsedRange
      R.ShowPrecedents  'ワークシート分析-参照元のトレース
      If IsEmpty(R.NavigateArrow(True, 1)) = False Then
        i = 0
        On Error Resume Next
          Do
            i = i + 1
            Err.Clear
            Set R2 = R.NavigateArrow(True, 1, i)
            'リンク元Bookとリンク先Bookが同一ならDo終了 次セルへ
            If R2.Parent.Parent.Name = R.Parent.Parent.Name Then Exit Do
            If Err.Number = 0 And R2.EntireRow.Hidden = True Then
              R.EntireRow.Hidden = True
            End If
          Loop While Err.Number = 0
        On Error GoTo 0
      End If
      R.ShowPrecedents True
    Next R
  Next Ws
  Application.ScreenUpdating = True
  Wb.Activate
  Wb.Worksheets(1).Activate
End Sub

6719 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free