Excel VBA質問箱 IV

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

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


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

【73895】IF文教えてください。 nonoka 13/3/18(月) 19:21 質問[未読]
【73896】Re:IF文教えてください。 kanabun 13/3/18(月) 19:39 発言[未読]
【73897】Re:IF文教えてください。 nonoka 13/3/18(月) 20:24 質問[未読]
【73898】Re:IF文教えてください。 kanabun 13/3/18(月) 21:36 発言[未読]
【73899】Re:IF文教えてください。 nonoka 13/3/18(月) 22:21 回答[未読]
【73900】Re:IF文教えてください。 nonoka 13/3/18(月) 23:37 お礼[未読]
【73901】Re:IF文教えてください。 kanabun 13/3/19(火) 0:05 発言[未読]
【73902】Re:IF文教えてください。 kanabun 13/3/19(火) 0:16 発言[未読]

【73895】IF文教えてください。
質問  nonoka  - 13/3/18(月) 19:21 -

引用なし
パスワード
   いつもお世話になってます。
下記コードでAD1に数字が入力されています。
0以外の場合はN1=K1+AD1
0の場合はN1=空白としたいです。
基本的なことを聞いて申し訳ありませんがご教授お願い致します。

.Range("N1").Value = .Range("K1").Value + .Range("AD1").Value '翌日

【73896】Re:IF文教えてください。
発言  kanabun  - 13/3/18(月) 19:39 -

引用なし
パスワード
   ▼nonoka さん:

>.Range("N1").Value = .Range("K1").Value + .Range("AD1").Value '翌日

どのシートか? → Worksheets(1) と推定
コードはどこに書いてあるか → 標準モジュールと推定
.Range("K1").Value は 数値か 文字列のこともあるのか →必ず数値と仮定

Sub Test1()
  Dim s As String
  
  With Worksheets(1)
    s = .Range("AD1").Value
    If Val(s) = 0 Then
      .Range("N1").ClearContents
    Else
      .Range("N1").Value = .Range("K1").Value + Val(s) '翌日
    End If
  End With
End Sub

【73897】Re:IF文教えてください。
質問  nonoka  - 13/3/18(月) 20:24 -

引用なし
パスワード
   ▼kanabun さん:

勉強になりました。早急に対応頂きありがとうございました。
もう一つ問題が出てきました。
N1=K1+AD1
O1=N1+AE1
P1=O1+AF1
Q1=P1+AG1

となっているときにご教授頂いたコードでO1が空白になる場合があります。
この時P1計算時にO1が空白だった場合、値の入っている左のセルを参照したいです。
2つのセルが空白の場合も存在します。
O1P1が空白の場合はN1を参照という形に出来ますか?


>
>>.Range("N1").Value = .Range("K1").Value + .Range("AD1").Value '翌日
>
>どのシートか? → Worksheets(1) と推定
>コードはどこに書いてあるか → 標準モジュールと推定
>.Range("K1").Value は 数値か 文字列のこともあるのか →必ず数値と仮定
>
>Sub Test1()
>  Dim s As String
>  
>  With Worksheets(1)
>    s = .Range("AD1").Value
>    If Val(s) = 0 Then
>      .Range("N1").ClearContents
>    Else
>      .Range("N1").Value = .Range("K1").Value + Val(s) '翌日
>    End If
>  End With
>End Sub

【73898】Re:IF文教えてください。
発言  kanabun  - 13/3/18(月) 21:36 -

引用なし
パスワード
   ▼nonoka さん:

>もう一つ問題が出てきました。
>N1=K1+AD1
>O1=N1+AE1
>P1=O1+AF1
>Q1=P1+AG1
>
>となっているときにご教授頂いたコードでO1が空白になる場合があります。
>この時P1計算時にO1が空白だった場合、値の入っている左のセルを参照したいです。
>2つのセルが空白の場合も存在します。
>O1P1が空白の場合はN1を参照という形に出来ますか?

ちょっとよく分からない点
>N1=K1+AD1  ←これは AD1が空白もしくは 0 だったら 空白という特例あり
O1=N1+AE1  N1 が空白のとき、O1 は AE1(の数値)と同じ数値です。
P1=O1+AF1  すると O1 は 0 になりえますが、空白にはなりません。 
Q1=P1+AG1

仮に、O1が空白になることがあったとして、
そのときは 左の N1を参照しても N1が空白だから O1 が空白になったのだと
いう風には言えないですか?

> P1計算時にO1が空白だった場合、

