Excel VBA質問箱 IV

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

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


3256 / 13646 ツリー ←次へ | 前へ→

【63263】IF Then構文において、条件満たした場合に2つの同じようなことを実行させ... ひろのり 09/10/21(水) 2:39 質問[未読]
【63264】Re:IF Then構文において、条件満たした場合... かみちゃん 09/10/21(水) 5:17 発言[未読]
【63266】Re:IF Then構文において、条件満たした場合... Abebobo 09/10/21(水) 10:08 発言[未読]
【63275】Re:IF Then構文において、条件満たした場合... ひろのり 09/10/22(木) 2:35 質問[未読]
【63274】Re:IF Then構文において、条件満たした場合... ひろのり 09/10/22(木) 2:31 お礼[未読]

【63263】IF Then構文において、条件満たした場合...
質問  ひろのり  - 09/10/21(水) 2:39 -

引用なし
パスワード
   はじめまして、
「ひろのり」と申します。

初めてこのコミュニティーに参加させて頂きます。
なにぶん初心者なもので、最初は質問ばかり(しかも初歩的な)する側で、皆様のお役にはなかなか立てず申し訳ございませんが、どうぞ宜しく御願いたします。

IF以下の条件がTrueだった場合に、セル(あ)の値をセル(い)へコピーし、また同時に、セル(う)の値をセル(え)にコピーするようにしたいと考えています。

その場合、わたしが書きますと下記のように、ifから始まるまったく同じようなコマンドを書いてしまいます。(動作的には問題なくうごきました)

ただ、IFから『True Then』までは全く同じ文章なので、2回かくことなく、すっきりさせる表記をご教示頂ければと思います。


Range("B4").Select

     If ActiveCell.Value = True Then Worksheets("sheet2").Range("B3").Value = ActiveCell.Range("C4").Value
   If ActiveCell.Value = True Then Worksheets("sheet2").Range("D6").Value = ActiveCell.Range("E4").Value
       
   ActiveCell.Offset(1).Select
   
End sub

どうぞ、よろしくお願いいたします。

【63264】Re:IF Then構文において、条件満たした場...
発言  かみちゃん  - 09/10/21(水) 5:17 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>ただ、IFから『True Then』までは全く同じ文章なので、2回かくことなく、すっきりさせる表記

動作的には問題なく動いたということなので・・・
以下のような感じでもできます。

 If ActiveCell.Value = True Then
   Worksheets("sheet2").Range("B3").Value = ActiveCell.Range("C4").Value
   Worksheets("sheet2").Range("D6").Value = ActiveCell.Range("E4").Value
 End If

気になるところとしては、
ActiveCell.Value
が本当にTrue/Falseの値なのか・・・
通常は、文字や数値などの値になっていると思います。

また、
ActiveCell.Range("C4").Value
という書き方も、
ActiveCellがA1セルの場合は、C4セルになりますが、
ActiveCellから見て、右に2列、下に3行のセルになりますので、注意が必要です。

つまり
Range("B4").Select
となっていますので、
ActiveCell.Range("C4")
は、
Range("E7")
と同じことになります。

【63266】Re:IF Then構文において、条件満たした場...
発言  Abebobo  - 09/10/21(水) 10:08 -

引用なし
パスワード
   'おはようございます。今日は仕事がびっくりするほど暇です・・・。
'If文は、かみちゃんさんや、下記のコードの様に
'インデント(タブキーでちょっと右からはじめる)で区分けををして
'End If で締めくくるのが一般的で見やすいと思います。(見やすいです)
'まれに If 〜 Then Exit Sub とかして、一行で書く場合もありますが・・・。

'>すっきりさせる表記を・・・。

'なら、With を使ったほうが見やすいと思います。
'If文と同様に、インデント をして 締めくくりは End With になります。
'相対参照は ActiveCell.Range("E4") は好みだと思いますが、Offsetで書いてみました。

Sub test()
Range("B4").Select
If ActiveCell.Value = True Then
  With Worksheets("sheet2")
   .Range("B3").Value = ActiveCell.Offset(3, 2).Value
   .Range("D6").Value = ActiveCell.Offset(3, 4).Value
  End With
End If
ActiveCell.Offset(1).Select
End Sub

【63274】Re:IF Then構文において、条件満たした場...
お礼  ひろのり  - 09/10/22(木) 2:31 -

引用なし
パスワード
   かみちゃん様

早速のご教示ありがとうございました。
試したら、できました!

>ActiveCell.Valueが本当にTrue/Falseの値なのか・・・
についてですが、チェックボックスを作って、そこにチェックがはいれば、
Trueということで、IF以下を実行して、プリントアウトする、ということを考えています。
これからプリントアウトするコマンドを頑張ってしらべていきます。
また、ご教示いただけますとありがたいです。

ありがとうございました。


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>ただ、IFから『True Then』までは全く同じ文章なので、2回かくことなく、すっきりさせる表記
>
>動作的には問題なく動いたということなので・・・
>以下のような感じでもできます。
>
> If ActiveCell.Value = True Then
>   Worksheets("sheet2").Range("B3").Value = ActiveCell.Range("C4").Value
>   Worksheets("sheet2").Range("D6").Value = ActiveCell.Range("E4").Value
> End If
>
>気になるところとしては、
>ActiveCell.Value
>が本当にTrue/Falseの値なのか・・・
>通常は、文字や数値などの値になっていると思います。
>
>また、
>ActiveCell.Range("C4").Value
>という書き方も、
>ActiveCellがA1セルの場合は、C4セルになりますが、
>ActiveCellから見て、右に2列、下に3行のセルになりますので、注意が必要です。
>
>つまり
>Range("B4").Select
>となっていますので、
>ActiveCell.Range("C4")
>は、
>Range("E7")
>と同じことになります。

【63275】Re:IF Then構文において、条件満たした場...
質問  ひろのり  - 09/10/22(木) 2:35 -

引用なし
パスワード
   Abebobo様

おはようございます(今は夜中ですが)。

どうもありがとうございました!
試したらできました!

offsetの使い方も、本を見ぃ見ぃ確認し、自分でも使えそうな気がしてきました。

コマンドもすっきりして、うれしいです。

ありがとうございました。

また、何かとお世話になると思いますが、よろしくお願いいたします。


▼Abebobo さん:
>'おはようございます。今日は仕事がびっくりするほど暇です・・・。
>'If文は、かみちゃんさんや、下記のコードの様に
>'インデント(タブキーでちょっと右からはじめる)で区分けををして
>'End If で締めくくるのが一般的で見やすいと思います。(見やすいです)
>'まれに If 〜 Then Exit Sub とかして、一行で書く場合もありますが・・・。
>
>'>すっきりさせる表記を・・・。
>
>'なら、With を使ったほうが見やすいと思います。
>'If文と同様に、インデント をして 締めくくりは End With になります。
>'相対参照は ActiveCell.Range("E4") は好みだと思いますが、Offsetで書いてみました。
>
>Sub test()
>Range("B4").Select
>If ActiveCell.Value = True Then
>  With Worksheets("sheet2")
>   .Range("B3").Value = ActiveCell.Offset(3, 2).Value
>   .Range("D6").Value = ActiveCell.Offset(3, 4).Value
>  End With
>End If
>ActiveCell.Offset(1).Select
>End Sub

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