私はVBAでプログラミングするのが初めてです。私はインターネットでいくつかのものを読みましたが、私は必要なものを見つけることができなかったか、それを機能させることができませんでした。私の問題:
セルB6のワークシート「シート1」では、プロジェクトが何年利用されるかについての値が示されています。
ワークシート「シート2」と「シート3」で、50年間(1年目から50年目、7行目から56行目)スプレッドシートを作成しました。
「シート1」のセルb6に1〜50の値を入力します。値が49の場合、「シート2」と「シート3」の行56を非表示にします。値が48の場合、「sheet2」と「sheet 3」の55:56行を非表示にします。これは私がこれまでに得たものですが、セルB6の値を変更したときに自動的に機能させることができません。
Sub test1()
If Range("sheet1!B6") = 50 Then
Rows("52:55").EntireRow.Hidden = False
Else
If Range("sheet1!B6") = 49 Then
Rows("55").EntireRow.Hidden = True
Else
If Range("sheet1!B6") = 48 Then
Rows("54:55").EntireRow.Hidden = True
End If: End If: End If:
End Sub
私は誰かが私の問題を助けてくれることを願っています。
ありがとうございました
もうすぐだ。アクティブシート内の行を非表示にします。大丈夫です。しかし、より良い方法はそれがどこにあるかを追加することです。
Rows("52:55").EntireRow.Hidden = False
なる
activesheet.Rows("52:55").EntireRow.Hidden = False
私はそれなしで奇妙なことが起こりました。自動化することも。 VBAエディターのシートのマクロ内でworksheet_changeイベントを使用する必要があります(モジュールではなく、エディターの左端にあるsheet1をダブルクリックします)。そのシート内で、エディター自体のすぐ上にあるドロップダウンメニューを使用します( 2つのリストボックス)。左側のリストボックスには、探しているイベントがあります。その後、マクロを投入します。以下のコードのようになります。
Private Sub Worksheet_Change(ByVal Target As Range)
test1
end Sub
それでおしまい。何かを変更すると、マクロtest1が実行されます。
さて、あなたは正しい道を進んでいます、Benno!
VBAプログラミングに関して役立ついくつかのヒントがあります。
操作するシートへの明示的な参照を常に使用します。そうしないと、Excelがアクティブシートにコードが適用されていると想定し、最終的にスプレッドシートがねじ込まれているのがわかります。
Lionzが述べたように、Excelが提供するネイティブメソッドに連絡してください。あなたはほとんどのトリックでそれらを使うかもしれません。
変数を明示的に宣言します。VBAで各オブジェクトが提供するメソッドのリストが表示されます。それはあなたのインターネットを掘る時間を節約するかもしれません。
それでは、ドラフトコードを作成しましょう...
Lionzで説明されているように、このコードはExcel Sheetオブジェクト内にある必要があります。これはシート2にのみ適用され、シート2とシート3の両方に好きなように適合させることができます。
それが役に立てば幸い!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oSheet As Excel.Worksheet
'We only want to do something if the changed cell is B6, right?
If Target.Address = "$B$6" Then
'Checks if it's a number...
If IsNumeric(Target.Value) Then
'Let's avoid values out of your bonds, correct?
If Target.Value > 0 And Target.Value < 51 Then
'Let's assign the worksheet we'll show / hide rows to one variable and then
' use only the reference to the variable itself instead of the sheet name.
' It's safer.
'You can alternatively replace 'sheet 2' by 2 (without quotes) which will represent
' the sheet index within the workbook
Set oSheet = ActiveWorkbook.Sheets("Sheet 2")
'We'll unhide before hide, to ensure we hide the correct ones
oSheet.Range("A7:A56").EntireRow.Hidden = False
oSheet.Range("A" & Target.Value + 7 & ":A56").EntireRow.Hidden = True
End If
End If
End If
End Sub