とするなら、そのまえの「O1計算時に N1が空白だったばあい」のところには
条件は要らないのですか?

全体として、ワークシートの数式で済むことなら 数式で書きたいのか、
If文を使って 各セルには値を代入していきたいのか?
その辺の説明があると、コメントできるかもしれません。

【73899】Re:IF文教えてください。
回答  nonoka  - 13/3/18(月) 22:21 -

引用なし
パスワード
   ▼kanabun さん:
説明不足で申し訳ありません。
ADからARにランダムに0か1が入力されています。
NからAAにはADからARの数字を読み取って
0が入っていれば空白、1が入っていれは足すという式にしたいです。

NはADが1ならK+AD、0ならKを表示。
OはAEが0なら空白、1ならN+AE
PはAFが0なら空白、1ならO+AF
ここでOが空白の場合が出てきます。その時はOの代わりに左隣のNを足す。
QはAGが0なら空白、1ならP+AG
ここも、Pが空白の場合がでてきて、その時はPの代わりにO、Oが空白ならN。
このように左隣が空白ならさらに左としたいです。
これを出来ればAAまでつなげたいです。

空白がなければ先ほどのコードを繰り返せば可能だったのですが。
コードで計算して値を代入して行きたいです。

【73900】Re:IF文教えてください。
お礼  nonoka  - 13/3/18(月) 23:37 -

引用なし
パスワード
   ▼kanabun さん:
IFとelseifでつなげて解決致しました。
IFの使い方が少しわかったように思います。
ありがとうございました。
これからも宜しくお願い申し上げます。

【73901】Re:IF文教えてください。
発言  kanabun  - 13/3/19(火) 0:05 -

引用なし
パスワード
   ▼nonoka さん:
>▼kanabun さん:
>IFとelseifでつなげて解決致しました。
>IFの使い方が少しわかったように思います。

ご自分で解決されて何よりです。

以下は、考え方の 参考です。

> ADからARにランダムに0か1が入力されています。
> NからAAにはADからARの数字を読み取って
> 0が入っていれば空白、1が入っていれは足すという式にしたいです。

以下の 例文を各行同じスタイルでまとめると

NはADが 0 なら [K]、ADが 1 なら K + AD を表示。 Kは必ず「日付」。
OはAEが 0 なら空白、AEが 1 なら N + AE を表示。Nは必ず「日付」
PはAFが 0 なら空白、AFが 1 なら O(*) + AF を表示。
QはAGが 0 なら空白、AGが 1 なら P(*) + AG を表示、。
RはAHが 0 なら空白、AHが 1 なら Q(*) + AH を表示。
SはAIが 0 なら空白、AIが 1 なら R(*) + AI を表示。
'
'ただし Pの式:Oが空白なら Oの代わりに N を足す。
同様に Qの式: Pが空白なら 左の空白でないセルの値を足す。
同様に Rの式: Qが空白なら 左の空白でないセルの値を足す。
同様に Sの式: Rが空白なら 左の空白でないセルの値を足す。

'↑この処理は 空白でないとき +1した値をセルに書き込む、と同時に
 セルのIDプロパティにも書き込んでおけば、
次のセルが空白だったとき、そのセルのIDプロパティをコピーすれば
NまでLoopで遡る必要がない。

これをコードにすると、

Sub test2()
  Dim c As Range
  
  [N1].Value = [K1].Value - ([N1].Value = 1)
  [N1].ID = [N1].Value
  
  [O1:AA1].ClearContents
  For Each c In [O1:AA1]
    If c.Offset(, 16).Value = 1 Then
      c.Value = CDate(c.Offset(, -1).ID) + 1
      c.ID = c.Value
    Else
      c.ID = c.Offset(, -1).ID
    End If
  Next
    
End Sub

【73902】Re:IF文教えてください。
発言  kanabun  - 13/3/19(火) 0:16 -

引用なし
パスワード
   ↑すみません。間違えました

> NはADが 0 なら [K]、ADが 1 なら K + AD を表示。 Kは必ず「日付」。

Sub test2()
  Dim c As Range
  
  [N1].Value = [K1].Value - ([AD1].Value = 1) ’●訂正
  [N1].ID = [N1].Value
  
  [O1:AA1].ClearContents
  For Each c In [O1:AA1]
    If c.Offset(, 16).Value = 1 Then
      c.Value = CDate(c.Offset(, -1).ID) + 1
      c.ID = c.Value
    Else
      c.ID = c.Offset(, -1).ID
    End If
  Next
    
End Sub

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