Excel VBA質問箱 IV

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

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


2697 / 13645 ツリー ←次へ | 前へ→

【66517】IF文がニガテです とっち 10/9/7(火) 22:46 質問[未読]
【66518】Re:IF文がニガテです かみちゃん 10/9/7(火) 23:04 発言[未読]
【66523】Re:IF文がニガテです kanabun 10/9/8(水) 19:54 発言[未読]
【66525】Re:IF文がニガテです とっち 10/9/8(水) 20:38 質問[未読]
【66526】Re:IF文がニガテです かみちゃん 10/9/8(水) 20:50 発言[未読]
【66528】Re:IF文がニガテです とっち 10/9/8(水) 21:04 質問[未読]
【66529】Re:IF文がニガテです かみちゃん 10/9/8(水) 21:29 発言[未読]
【66519】Re:IF文がニガテです UO3 10/9/8(水) 8:12 発言[未読]

【66517】IF文がニガテです
質問  とっち  - 10/9/7(火) 22:46 -

引用なし
パスワード
   次のように書いたのですが、IF文でエラーが帰ってきました。
どこがいけないのですか。


Sub cal()
Range("C1:C7").Formula = "=round(B1/A1*100,1)"
If Range("C1:C7") > 100 Then
  Range("C1:C7") = ">100"
End If
End Sub

教えてもらえると助かります。

ついでに・・・。
プログラムはIF文の中身などで、少し先頭の文字を下げて書かれていますが
何文字下げるのが一般的なのでしょうか。

【66518】Re:IF文がニガテです
発言  かみちゃん  - 10/9/7(火) 23:04 -

引用なし
パスワード
   ▼とっち さん:
>次のように書いたのですが、IF文でエラーが帰ってきました。
>どこがいけないのですか。

Range("C1:C7")
と書くと、その値は、二次元配列になりますので、それと、値を比較する場合は、
工夫がいります。

Range("C1:C7").Formula = "=round(B1/A1*100,1)"
For Each c In Range("C1:C7")
 If c.Value > 100 Then
  '〜処理〜 
 End If
Next

そもそも以下の処理で何がしたいのかがよくわかりません。

If Range("C1:C7") > 100 Then
 Range("C1:C7") = ">100"
End If

> プログラムはIF文の中身などで、少し先頭の文字を下げて書かれていますが
> 何文字下げるのが一般的なのでしょうか。

インデントといいます。
インデントをつけたソースは、見やすく、特にIfステートメントなどを使うときは
役立つと思います。
なお、一般的なのは、半角4文字ではないでしょうか?

【66519】Re:IF文がニガテです
発言  UO3  - 10/9/8(水) 8:12 -

引用なし
パスワード
   ▼とっち さん:

>プログラムはIF文の中身などで、少し先頭の文字を下げて書かれていますが
>何文字下げるのが一般的なのでしょうか。

おはようございます。
インデントの設定は、VBE画面のツール(T)->オプション(O)で出てくる画面の
編集タブで、自動インデントにティックをつけタブ間隔にお望みの数を登録します。

・コードウィンドウでタブキーをおしたり、シフト+タブキーを押して動きを確認
 してみてください。
・入力済みのコードの行の先頭の文字の左にカーソルを持ってきて動かすこともできます。
・また、入力済みの複数の行を選び、選んだ行全体を動かすこともできます。

【66523】Re:IF文がニガテです
発言  kanabun  - 10/9/8(水) 19:54 -

引用なし
パスワード
   ▼かみちゃん さん:

>そもそも以下の処理で何がしたいのかがよくわかりません。
>
>If Range("C1:C7") > 100 Then
> Range("C1:C7") = ">100"
>End If
>

ひよっとして、
[C1:C7]に
数式で

  =IF(B1>A1,">100",ROUND(B1/A1*100,1))

をセットしたいということではないですか?

【66525】Re:IF文がニガテです
質問  とっち  - 10/9/8(水) 20:38 -

引用なし
パスワード
   はい。
=IF(B1>A1,">100",ROUND(B1/A1*100,1))
でおしまいなのですね…。
関数に弱くて失礼いたしました。

C列には、AとBの割り算をした結果を行ごとに出すのですが、
100%を超える場合には、割り算の答えではなく、「>100」という表現に
改めたいのです。

申し訳ありませんが、勉強のために教えてください。


Range("C1:C7").Formula = "=round(B1/A1*100,1)"
For Each c In Range("C1:C7")
 If c.Value > 100 Then
  C = ">100" 
 End If
Next

としても、C列に変化がありません。
100%を超える場合に、関数ではなく「>100」と打ち込まれるためには
コードをどう訂正すればよろしいですか?

【66526】Re:IF文がニガテです
発言  かみちゃん  - 10/9/8(水) 20:50 -

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

>Range("C1:C7").Formula = "=round(B1/A1*100,1)"
>For Each c In Range("C1:C7")
> If c.Value > 100 Then
>  C = ">100" 
> End If
>Next
>
>としても、C列に変化がありません。
>100%を超える場合に、関数ではなく「>100」と打ち込まれるためには
>コードをどう訂正すればよろしいですか?

コード自体は間違っていないと思います。
変化がないというのは、どういう意味ですか?
以下のようなイメージでサンプルデータを示してみてください。


  A  B
1
2
3
4

【66528】Re:IF文がニガテです
質問  とっち  - 10/9/8(水) 21:04 -

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

アドバイスありがとうございます。


データ
10    5
3    7
4    0
11    11


Sub divide()
 Range("C1:C4").Formula = "=round(B1/A1*100,1)"
 For Each C In Range("C1:C4")
  If C.Value > 100 Then
   C = ">100"
  End If
 Next
End Sub


このプロシージャを実行してみてください。
C2は「>100」としたいのですが、233.3と出てきます。

【66529】Re:IF文がニガテです
発言  かみちゃん  - 10/9/8(水) 21:29 -

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

>C2は「>100」としたいのですが、233.3と出てきます。

   c = ">100"

   c.Value = ">100"
としてみてください。

このようにすると、私の環境、WinodowsXP Pro SP2 + Excel2002 SP3 では、>100 と表示されます。

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