私はVBAで可能な限り多くのノブであると言って始めなければなりません。私は条件に基づいて別のワークシート内の名前付き範囲を非表示にするコードに取り組んでいます。ここに私がやろうとしていることがあります。Excelマクロ(VBA) - 条件に基づいて別のワークシートの特定の名前付き範囲を非表示にします
私は「コミットコスト」というワークシートを持っており、それは以下のようになります。
(私は今7000以上の少しを持っている)下部に、より多くの行があるでしょう。範囲A3:E14の名前はcc_0101、範囲のA14:E26の名前はcc_0195です。そして以下にはさらに多くのものがあります。
私はそのように見える「設定」のワークシートがあります。「表示」および「隠す」:
列Cには、ドロップダウン二つのオプションです。 D列の式には、「非表示」が選択されている場合は1、「表示」が選択されている場合は0が表示されます。ここでマクロを「設定」ワークシートのアカウントリストに移動し、D8 = 1の場合、「Committed Costs」ワークシートのcc_0101という名前の範囲全体を非表示にし、D9 = 0の場合はcc_0195を隠されているなど。基本的に、マクロは各行の列Eの値を取得する必要があります。
私はExcelで、次のコードを持っている:私は配列と以下のようにコードが見えたすべてについて読み始めた前
Dim showhide1 As Range
Set showhide1 = ThisWorkbook.Worksheets("Settings").Range("d7:g716")
Dim showhide2 As Variant
showhide2 = showhide1.Value
Dim i As Integer, j As Integer
For i = LBound(showhide2, 1) To UBound(showhide2, 1)
For j = LBound(showhide2, 2) To UBound(showhide2, 2)
If showhide1(i, 1) = 1 Then
Sheets("Committed Costs").Range("showhide2(i,2)").EntireRow.Hidden = True
Else
Sheets("Committed Costs").Range("showhide2(i,2)").EntireRow.Hidden = False
End If
Next j
Next i
コードは、実行時エラー1004
を生成します。
Dim drng As Range, d as Range
Dim erng As Range, e as Range
Set drng = Range("D7:D716")
Set erng = Range("E7:E716")
For Each d In drng
If d = 1 Then
Sheets("Committed Costs").Range("e").EntireRow.Hidden = True
Else
Sheets("Committed Costs").Range("e").EntireRow.Hidden = False
End If
Next d
それから私は "e"を決して定義していないので、マクロはE列の値を取得することを知らない(私は推測している)。私が仕事の条件を得た唯一の方法は:
Dim d as Range
Set d = Range("D8")
If d = 1 Then
Sheets("Committed Costs").Range("cc_0101").EntireRow.Hidden = True
Else
Sheets("Committed Costs").Range("cc_0101").EntireRow.Hidden = False
End If
ですが、それはまったく目的には役立ちません。この例ではcc_0101という範囲の名前をハードコードしなければならず、コードはアカウントのリスト全体を調べるのではなく、1行(行8)を比較するだけです。
私はこの
私はそれをカイルが提案する方法を実行しようとしましたが、それはデバッガは、コードの次のセクション浮き彫りに同じファイル名を指定して実行時エラー1004になり:「シート(」コミット費用を」)範囲(showhide2 (i、2))EntireRow.Hidden = False " – user3055019
はい、私はそれも気づきましたが、一貫性を保ち、showhide2(i、1)を使用しますが、残念ながら問題は解決しませんでした。 – user3055019
@ user3055019 - マクロブックの設定シートで定義されたすべての範囲名です。セルE7:E716で定義されていますか? (セルが空の場合、または範囲名が存在しない場合は、そのエラーが発生します)既存のIfステートメントを囲む余分なIfステートメントが必要な場合があります。たとえば 'If showhide1(i、2)<>" "Then''もしshowhide1(i、1)= 1 Then' ... 'End If'' End If'。 – YowE3K