Excel VBA質問箱 IV

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

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


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

【35853】隣のセルの値によって決まった値を入れたいのです。 pochiman 06/3/14(火) 17:47 質問[未読]
【35857】Re:日付から年度を取得して、それに対応し... かみちゃん 06/3/14(火) 18:17 回答[未読]
【35867】Re:日付から年度を取得して、それに対応し... pochiman 06/3/14(火) 23:59 お礼[未読]
【35858】Re:隣のセルの値によって決まった値を入れ... ゆと 06/3/14(火) 18:17 発言[未読]
【35868】Re:隣のセルの値によって決まった値を入れ... pochiman 06/3/15(水) 0:04 お礼[未読]

【35853】隣のセルの値によって決まった値を入れた...
質問  pochiman  - 06/3/14(火) 17:47 -

引用なし
パスワード
   よろしくお願いいたします。
下記のようなワークシートで、(A列に自動で数値を入力したい)
A列は空欄です。
B列には8桁の日付があらかじめ入力されています。

A列   B列
61    20060202
61    20050701
62    20060602
63    20070601

条件は B列の数値で決まります。

20050401 から 20060331 までなら A列に 61
20060401 から 20070331 までなら A列に 62
20070401 から 20080331 までなら A列に 63
20080401 から 20090331 までなら A列に 64

A列の最初にセルを置いて、

Do Until ActiveCell.Offset(1,1).Value = ""
  With
   ここに、条件分岐の記述をして自動で入力しようと思ったのですが、
   記述がよくわかりません。

  .Offset(1,0).select
  End Wth
Loop

考え方は、Do Loopで順番に下へ移動しながら数値を入力すれば
よいかと思いますが、他によい方法があればあわせて教えてください。
よろしくお願いいたします。

【35857】Re:日付から年度を取得して、それに対応...
回答  かみちゃん E-MAIL  - 06/3/14(火) 18:17 -

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

>下記のようなワークシートで、(A列に自動で数値を入力したい)
>A列は空欄です。
>B列には8桁の日付があらかじめ入力されています。
>
>A列   B列
> 61    20060202
> 61    20050701
> 62    20060602
> 63    20070601
>
>条件は B列の数値で決まります。
>
>20050401 から 20060331 までなら A列に 61
>20060401 から 20070331 までなら A列に 62
>20070401 から 20080331 までなら A列に 63
>20080401 から 20090331 までなら A列に 64

3月31日を末日とする年度を取得し、その年度から1944を引いた値を求めるという
規則性でよければ、以下のような感じでできます。

なお、年度取得関数については、以下のURLを参考にしています。
http://www.nurs.or.jp/~ppoy/access/access/acM059.html

Sub Macro1()
 Dim c As Range
 
 For Each c In Range("B2:B5")
  '3/31を末日とする年度を取得し、その年度から1944を引いた値を求める
  If IsDate(Format(c.Value, "0000\/00\/00")) Then
   c.Offset(, -1).Value = GetNenDo(DateValue(Format(c.Value, "0000\/00\/00")), 3, 31) - 1944
  End If
 Next
End Sub

'決算月日を考慮した西暦年度取得
'GetNenDo(売上日,決算月,締め日)
'例: GetNenDo("2006/03/14",3,31) → 2005
Function GetNenDo(ByVal myDate, ByVal myEmonth, ByVal myEday) As Long
 Dim tmpDate As Integer
 Dim tmpYear As Long
 Dim tmpMonth As Integer

 GetNenDo = 0
 If IsNull(myEmonth) Then Exit Function
 If IsNull(myEday) Then Exit Function
 If IsNull(myDate) Then Exit Function

 '月
 If IsDate(myDate) Then tmpMonth = Month(myDate) Else Exit Function

 '年
 If tmpMonth < myEmonth Then
  '決算月の前
  tmpYear = Year(myDate) - 1
 ElseIf tmpMonth = myEmonth Then
  '決算月
  tmpDate = Day(myDate)
  If tmpDate <= myEday Then
   tmpYear = Year(myDate) - 1
  Else
   tmpYear = Year(myDate)
  End If
 Else
  '決算月の後
  tmpYear = Year(myDate)
 End If

 '年末決算の例外
 If DateSerial(Year(Date), myEmonth, myEday) = _
  DateSerial(Year(Date), 12, 31) Then
  tmpYear = tmpYear + 1
 End If

 GetNenDo = tmpYear
End Function

【35858】Re:隣のセルの値によって決まった値を入...
発言  ゆと  - 06/3/14(火) 18:17 -

引用なし
パスワード
   pochimanさんこんばんは。

Select Case について調べて見ることをお勧めします。

また、B列が入力されている範囲で見るのでしたら
Cells(65536,2).End(xlup).Row
で現在表示されているシートのB列最終行が選択できます。

さらにActiveやSelectはコードから極力減らすことをお勧めします。

【35867】Re:日付から年度を取得して、それに対応...
お礼  pochiman  - 06/3/14(火) 23:59 -

引用なし
パスワード
   かみちゃんさん。ありがとうございます。
「年度取得関数」というのは知りませんでした。
業務で必ずと言っていいほど使用する「年度」ですので
助かります。
いろいろな場面で使えそうですね。
これから、該当HPも見てみます。
ありがとうございました。

【35868】Re:隣のセルの値によって決まった値を入...
お礼  pochiman  - 06/3/15(水) 0:04 -

引用なし
パスワード
   ゆとさん。アドバイスありがとうございます。
なにせ、「VBAの基礎?」と「応用プロの技?」の
2冊を行ったり来たりという無謀なことをしておりますので
「なんだ、こんな事も知らないのか」と叱られそうです。
業務で作れと言うことなので・・・、申し訳有りません。
早速、
Select Case について調べてみます。
ありがとうございました。

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